ZYNQ-PL实践课堂(三)IP核之MMCM/PLL
- 其他
- 2025-09-18 05:18:02

ZYNQ-PL实践课堂(三)IP核之MMCM/PLL) 1 概述2 约束3 添加、配置PLL IP核4 生成输出项5 编辑verilog 代码6 编辑仿真文件7 编译下载总结 1 概述
PLL (锁相环)控制时钟网络的时钟管理和偏移控制, 包括:分频、倍频、相位偏移和调节占空比的功能。MMCM 主要用于驱动器件逻辑(CLB、 DSP、 RAM 等)的时钟。 PLL 主要用于内存接口所需时钟信号。
Xilinx 7系列中的时钟资源包含了CMT (时钟管理单元),提个CMT包含一个MMCM和一个PLL组成。 本文主要介绍MMCM/PLL核的使用,xc7z020 芯片内部有 4 个 CMT。时钟管理单元的总体框图如下: 时钟输入类别如下:
IBUFG(CC): 具有时钟能力的IO 输入 BUFR : 区域时钟 BUFR : 全局时钟 GT : 收发器输出时钟 BUFH : 行时钟本文介绍MMCM/PLL 的参考时钟输入来自 IBUFG(CC)。MMCM总体框图如下, PLL总体框图如下, PLL 组成:
前置分频计数器(D 计数器) 相位-频率检测器(PFD,Phase-Frequency Detector)电路 电荷泵(Charge Pump) 环路滤波器(Loop Filter) 压控振荡器(VCO, Voltage Controlled Oscillator) 反馈乘法器计数器(M 计数器) 和后置分频计数器(O1-O6 计数器)方程描述: FREF= FIN / D, VCO 输出频率为 FVCO = FIN * M / D, PLL 输出频率为 FOUT =(FIN * M) /(N * O)
将 Clocking Wizard IP 核产生的 4 个时钟
100MHz 100MHz_180deg 50MHz 25MHz 2 约束对应的 XDC 约束语句如下,
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 添加、配置PLL IP核创建一个工程,添加PLL IP核如下, 设置IP核名称, Primitive选择使用 MMCM 还是 PLL 来输出时钟,保持默认。
输入频率未板上晶振频率 50MHz如下, 设置输出频率,
控制信号重命名保持默认, MMCM Settings保持默认, Summary点击ok,
4 生成输出项弹出Generate Output Products,
5 编辑verilog 代码创建 ip_clk_wiz.v文件,
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 define wire locked; //MMCM/PLL IP核的例化 clk_wiz_0 clk_wiz_0 ( // Clock out ports .clk_out1_100m (clk_100m), // output clk_out1_100m .clk_out2_100m_180 (clk_100m_180deg), // output clk_out2_100m_180 .clk_out3_50m (clk_50m), // output clk_out3_50m .clk_out4_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 6 编辑仿真文件仿真输出的 4 个时钟信号直接连接到顶层端口的四个时钟输出信号,仿真 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 7 编译下载编译、下载仿真验证略。
总结对MMCM/PLL时钟IP核的应用,后续补充PLL的详细介绍。。。
感谢阅读,祝君成功! -by aiziyou
ZYNQ-PL实践课堂(三)IP核之MMCM/PLL由讯客互联其他栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“ZYNQ-PL实践课堂(三)IP核之MMCM/PLL”