一、PLL IP核配置
当我们需要用到分频或者倍频的时候,就需要使用Vivado中的 PLL IP核来获得我们想要的时钟频率。下面简单说明一下如何配置PLL IP核。
1、查找 PLL IP核
2、指定用于分频的输入频率
3、设置输出频率、相位以及占空比
4、设置locked信号的名字
Locked信号是用来观察pll输出时钟是否和输入时钟锁定。当锁定时,这个Locked信号就变为高电平。
5、如果需要,可以在此对之前的设置进行修改并覆盖
详细还可以参考这篇文章:
https://blog.csdn.net/weixin_42151221/article/details/103351855
二、实例1、RTL代码
module pll_test(
input sys_clk, //system clock 50Mhz on board
input rst_n, //reset ,low active
output clk_out //pll clock output J8_Pin3
);
wire locked;
/PLL IP call
clk_wiz_0 clk_wiz_0_inst
(
.clk_in1(sys_clk), // IN 50Mhz
// Clock out ports
.clk_out1(), // OUT 200Mhz
.clk_out2(), // OUT 100Mhz
.clk_out3(), // OUT 50Mhz
.clk_out4(clk_out), // OUT 25Mhz
// Status and control signals
.reset(~rst_n), // pll reset, high-active
.locked(locked)); // OUT
endmodule
2、仿真程序
`timescale 1ns / 1ps
module vtf_pll_test;
// Inputs
reg sys_clk;
reg rst_n;
// Outputs
wire clk_out;
// Instantiate the Unit Under Test (UUT)
pll_test uut (
.sys_clk(sys_clk),
.rst_n(rst_n),
.clk_out(clk_out)
);
initial begin
// Initialize Inputs
sys_clk = 0;
rst_n = 0;
// Wait 100 ns for global reset to finish
#100;
rst_n = 1;
// Add stimulus here
end
always #10 sys_clk = ~ sys_clk; //5ns一个周期,产生50MHz时钟源
endmodule
3、仿真结果
可以看到,当输出频率稳定之后,locked
信号会拉高。一般在使用的时候,都会把locked
信号作为使用该输出时钟的模块的复位信号,因为此时PLL
输出给该模块的时钟才算稳定,才预示着真正可以开始正常工作了。