FPGA学习 PLL锁相环

一、CMT(时钟管理单元)

在学习PLL锁相环之前,我们要先了解CMT(clock management tile)

以Xilinx 7系列FPGA 为例(ZYNQ系列中PL端结构与7系列相同)

  • CMT(时钟管理单元) :内部包含MMCM与PLL
    • MMCM(混合时钟管理),相比于PLL,可进行动态相位调整
    • PLL(锁相环),用于输出更广的频率范围,可看作频率合成器

CMT模块图如下,可以看到其中包含一个MMCM与一个PLL。
FPGA学习 PLL锁相环_第1张图片
MMCM模块图如下,在与给定输入时钟有设定的相位和频率关系时,生成不同的时钟信号。
FPGA学习 PLL锁相环_第2张图片
PLL模块图如下,使用一个PLL可以从一个输入时钟信号生成多个时钟信号。
FPGA学习 PLL锁相环_第3张图片

二、PLL锁相环

下面介绍在vivado中如何创建PLL锁相环。

  1. 新建vivado工程,具体过程见链接: vivado入门级指南
  2. 创建工程后,在项目管理目录下,选择IP Catalog,搜索“clock”:
    FPGA学习 PLL锁相环_第4张图片
    打开后可看到IP设置菜单,在MMCM下,可进行动态相位调整,切换至PLL时则无此选项:
    FPGA学习 PLL锁相环_第5张图片
    FPGA学习 PLL锁相环_第6张图片
    FPGA学习 PLL锁相环_第7张图片
    然后逐步点击设置进行生成即可,完成后会出现下图所示模块:
    FPGA学习 PLL锁相环_第8张图片
  3. 创建设计文件进行例化,具体过程见链接: vivado入门级指南
    例化文件的书写我们可以查找模板,步骤如下:
    FPGA学习 PLL锁相环_第9张图片
    打开后,将此代码段进行复制。
    FPGA学习 PLL锁相环_第10张图片
    pll.v代码如下(只输出25MHz时钟进行测试):
module pll(

input sys_clk,
input rst_n,
output clk_out

    );
    
wire pll_locked;
    
    clk_wiz_0  clk_test
       (
        // Clock out ports
        .clk_out1(),     // output clk_out1
        .clk_out2(),     // output clk_out2
        .clk_out3(),     // output clk_out3
        .clk_out4(clk_out),     // output clk_out4
        // Status and control signals
        .reset(~rst_n), // input reset
        .locked(pll_locked),       // output locked
       // Clock in ports
        .clk_in1(sys_clk));  
    
endmodule
  1. 创建仿真文件,过程同上,vtf_pll.v代码如下(只输出25MHz时钟进行测试):
module vtf_pll(
    );

reg  sys_clk;
reg rst_n   ;
wire clk_out;
   
 pll  clk_test
 (
    .sys_clk (sys_clk)   ,
    .rst_n   (rst_n)     ,
    . clk_out(clk_out)
 );
 
 initial
 begin
    sys_clk = 1'b0;
    rst_n   = 1'b0;
    #100 rst_n = 1'b1;
 end
 
 always #10 sys_clk = ~sys_clk;
 
endmodule

然后进行仿真。
FPGA学习 PLL锁相环_第11张图片
接着运行仿真(Run Behavior Simulation),分析结果。
在这里插入图片描述
其中,前段为系统初始化和锁相环运行时间,运行稳定后,可看见clk_out进行周期性变化。
在这里插入图片描述
放大后半部分,可看到,输出时钟的周期是系统时钟的两倍,因此频率为其1/2,即25MHz。

接着我们将所有信号拉入后进行测试,在locked信号处于上升沿时,此时输出的时钟才为稳定时钟,在前一段时间里,时钟可能会有抖动,无法使用,但注意,此过程时间极短。
FPGA学习 PLL锁相环_第12张图片
本文参考《course_s1_ZYNQ那些事儿-FPGA实验篇V1.06》

你可能感兴趣的:(Vivado,fpga开发,嵌入式硬件)