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核的使用相关推荐

  1. Xilinx vivado 常用IP核使用

    目录 1. Accumulator 12.0 2. Aurora 8B10B 11.1 3. Clocking Wizard 3.1. 时钟资源 4. Divider Generator 5.1 5. ...

  2. 基于vivado DDS ip核的DDS信号发生器(可调频调相)

    基于Vivado DDS ip核的DDS信号发生器: 在Vivado软件中调出DDS ip核进行设置,很多参数可以参考xilinx官方手册,比较重要的是System Clock系统时钟和Phase W ...

  3. Vivado 下 IP核 之ROM 读写

    目录 Vivado 下 IP核 之ROM 读写 1.实验简介 2.ROM IP 核简介 3.ROM IP 核配置 3.1.创建 ROM 初始化文件 3.2.单端口 ROM 的配置 加载数据文件,将 . ...

  4. Vivado FIFO IP核接口信号介绍

    1.1 Vivado FIFO IP核接口信号介绍 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Vivado FIFO IP核接口信号介绍: 5)结束语. 1.1.2 ...

  5. Vivado MMCM IP核接口信号介绍

    1.1 Vivado MMCM IP核接口信号介绍 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)Vivado MMCM IP核接口信号介绍: 5)结束语. 1.1.2 ...

  6. vivado dds IP核笔记

    vivado dds IP核笔记 DDS IP核在vivado提供的GUI界面中,可以选择三种配置: Phase Generator and SIN/COS LUT (DDS) SIN/COS LUT ...

  7. vivado ROM IP核简单使用

    vivado ROM IP核简单使用 vivado配置 下面选择数据的存储深度和数据的位宽 ROM内存储的数据由coe文件初始化 下面是初始化coe文件的内容 memory_initializatio ...

  8. FPGA设计中,Vivado 调用IP核详细操作步骤

    FPGA设计中,Vivado 调用IP核详细操作步骤 今天给大侠带来了FPGA设计中,Vivado 调用IP核详细操作步骤,话不多说,手把手教学,请往下看. 首先咱们来了解一下vivado的IP核,I ...

  9. 基于Vivado MIG IP核的DDR3读写实验(top_rom_ddr/ddr_top)

    一.前言 关于Vivado MIG IP核详细配置可以参考我之前的文章:基于Vivado MIG IP核的DDR3控制器(DDR3_CONTROL) 关于MIG IP核的用户端的接口时序可以参考这篇文 ...

最新文章

  1. 从RBM(受限玻尔兹曼机)开始、到深度信念网络(DBN)再到自动编码器(AE)
  2. python套接字编程_Python套接字编程(1)——socket模块与套接字编程
  3. SQL的不合理有效性
  4. Hyper-V 3 虚拟机快照之四 导入/导出快照
  5. IO:Reactor和Proactor的区别
  6. 一些常被你忽略的CSS小知识
  7. 机器学习——超参数调优
  8. wordpress如何使用vim和markdown写blog
  9. 数字化方法基础(四)_矩阵操作
  10. tfs 解除锁定命令
  11. 全球顶尖!StarVR推出搭载集成眼动追踪的VR设备
  12. 献礼厦门大学百年校庆!亿联网络「沉浸式交互教室」首次亮相即惊艳
  13. XML学习总结(三)——SAXReader解析xml文件数据
  14. ant design table样式修改合集
  15. lopatkin俄大神精简Windows 10 Pro 19041.450 20H1 Release x86-x64 ZH_CN DREY[2020-08-19]
  16. python随机生成一个整数n、求s=1+2+3_随机数字生成与数据杜撰—Python、Stata、R和Excel同步实现(附代码)...
  17. c++求一个数的因子
  18. java webshell_都0202年了老嗨还在用的 - 各种姿势jsp webshell
  19. 计算机系统 ahci模式,老电脑安装系统忘记开启AHCI模式,教你不重装系统开启AHCI解决方法(3)...
  20. 外部连接Redis时候,出现Time Out异常

热门文章

  1. 关于双排针之间的连接问题
  2. three.js进阶之骨骼绑定
  3. 爱尚秒赞网自用模版 支持彩虹秒赞最新版程序
  4. 从《遇见大咖》看董明珠有感
  5. 最小二乘拟合 matlab 初值的选取,最小二乘拟合法
  6. 常用px, pt, em 换算表
  7. php 阅读量 怎么计算,微信阅读数和点赞数怎么算
  8. vivo校招java岗面试_热乎乎的VIVO一面二面面经;JAVA开发
  9. Hadoop HA 高可用集群启动报错 Encountered exception loading fsimage 解决方案
  10. 说不尽的卡尔曼 | 详解扩展卡尔曼滤波器