一、简介
IP(Intellectual Property),即知识产权,是ASIC或FPGA中的预先设计好的电路功能模块。
Xilinx FPGA的时钟管理:CMT(Clock Management Tiles):时钟管理单元,可以对时钟进行管理,具有时钟倍频、分频、相位偏移、可编程占空比和优化抖动等功能。
MMCM和PLL:MMCM(混合模式的时钟管理,数字电路)是在PLL(锁相环,模拟电路)基础上加入的DCM(数字时钟管理单元)的一部分以进行精细的相移,即MMCM在PLL基础上加上了相位动态调整功能,MMCM相对PLL的优势就是相位可动态调整,但PLL占用的面积更小。
PLL是一种时钟反馈控制电路,其特点是利用外部输入的参考信号控制环路内部震荡信号的频率和相位。
二、实验任务
本节的实验任务是使用开发板输出4路不同频率或相位的时钟,时钟分别为100Mhz,100Mhz(相位偏移180度)、50Mhz和25Mhz。将四路时钟分别输出至扩展口的端口,并通过示波器来测量输出结果是否准确。
三、创建时钟IP核
1.波形图
2.在vivado中创建工程
在ip目录找到clock下的clocking wizard
配置好后点击ok
3.编写顶层例化代码
module ip_clk_wiz(
input sys_clk,
input sys_rst_n, //低电平有效
output clk_100m,
output clk_100m_180deg,
output clk_50m,
output clk_25m
);
wire locked;
wire rst_n;
assign rst_n = sys_rst_n & locked;
clk_wiz_0 instance_name
(
// Clock out ports
.clk_out1 (clk_100m), // output clk_out1
.clk_out2 (clk_100m_180deg), // output clk_out2
.clk_out3 (clk_50m), // output clk_out3
.clk_out4 (clk_25m), // output clk_out4
// 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
4.vivado仿真
编写tb文件
'timescale 1ns/1ns //仿真单位/仿真精度
module tb_ip_clk_wiz();
parameter CLK_PERIOD = 20;
reg sys_clk; //周期20ns
reg sys_rst_n;
wire clk_100m ;
wire clk_100m_180deg;
wire clk_50m ;
wire clk_25m ;
initial begin
sys_clk <= 1'b0;
sys_rst_n <= 1'b0;
#200
sys_rst_n <= 1'b1;
end
always #(CLK_PERIOD/2) sys_clk = ~sys_clk;
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
在design sources中添加例化代码和tb文件
运行功能仿真后
5.联合仿真
vivado编译仿真库
配置完成后编译
在ip项目中设置对应
在vivado中运行仿真之后自动同步到modulesim中
输出波形与预计波形相同。
四、下载验证
生成约束文件。
编译之后下载到开发板。
通过示波器测试25Mhz引脚可以看出实现该功能。