【Vivado】clock ip核的使用
1、绪论
Clock在时序逻辑的设计中是不可或缺的,同时对于Clock的编写和优化也能体现一个FPGA工程师的技术水平,Clock的分频,倍频在设计项目时都有可能用到,对于分频,可以通过代码的方式进行实现,而倍频,就要用到我们今天的主角——Clock IP核。熟练使用Clock IP核是学习FPGA的基础,需要熟练掌握。
2、简介
专业词汇解释:
PLL(Phase Locked Loop) :为锁相回路或锁相环,用来统一整合时钟信号,使高频器件正常工作,如内存的存取资料等。PLL用于振荡器中的反馈技术。 许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步。一般的晶振由于工艺与成本原因,做不到很高的频率,而在需要高频应用时,由相应的器件VCO,实现转成高频,但并不稳定,故利用锁相环路就可以实现稳定且高频的时钟信号。其具有时钟倍频、分频、相位偏移和可编程占空比的功能。
CMT(Clock Management Tile):时钟管理器,包含了DCM/PLL/DCM等。
MMCM(Mixed Mode Clock Manager):混合模式时钟管理器, MMCM 功能是 PLL 的超集 ,在PLL的基础上加上了相位动态调整功能,因为PLL是模块电路,而动态调相是数字电路,所以叫Mixed Mode。MMCM是在Virtex-6中被引入的,而且Virtex-6中也只有MMCM。
DCM:在较早的FPGA中使用,比如Sparten-3和Virtex-4,后面的器件不再使用了。在Virtex-4中,CMT包括一个PLL和两个DCM。DCM的核心是DLL,即Delay Locked Loop,它是一个数字模块,可以产生不同相位的时钟、分频、倍频、相位动态调整等,但精度有限。
*笔者在使用Xilinx Spartan_6系列的fpga时的CMT是由DCM与PLL组成,而目前Xilinx 7 系列器件中的每个CMT由一个MMCM和一个PLL组成。
Xilinx 7 系列器件中具有时钟管理单元 CMT 时钟资源, xc7a100t 芯片内部有 6 个 CMT, 为设备提供强大的系统时钟管理以及高速 I/O 通信的能力。 时钟管理单元 CMT 的总体框图如下图所示:
前面已经介绍了在Xilinx 7系列的芯片中,一个CMT由一个MMCM和一个PLL组成。下面对MMCM和PLL进行对比:
由两张图我们可以直观看到MMCM和PLL的组成结构基本相同。
MMCM( Mixed-Mode Clock Manager)混合模式时钟管理器, MMCM 功能是 PLL 的超集,它是在 PLL的基础上加了相位动态调整功能, PLL 是模拟的,而动态调相是数字电路,所以称为混合模式。其相对于 PLL 的优势是相位可以动态调整,占用面积较大。 MMCM 主要用于驱动器件逻辑( CLB、 DSP、 RAM 等)的时钟。 PLL 是和 IO 资源紧密绑定的,占用面积小,常用于为内存接口生成所需的时钟信号,但也具有与其他器件逻辑的连接,因此如果需要额外的功能,它们可以用作额外的时钟资源。
Xilinx 提供了用于实现时钟功能的 IP 核 Clocking Wizard,该 IP 核能够根据用户的时钟需求自动配置器件内部的 CMT,以实现用户的时钟需求。在这里我们主要讲解的是如何使用该 IP 核,有关该 IP 核的更详细介绍,可以参阅 Xilinx 官方的手册文档“PG065, Clocking Wizard v5.2 LogiCORE IP Product Guide”(点击跳转)。
3、实验目的
开发平台:vivado2020.1
开发板:Xilinx Artix-7 xc7a100tfgg676-2
目的:使用开发板输出 4 个不同时钟频率或相位的时钟, 并在 Vivado 中进行仿真以验证结果
4、程序设计
1、先建立一个ip_clock的工程
2、创建clock ip核,在 Vivado 软件的左侧“Flow Navigator”栏中单击“IP Catalog”,
然后在下图中搜索“clock”,如下图所示,双击“ Clocking Wizard ”后弹出 IP 核的配置界面。
3、配置 IP 核
接下来切换至“ Output Clocks”选项卡,在“ Output Clock”选项卡中,勾选前 4 个时钟,并且将其“ Output Freq(MHz)”分别设置为 100、 100、 50、 25,注意,第 2 个 100MHz 时钟的相移“Phase(degrees)”一栏要设置为 180。其他设置保持默认即可,如下图所示:
“ Port Renaming”选项卡主要是对一些控制信号的重命名。这里我们只用到了锁定指示 locked 信号,其名称保持默认即可,如下图所示:
“ MMCM Setting”选项卡展示了对整个 MMCM/PLL 的最终配置参数,这些参数都是根据之前用户输入的时钟需求由 Vivado 来自动配置, Vivado 已经对参数进行了最优的配置,在绝大多数情况下都不需要用户对它们进行更改,也不建议更改,所以这一步保持默认即可,如下图所示:
最后的“ Summary”选项卡是对前面所有配置的一个总结,在这里我们直接点击“OK”按钮即可,如下图所示:
接着就弹出了“Generate Output Products”窗口,我们直接点击“Generate”即可,如下图所示:
等待一会儿,窗口可以看见生成的IP核,此处介绍如何查看ip核的源文件和模板文件。如下图所示,点击此处>
可查看源文件。
然后点击下方"IP Sources" ,如图所示,便是模板文件。
模板文件里有例化 IP 核的模板,如下所示:
clk_wiz_0 instance_name(// Clock out ports.clk_out1(clk_out1), // output clk_out1.clk_out2(clk_out2), // output clk_out2.clk_out3(clk_out3), // output clk_out3.clk_out4(clk_out4), // output clk_out4// Status and control signals.resetn(resetn), // input resetn.locked(locked), // output locked// Clock in ports.clk_in1(clk_in1)); // input clk_in1
4、编写程序
接下来创建一个新的设计文件,命名为clk_wiz.v,代码如下:
module clk_wiz(input sys_clk,input sys_rst_n,output clk_out1,output clk_out2,output clk_out3,output clk_out4,output locked);clk_wiz_0 instance_name(// Clock out ports.clk_out1(clk_out1), // output clk_out1.clk_out2(clk_out2), // output clk_out2.clk_out3(clk_out3), // output clk_out3.clk_out4(clk_out4), // output clk_out4// Status and control signals.resetn(sys_rst_n), // input resetn.locked(locked), // output locked// Clock in ports.clk_in1(sys_clk)); // input clk_in1endmodule
它将 IP 核例化后,加上了输入输出,其原理图如下:
5、仿真测试
设计完成之后,需要进行仿真,查看结果是否符合预取,创建一个“tb_clk_wiz.v”的仿真文件,仿真代码编写如下:
`timescale 1ns / 1psmodule tb_clk_wiz();
reg sys_clk;
reg sys_rst_n;wire clk_out1;
wire clk_out2;
wire clk_out3;
wire clk_out4;
wire locked;clk_wiz clk_wiz_inst(.sys_clk(sys_clk),.sys_rst_n(sys_rst_n),.clk_out1(clk_out1),.clk_out2(clk_out2),.clk_out3(clk_out3),.clk_out4(clk_out4),.locked(locked)
);initial begin sys_clk = 1'b0;sys_rst_n = 1'b0;#200sys_rst_n = 1'b1;endalways #10 sys_clk = ~sys_clk;endmodule
仿真结果如下图所示,结果符合预期。
【Vivado】clock ip核的使用相关推荐
- Xilinx vivado 常用IP核使用
目录 1. Accumulator 12.0 2. Aurora 8B10B 11.1 3. Clocking Wizard 3.1. 时钟资源 4. Divider Generator 5.1 5. ...
- 基于vivado DDS ip核的DDS信号发生器(可调频调相)
基于Vivado DDS ip核的DDS信号发生器: 在Vivado软件中调出DDS ip核进行设置,很多参数可以参考xilinx官方手册,比较重要的是System Clock系统时钟和Phase W ...
- Vivado 下 IP核 之ROM 读写
目录 Vivado 下 IP核 之ROM 读写 1.实验简介 2.ROM IP 核简介 3.ROM IP 核配置 3.1.创建 ROM 初始化文件 3.2.单端口 ROM 的配置 加载数据文件,将 . ...
- Vivado FIFO IP核接口信号介绍
1.1 Vivado FIFO IP核接口信号介绍 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Vivado FIFO IP核接口信号介绍: 5)结束语. 1.1.2 ...
- Vivado MMCM IP核接口信号介绍
1.1 Vivado MMCM IP核接口信号介绍 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Vivado MMCM IP核接口信号介绍: 5)结束语. 1.1.2 ...
- vivado dds IP核笔记
vivado dds IP核笔记 DDS IP核在vivado提供的GUI界面中,可以选择三种配置: Phase Generator and SIN/COS LUT (DDS) SIN/COS LUT ...
- vivado ROM IP核简单使用
vivado ROM IP核简单使用 vivado配置 下面选择数据的存储深度和数据的位宽 ROM内存储的数据由coe文件初始化 下面是初始化coe文件的内容 memory_initializatio ...
- FPGA设计中,Vivado 调用IP核详细操作步骤
FPGA设计中,Vivado 调用IP核详细操作步骤 今天给大侠带来了FPGA设计中,Vivado 调用IP核详细操作步骤,话不多说,手把手教学,请往下看. 首先咱们来了解一下vivado的IP核,I ...
- 基于Vivado MIG IP核的DDR3读写实验(top_rom_ddr/ddr_top)
一.前言 关于Vivado MIG IP核详细配置可以参考我之前的文章:基于Vivado MIG IP核的DDR3控制器(DDR3_CONTROL) 关于MIG IP核的用户端的接口时序可以参考这篇文 ...
最新文章
- 从RBM(受限玻尔兹曼机)开始、到深度信念网络(DBN)再到自动编码器(AE)
- python套接字编程_Python套接字编程(1)——socket模块与套接字编程
- SQL的不合理有效性
- Hyper-V 3 虚拟机快照之四 导入/导出快照
- IO:Reactor和Proactor的区别
- 一些常被你忽略的CSS小知识
- 机器学习——超参数调优
- wordpress如何使用vim和markdown写blog
- 数字化方法基础(四)_矩阵操作
- tfs 解除锁定命令
- 全球顶尖!StarVR推出搭载集成眼动追踪的VR设备
- 献礼厦门大学百年校庆!亿联网络「沉浸式交互教室」首次亮相即惊艳
- XML学习总结(三)——SAXReader解析xml文件数据
- ant design table样式修改合集
- lopatkin俄大神精简Windows 10 Pro 19041.450 20H1 Release x86-x64 ZH_CN DREY[2020-08-19]
- python随机生成一个整数n、求s=1+2+3_随机数字生成与数据杜撰—Python、Stata、R和Excel同步实现(附代码)...
- c++求一个数的因子
- java webshell_都0202年了老嗨还在用的 - 各种姿势jsp webshell
- 计算机系统 ahci模式,老电脑安装系统忘记开启AHCI模式,教你不重装系统开启AHCI解决方法(3)...
- 外部连接Redis时候,出现Time Out异常
热门文章
- 关于双排针之间的连接问题
- three.js进阶之骨骼绑定
- 爱尚秒赞网自用模版 支持彩虹秒赞最新版程序
- 从《遇见大咖》看董明珠有感
- 最小二乘拟合 matlab 初值的选取,最小二乘拟合法
- 常用px, pt, em 换算表
- php 阅读量 怎么计算,微信阅读数和点赞数怎么算
- vivo校招java岗面试_热乎乎的VIVO一面二面面经;JAVA开发
- Hadoop HA 高可用集群启动报错 Encountered exception loading fsimage 解决方案
- 说不尽的卡尔曼 | 详解扩展卡尔曼滤波器