锁相环(倍频,分频,利用开发板固有频率+内部专用电路 产生特定需求的时钟信号)
作者:互联网
一般来说,开发板的时钟是由板上的晶振产生的,频率大部分是固定的,但是我们在应用中有时候需要其他频率的时钟信号。为了解决这个问题,FPGA内部会留有专门的设置电路——时钟管理单元(硬件资源),利用已有的时钟信号来产生其他的时钟信号。
比如晶振50MHz,我们需要125MHz的时钟信号,这时候就需要用锁相环来配置。
常用的时钟管理单元 clocking wizard 有 PLL 和 MMCM 两种锁相环 。PLL是模拟电路,精度高,稳定,价格较贵,MMCM是数字电路,价格便宜。
Vivado中有clocking wizard的IP核可以直接调用,在这里我们直接设置好 input clock frequency , outputput clock frequency (phase ) , locked 三个信号即可。(一个IP核可以根据一个输入时钟信号输出多个不同的时钟信号)。locked信号是输出时钟信号达到稳定的标志。
配置锁相环:
注意:1.内部模块中不需要用到的端口可以直接不接。
2.例化模板直接在下图找。
代码:
module PLL_MMCM(//学会配置锁相环, clk, reset, locked_PLL, locked_MMCM, clk_ctrl_pll, clk_ctrl_mmcm_1, clk_ctrl_mmcm_2 ); input clk ; input reset ; output locked_PLL ; output locked_MMCM ; output clk_ctrl_pll ; output clk_ctrl_mmcm_1 ; output clk_ctrl_mmcm_2 ; PLL PLL ( .clk_out1(clk_ctrl_pll), .reset(reset), // input reset .locked(locked_PLL), // output locked .clk_in1(clk) ); MMCM MMCM ( // Clock out ports .clk_out1(clk_ctrl_mmcm_1), // output clk_out1 .clk_out2(clk_ctrl_mmcm_2), // output clk_out2 // Status and control signals .reset(reset), // input reset .locked(locked_MMCM), // output locked // Clock in ports .clk_in1(clk) ); endmodule
`timescale 1ns / 1ns module PLL_MMCM_tb( ); reg clk ; reg reset ; wire locked_PLL ; wire locked_MMCM ; wire clk_ctrl_pll ; wire clk_ctrl_mmcm_1 ; wire clk_ctrl_mmcm_2 ; PLL_MMCM PLL_MMCM(// clk, reset, locked_PLL, locked_MMCM, clk_ctrl_pll, clk_ctrl_mmcm_1, clk_ctrl_mmcm_2 ); initial clk = 1 ; always #10 clk = ! clk ; initial begin reset = 1 ; #201 ; reset = 0 ; #200000 ; $stop ; end endmodule
结果:
PLL较快达到输出稳定(locked先高电平)
设置的90相位差有效。
标签:reset,分频,locked,ctrl,clk,开发板,PLL,锁相环,MMCM 来源: https://www.cnblogs.com/fbur/p/16486219.html