ZYNQ-PL实践课堂(三)IP核之MMCM/PLL
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