当前位置: 首页 > news >正文

FPGA开发——在Quartus中实现对IP核的PLL调用

一、简介

        PLL主要由鉴相器(PD)、环路滤波器(LF)和压控振荡器(VCO)三部分组成。鉴相器检测输入信号与VCO输出信号的相位差,并输出一个与相位差成正比的电压信号。该信号经过环路滤波器滤除高频噪声后,作为控制电压输入到VCO,调整其振荡频率,使输出信号的相位逐渐接近输入信号的相位,直至两者相位锁定。

        PLL是FPGA重要的资源,不同FPGA的PLL 是不一样。以我们开发板的Cyclone IV为例,它有两个PLL,每个PLL可以提供5路输出。
        PLL 的时钟输入可以是PLL 所在的 Bank 的时钟输入管脚或者其他 PLL 的输出,FPGA 内部产生的信号不能驱动PLL。Cyclone IV PLL 产生的时钟可以为单端时钟信号或差分时钟信号, 可以通过GCLK 网络直接驱动 FPGA 外部的 IO 口。

二、PLL的调用

 1、首先打开Quartus ,进行工程的创建,这里在前面已经说过怎样创建工程。如果有不会的小伙伴可以在我主页找找。

2、创建好工程之后在右边的IP Catalog 中输入“PLL”搜索IP核。双击选择“ALTPLL”选项。

3、选择好ALT PLL进入到之后,选择我们pll存放的路径(这里我们可以工程文件夹里新建一个ip或者ip_core文件夹,用于存放我们引用的ip核相关的文件)。

 文件夹样式:

这里是我保存的文件夹和pll的名字,大家可以参考(这里的名字可以自己取,只要知道就行) ,选择好之后点击“OK”进入下一个界面。

 

4、 IP核配置界面

如下图,是配置PLL的初始界面,
1是速度等级,由芯片型号决定,不用更改。
2是输入时钟频率,此处修改为50MHz,与开发板匹配。
3是PLL的类型,默认不用修改。
4是PLL的四种输出模式,选择普通模式(In normal mode)即可。
5是补偿输出时钟,不用改。

 我们真正需要改的部分就只有2的时钟频率,其他的基本上都是默认选择好的。

5、 这里的optional inputs 我们选择第二个使用异步复位进行pll的复位,在Lock Output我们选择第一个选项创建一个锁定信号locked,当输出时钟达到想要的时钟频率时,locked才为高,系统才会工作。选择好之后点击next。

6、本页面主要是扩展频谱时钟和带宽等参数,保持默认,点击next。

 

7、这里是第二个时钟信号创建界面,用户可以根据自身看是否需要,这里一般不用选择。

 

8、这里也保持默认,不用选择。

 

9、下面是pll输出的时钟设置界面,一个pll总共可以输出5个时钟,可以进行倍频、分频、相位偏移、占空比等的操作 。

1是5个时钟,点击对应的时钟可以进行不同的设置。

2是使用该时钟,要使用这个时钟,这个必须选上,否则使用不了该时钟。 

3和4的功能有点相似,都可以对输出时钟频率进行设置,如果使用3的话,√上选项,直接在后面的框中输入想要的频率就可以设置,而选择使用4的话就需要选择相应的分频或者倍频因子,才能得到我们想要的输出频率。4的第一行是倍频因子,第二行是分频因子。

5是时钟占空比,默认为50,根据自己需要进行设置就行。

后面的几个时钟都是按照同样的方式进行修改就行。 

10、 时钟设置之后就进入EDA设置界面,这里保持默认。

11、接着就是Summary界面,这里除了默认的ip_pll_bb.v之外,我们还要把ip_pll_inst.v实例化文件勾上,这样在后面的工程里面进行调用或者方针时直接使用就行。

 

12、最后就是在弹出的界面选择“YES”之后,我们就成功调用了pll。

 

三、波形仿真

 1、调用之后的pll文件,这里名字就是前面我们前面选择存发文件时起的名字。

2、设计文件的编写

        在rtl文件中新建一个ip_pll.v文件,对于pll_test.v进行一个调用。其中后面的实例化的代码就是我们直接从pll_test_inst里面复制过来的。

module  pll
(input   wire    sys_clk     ,   //系统时钟50Mhzoutput  wire    clk_mul_2   ,   //系统时钟经过2倍频后的时钟output  wire    clk_div_2   ,   //系统时钟经过2分频后的时钟output  wire    clk_phase_90,   //系统时钟经过相移90°后的时钟output  wire    clk_ducle_20,   //系统时钟变为占空比为20%的时钟output  wire    locked          //检测锁相环是否已经锁定,//只有该信号为高时输出的时钟才是稳定的
);//------------------------ pll_inst ------------------------
pll_ip  pll_ip_inst
(.inclk0 (sys_clk        ),  //input     inclk0.c0     (clk_mul_2      ),  //output    c0.c1     (clk_div_2      ),  //output    c1.c2     (clk_phase_90   ),  //output    c2.c3     (clk_ducle_20   ),  //output    c3.locked (locked         )   //output    locked
);endmodule

 3、测试文件的编写

`timescale  1ns/1ns
module tb_pll();//内部信号定义
wire    clk_mul_2   ;
wire    clk_div_2   ;
wire    clk_phase_90;
wire    clk_ducle_20;
wire    locked      ;reg     sys_clk     ;//初始化系统时钟
initial sys_clk = 1'b1;always #10 sys_clk = ~sys_clk;pll pll_inst
(.sys_clk        (sys_clk        ),  //input     sys_clk.clk_mul_2      (clk_mul_2      ),  //output    clk_mul_2.clk_div_2      (clk_div_2      ),  //output    clk_div_2.clk_phase_90   (clk_phase_90   ),  //output    clk_phase_90.clk_ducle_20   (clk_ducle_20   ),  //output    clk_ducle_20.locked         (locked         )   //output    locked
);endmodule

4、仿真波形图

通过各个时钟输出信号我们可以看到,不同频率的波形对应一致,到这里pll成功调用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ⌈ 传知代码 ⌋ 基于矩阵乘积态的生成模型
  • HarmonyOS笔记3:从网络数据接口API获取数据
  • 人工智能深度学习系列—深入解析:均方误差损失(MSE Loss)在深度学习中的应用与实践
  • ELK对业务日志进行收集
  • NodeJS 依赖下载及切换下载源
  • 29.Labview界面设计(下篇) --- 自定义控件库、界面布局与外观设计
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • 关于Redis的集群面试题
  • 白骑士的PyCharm教学实战项目篇 4.1 Web应用开发
  • 灵办AI:智能插件,办公与编程的得力助手
  • 【Java算法专场】位运算(上)
  • Godot学习笔记8——PONG游戏制作
  • 了解Java中的反射,带你如何使用反射
  • 【Unity/XLua】xlua自带教程示例分析(7)—— 同步测试
  • .net 7和core版 SignalR
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • canvas 高仿 Apple Watch 表盘
  • Gradle 5.0 正式版发布
  • HTML5新特性总结
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • PAT A1092
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • spark本地环境的搭建到运行第一个spark程序
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 理清楚Vue的结构
  • 聊聊flink的BlobWriter
  • 我与Jetbrains的这些年
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​​​【收录 Hello 算法】9.4 小结
  • #FPGA(基础知识)
  • #Linux(权限管理)
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • %check_box% in rails :coditions={:has_many , :through}
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (19)夹钳(用于送货)
  • (4)Elastix图像配准:3D图像
  • (Java)【深基9.例1】选举学生会
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (强烈推荐)移动端音视频从零到上手(下)
  • (转)项目管理杂谈-我所期望的新人
  • (转载)PyTorch代码规范最佳实践和样式指南
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET 5种线程安全集合
  • .NET Core 中的路径问题
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .Net Core和.Net Standard直观理解
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .net6+aspose.words导出word并转pdf