当我们需要用到分频或者倍频的时候,就需要使用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 endmodule2、仿真程序
`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时钟源 endmodule3、仿真结果
可以看到,当输出频率稳定之后,locked信号会拉高。一般在使用的时候,都会把locked信号作为使用该输出时钟的模块的复位信号,因为此时PLL输出给该模块的时钟才算稳定,才预示着真正可以开始正常工作了。
