锁相环基本上是每一个fpga工程必不可少的模块,之前文档xilinx 7 系列FPGA时钟资源 对xilinx fpga的底层时钟资源做过说明,但是对于fpga的应用来说,使用Clocking Wizard IP时十分方便的。
第二个界面如下,对输出时钟进行配置:
然后就生成了锁相环了,用户可以对其进行例化使用了:
//----------------------------------------------------------------------------// Output Output Phase Duty Cycle Pk-to-Pk Phase// Clock Freq (MHz) (degrees) (%) Jitter (ps) Error (ps)//----------------------------------------------------------------------------// clk_out1__300.00000______0.000______50.0_______94.862_____87.180// clk_out2__100.00000______0.000______50.0______115.831_____87.180// clk_out3__200.00000______0.000______50.0______102.086_____87.180////----------------------------------------------------------------------------// Input Clock Freq (MHz) Input Jitter (UI)//----------------------------------------------------------------------------// __primary_________100.000_____________0.01 // The following must be inserted into your Verilog file for this// core to be instantiated. Change the instance name and port connections// (in parentheses) to your own signal names. //----------- Begin Cut here for INSTANTIATION Template ---// INST_TAG clk_wiz_0 instance_name ( // Clock out ports .clk_out1(clk_out1), // output clk_out1 .clk_out2(clk_out2), // output clk_out2 .clk_out3(clk_out3), // output clk_out3 // Dynamic reconfiguration ports .daddr(daddr), // input [6:0] daddr .dclk(dclk), // input dclk .den(den), // input den .din(din), // input [15:0] din .dout(dout), // output [15:0] dout .drdy(drdy), // output drdy .dwe(dwe), // output dwe // Status and control signals .reset(reset), // input reset .locked(locked), // output locked // Clock in ports .clk_in1(clk_in1) // input clk_in1);
最后说几点:
首先是MMCM及PLL的选择,每个CMT包含一个MMCM和一个PLL,他们的结构如下:
MMCM:
PLL:
MMCM和一个PLL的详细差别如下表,ip生成时可以根据需要进行选择。
二是关于安全启动模式,如下图,这种模式下只有时钟锁定后才会有是时钟输出,而且时钟输出会经过8bit的移位寄存器,移位寄存器设置不同的delay值,就控制了每个时钟的输出顺序。