ZYNQ之FPGA学习----MMCM/PLL IP核使用实验

Posted 鲁棒最小二乘支持向量机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZYNQ之FPGA学习----MMCM/PLL IP核使用实验相关的知识,希望对你有一定的参考价值。

1 MMCM/PLL IP核介绍

PLL 的英文全称是 Phase Locked Loop,即锁相环,是一种反馈控制电路。PLL 对时钟网络进行系统级的时钟管理和偏移控制,具有时钟倍频、分频、相位偏移和可编程占空比的功能

Xilinx 7 系列器件中的时钟资源包含了时钟管理单元 CMT每个 CMT 由一个 MMCM 和一个 PLL 组成。时钟管理单元 CMT 的总体框图如下图所示:


图片来自《领航者ZYNQ之FPGA开发指南》

MMCM/PLL 的参考时钟输入都是来自 IBUFG(CC),即具有时钟能力的 IO 输入,输出可以驱动全局时钟 BUFG 和行时钟 BUFH等

MMCM总体框图:


图片来自《领航者ZYNQ之FPGA开发指南》

PLL总体框图:


图片来自《领航者ZYNQ之FPGA开发指南》

MMCM 的功能是 PLL 的超集,其具有比 PLL 更强大的相移功能。MMCM 主要用于驱动器件逻辑(CLB、DSP、RAM 等)的时钟PLL 主要用于为内存接口生成所需的时钟信号,但也具有与器件逻辑的连接,因此如果需要额外的功能,它们可以用作额外的时钟资源

2 实验任务

实验将 Clocking Wizard IP 核产生的 4 个时钟 100MHz、100MHz_180deg 、50MHz、25MHz,连接到开发板的 J3 扩展口 IO 上,分别是第 29、31、33、35 号脚

实验各端口信号的管脚分配如下:


图片来自《领航者ZYNQ之FPGA开发指南》

3 实验设计

3.1 创建工程

如图操作,新建工程:

如下图,直接点击Next:

输入工程名字和工程路径,点击Next:

选择创建RTL工程,如图所示:

如下图,直接点击Next:

直接点击Next:

添加芯片型号,如图所示:

工程创建完成:

3.2 设计输入

添加IP核,操作如下图:

搜索clock,找到IP核,如图所示:

双击打开IP核,修改晶振频率为50MHz,如图所示:

依次勾选4个时钟,并进行如图所示设置:

只用到了锁定指示 locked 信号,其名称保持默认即可:

如下图,所有参数保持默认:

直接点击OK即可:

点击OK:

点击Generate:

点击OK:

点击OK:

IP 核自动生成的只读的 verilog 例化模板文件,双击打开,如图所示:

创建工程顶层文件,操作如图所示:

创建文件,输入文件名:

如下图,创建完成:

弹出如下界面,点击OK:

弹出如下确认界面,点击Yes:

双击打开,输入代码如下:

module  ip_clk_wiz(
    input               sys_clk        ,  //系统时钟 
    input               sys_rst_n      ,  //系统复位,低电平有效 
    //输出时钟 
    output              clk_100m       ,  //100Mhz 时钟频率 
    output              clk_100m_180deg,  //100Mhz 时钟频率,相位偏移 180 度 
    output              clk_50m        ,  //50Mhz 时钟频率 
    output              clk_25m           //25Mhz 时钟频率 
    );
wire        locked; 
  
//MMCM/PLL IP 核的例化 
clk_wiz_0  clk_wiz_0 
( 
  // Clock out ports 
  .clk_out_100m     (clk_100m ),         // output clk_out1_100m 
  .clk_out_100m_180 (clk_100m_180deg ),  // output clk_out2_100m_180 
  .clk_out_50m      (clk_50m ),          // output clk_out3_50m 
  .clk_out_25m      (clk_25m ),          // output clk_out4_25m 
  // Status and control signals 
  .reset             (~sys_rst_n ),        // input reset 
  .locked            (locked ),           // output locked 
  // Clock in ports 
  .clk_in1           (sys_clk)            // input clk_in1 
);       
  
endmodule 

如图所示:

3.3 分析与综合

对设计进行分析,操作如图所示:

分析后的设计,Vivado自动生成顶层原理图,如图所示:

对设计进行综合,操作如图所示:

综合完成后,弹出窗口如下,直接关闭:

3.4 约束输入

创建约束文件,操作如图所示:

创建文件,输入文件名:

点击完成:

双击打开,输入约束代码:

set_property -dict PACKAGE_PIN U18 iosTANDARD LVCMOS33 [get_ports sys_clk] 
set_property -dict PACKAGE_PIN J15 IOSTANDARD LVCMOS33 [get_ports sys_rst_n] 
set_property -dict PACKAGE_PIN B19 IOSTANDARD LVCMOS33 [get_ports clk_100m] 
set_property -dict PACKAGE_PIN C20 IOSTANDARD LVCMOS33 [get_ports clk_100m_180deg] 
set_property -dict PACKAGE_PIN P19 IOSTANDARD LVCMOS33 [get_ports clk_50m] 
set_property -dict PACKAGE_PIN N18 IOSTANDARD LVCMOS33 [get_ports clk_25m]

如图所示:

3.5 设计实现

点击 Flow Navigator 窗口中的 Run Implementation,如图所示:

点击OK:

实现完成后,弹出如下界面,关闭即可:

3.6 功能仿真

创建TestBench,操作如图所示:

创建文件,输入文件名:

点击完成:

点击OK:

点击Yes:

双击打开,输入TestBench(激励)代码:

`timescale 1ns / 1ps 

module tb_ip_clk_wiz (); 

reg     sys_clk; 
reg     sys_rst_n; 

wire    clk_100m;       
wire    clk_100m_180deg; 
wire    clk_50m;      
wire    clk_25m;         
 
always #10 sys_clk = ~sys_clk; 

initial  begin 
    sys_clk = 1'b0; 
    sys_rst_n = 1'b0; 
    #200 
    sys_rst_n = 1'b1; 
end 
 
ip_clk_wiz u_ip_clk_wiz( 
    .sys_clk          (sys_clk         ), 
    .sys_rst_n        (sys_rst_n       ), 

    .clk_100m         (clk_100m        ), 
    .clk_100m_180deg  (clk_100m_180deg ), 
    .clk_50m          (clk_50m         ), 
    .clk_25m          (clk_25m        )   
    ); 

endmodule 

如图所示:

开始进行仿真,操作如下:

选择HDL仿真对象:

保存仿真文件:

点击Yes:

点击Restart,波形窗口中的当前仿真时刻点回归到0ns:

开始仿真:

仿真波形:

3.7 下载验证

由于疫情,一直无法去实验室,故ZYNQ开发板不在身边,该步骤内容待更新

致谢领航者ZYNQ开发板,开启FPGA学习之路!

希望本文对大家有帮助,上文若有不妥之处,欢迎指正

分享决定高度,学习拉开差距

以上是关于ZYNQ之FPGA学习----MMCM/PLL IP核使用实验的主要内容,如果未能解决你的问题,请参考以下文章

ZYNQ之FPGA学习----UART串口实验

ZYNQ之FPGA学习----Vivado软件使用

ZYNQ之FPGA学习----EEPROM读写测试实验

ZYNQ之FPGA学习----FIFO IP核使用实验

ZYNQ之FPGA学习----IIC协议驱动模块仿真实验

ZYNQ之FPGA学习----SPI协议驱动模块仿真实验