从底层结构开始学习FPGA(16)----PLL/MMCM IP的定制与测试
目录
系列目录与传送门
1、PLL IP的定制
①、第一页
②、第二页
③、第三页
④、第四页
⑤、第五页
2、PLL IP的例化与测试
2.1、例化一个PLL IP核
2.2、编写testbench
2.3、仿真测试
3、总结与参考
系列目录与传送门
《从底层结构开始学习FPGA》目录与传送门
在定制一个PLL IP核之前,强烈建议您先阅读:从底层结构开始学习FPGA(15)----MMCM与PLL
在这篇文章中,已经对PLL/MMCM IP核的各个关键因素做了详细的讲解。
1、PLL IP的定制
由于MMCM算是PLL一个功能上的超集,多出的动态相位移动和展频功能我们本章不详细讲解,所以以下内容均使用PLL IP核实现。
- 在新建一个工程后, 点击IP Catalog
- 点击后会出现 IP Catalog 页面,在 IP 核的搜索框中搜索 clocking
- 根据筛选,双击选择PLL核 Clocking Wizard
①、第一页
①时钟监控
Enable Clock Monitoring : 实时监测可以随时检测时钟
②实现类型
primitive:可选择PLL还是MMCM来实现,一般来讲PLL足够实现大部分功能,MMCM适合更高级一些的应用,如动态移相或者展频等
③时钟特性
Frequency Synthesis:频率综合,勾选上以后才能修改输出想要的时钟频率
Phase Alignment:相位对齐,勾选上后输入信号与输出信号相位是一致的,代价是多用了一个BUFG
Dynamic Reconfig : 可以通过AXI4接口在使用过程中动态修改IP配置,实现更灵活的时钟输出,具体实现可以参考:xapp888_7Series_DynamicRecon
Safe Clock Starup : 在时钟没稳定之前不输出,好处时钟更加稳定安全,坏处可能影响性能
Minimize Power : 优化功耗,代价是性能可能受影响
④时钟抖动(Jitter )优化
Balanced:默认选项,性能、功耗平衡状态
Minimize Output Jitter:最小化输出时钟抖动,代价是功耗变大和可能会导致相位误差
Maximize Input Jitter filtering:最大化输入时钟过滤,允许输入时钟信号的抖动变大(即允许更差质量的输入时钟信号),但是可能会导致输出时钟信号的抖动变大
⑤动态重配置选项:没有勾选该功能,所以不说了
⑥输入时钟信息
可选输入两个时钟信号作为输入
配置输入时钟的频率、抖动、来源
②、第二页
①输出时钟信息设置
勾选需要输出的时钟信息,包括频率,相位关系和占空比等,需要注意的是设定值不一定能实现,一切以实际值为准。
我们选定5个不同类型的时钟频率,具体信息见表格。
②勾选不同信号的输出顺序,需要在第①页勾选Safe Clock Starup选项
③时钟反馈:只有在第①页勾选了Phase Alignment选项才可以勾选
automatic control on-chip与user-controlled on-chip:如果你的输出时钟信号是在FPGA内部使用的,那么反馈路径就是on chip的,自动和用户自定的区别是反馈时钟引脚是自动连接还是开放给用户自己连接
automatic control off-chip与user-controlled off-chip:如果你的输出时钟信号是给FPGA外部使用的,那么反馈路径就是off chip的,自动和用户自定的区别是反馈时钟引脚是自动连接还是开放给用户自己连接。automatic control off-chip模式下还需要指定反馈引脚是单端信号(single ended)还是差分信号(differential)
④可选项
reset:复位信号
power_down:掉电模式(关闭PLL,停止输出)
locked:置位时表示PLL输出信号有效,平常使用PLL一定要等该信号有效后才使用输出时钟信号
⑤复位类型
选择高电平复位还是低电平复位。建议选择xilinx常用的高电平复位。
③、第三页
输出端口的信号重命名,一般为了通用性,不建议改名。
④、第四页
直接对PLL底层原语进行操作,实现更详细化的定制设计。一般不使用。
⑤、第五页
PLL IP核设计信息汇总,确认一下设计信息。
2、PLL IP的例化与测试
2.1、例化一个PLL IP核
按上述步骤生成IP后,复制 IP核自带的例化模板。
2.2、编写testbench
我们直接编写testbench来例化PLL IP核进行测试:
`timescale 1ns / 1nsmodule tb_pll();reg clk_in; //输入时钟50M
reg reset; //高有效的复位信号wire locked;
wire clk50_90d; //50M,偏移90度
wire clk50_n90d; //50M,偏移-90度
wire clk50_d75; //50M,占空比75%
wire clk_100; //100M
wire clk_150; //150M always #10 clk_in = ~clk_in; //产生输入时钟//初始化输入信号
initial beginreset = 1'b1;clk_in = 1'b0;#100reset = 1'b0;wait(locked); //PLL输出有效#1000 $finish;
end//例化PLL IP核
clk_wiz_0 instance_name
(// Clock out ports.clk50_90d (clk50_90d), // output clk50_90d.clk50_n90d (clk50_n90d), // output clk50_n90d.clk50_d75 (clk50_d75), // output clk50_d75.clk_100 (clk_100), // output clk_100.clk_150 (clk_150), // output clk_150// Status and control signals.reset (reset), // input reset.locked (locked), // output locked// Clock in ports.clk_in1 (clk_in)
); endmodule
2.3、仿真测试
使用vivado自带的仿真工具simulator运行仿真,仿真结果如下:
接下来分别看下各个信号:
(1)clk50_90d:50M,偏移90度
(2)clk50_n90d:50M,偏移-90度
(3)clk50_d75:50M,占空比75%
(4)clk_100:100M
(5)clk_150:150M
可以看到,所有的输出时钟信号均与预期设计一致,仿真成功。
3、总结与参考
- 就一般应用而言,PLL IP核上手非常简单;至于动态重配置和动态相位移动功能来说,可能稍微麻烦一点
- 平常的设计中不要使用分频时钟,而应该尽量使用PLL or MMCM来实现时钟信号的设计
参考资料1:pg065-clk-wiz
-
从底层结构开始学习FPGA(16)----PLL/MMCM IP的定制与测试相关推荐
- 从底层结构开始学习FPGA(5)----移位寄存器
文章目录 系列目录与传送门 一.移位寄存器SRL 1.1.概述 1.2.概念 1.3.应用 1.4.结构 1.5.级联 三.移位操作 3.1.静态操作(移位长度固定) 3.2.动态操作(移位长度可变) ...
- 从底层结构开始学习FPGA(4)----MUX多路选择器(Multiplexer)
文章目录 系列目录与传送门 一.什么是MUX 二.FPGA内部的MUX 三.总结 系列目录与传送门 <从底层结构开始学习FPGA>目录与传送门 一.什么是MUX 多路选择器MUX是一个多输 ...
- 从底层结构开始学习FPGA(1)----可配置逻辑块CLB(Configurable Logic Block)
文章目录 系列目录与传送门 一.CLB概述 二.SLICEM与SLICEL 三.查找表LUT 3.1.移位寄存器SRL 3.2.分布式DRAM 四.多路选择器MUX 五.存储单元Storage Ele ...
- 从底层结构开始学习FPGA(6)----分布式RAM(DRAM,Distributed RAM)
文章目录 系列目录与传送门 一.什么是RAM?什么是ROM? 二.块RAM和分布式RAM 2.1.BRAM 2.2.DRAM 2.3.使用建议 三.详解分布式RAM 四.实现方式 4.1.推断 4.2 ...
- 从底层结构开始学习FPGA(8)----Block RAM(BRAM,块RAM)
文章目录 系列目录与传送门 1.什么是BRAM 2.BRAM的组成 3.BRAM的使用 3.1.RAM 3.2.ROM 3.3.FIFO 4.一些需要注意的 4.1.自带的输出寄存器 4.2.BRAM ...
- 从底层结构开始学习FPGA(7)----进位链CARRY4
文章目录 系列目录与传送门 一.半加器与全加器 1.1.半加器 1.2.全加器 二.多bit加法(以4bit为例) 2.1.串行(行波)进位加法器(RCA) 2.2.超前进位加法器(Carry-Loo ...
- 从底层结构开始学习FPGA(2)----LUT查找表
文章目录 系列目录与传送门 一.概述 二.实现原理 系列目录与传送门 <从底层结构开始学习FPGA>目录与传送门 一.概述 记得刚接触FPGA的时候,总能看见类似这样的一句话----FPG ...
- 转载:从底层结构开始学习FPGA(4)— MUX多路选择器(Multiplexer)
本文转载自CSDN博主「孤独的单刀」的原创文章,原文链接:https://wuzhikai.blog.csdn.net/article/details/124764526 一.什么是MUX 多路选择器 ...
- 从底层结构开始学习FPGA----Xilinx 7 系列 FPGA 的逻辑优势
文章目录 摘要 介绍 7系列 FPGA 中的Slice架构 常见的Slice资源用法 控制信号 额外资源的好处 结论 本文主要翻译自<WP405----Xilinx 7 Series FPGAs ...
最新文章
- 翻页导航条页码计算方法
- 【面试必问】支撑百万并发的IO多路复用技术你了解吗?
- MaxCompute Studio使用心得系列7—作业对比
- 对textfield的键盘改造成滚动选择器而不是输入键盘
- [置顶] Activity启动流程
- 037_jQuery Ajax序列化
- 邮宝打印面单尺寸调整_摆脱束缚,自由轻松!无线打印奥利给(上)
- Linux服务器的架设 (DHCP,NIS,SAMBA,FTP,DNS)
- 统计学习方法概论---分类问题
- java if hasvalue_首选:可为空 .HasValue或Nullable !=空吗?
- CSS3几种新的长度单位
- 通俗地理解什么是编程语言
- Maven学习总结(28)——Maven+Nexus+Myeclipse集成
- python写crm_Python CRM项目八
- SQL Server 2017 SELECT…INTO 创建的新表指定到文件组
- 《Python自动化》学习笔记:百度云智能实现提取身份证信息
- ASP.NET MVC 3和Razor中的@helper
- LeaRun.Java快速开发平台 高效代码自动化生成
- js实现将网页下载为pdf
- 教你轻松删除PDF文件中的空白页
热门文章
- shell脚本耕升(一)
- python多大的孩子_少儿python教材适合多大的孩子?孩子接触起来困难吗?
- iPhone 基带命令
- 《星际争霸2》母舰和女王大幅度修改、行星炙星详细介绍
- snort 检测nmap_Snort***检测系统安装与配置
- 一个称得上“软件智能”的系统怎样才能落地--暨aaas设计纲要
- Goland 快捷键统计
- 【廖雪峰 python教程 课后题改编】利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字
- 八字推断系统:(一) 基础知识介绍
- 一级计算机基础演示文稿,计算机一级计算机基础及MSOffice应用辅导:在演示文稿中增加和删除幻灯片...
- 从底层结构开始学习FPGA(5)----移位寄存器