FPGA的时钟IP核知识点

IP核在我看来就跟stm32中的一些驱动的库函数一样,可以调用快速使用。不用一步一步的自己写底层原理。

可以加速设计,快速设计代码。


IP核的PLL还有一个MMCM。PLL是锁相环,对时钟进行管理。也是后面使用中很重要的IP核。不同器件需要不同的时钟。

时钟管理单元CMT=PLL+MMCM混合时钟管理(MMCM=PLL+DCM相位调整):倍频、分频、相位偏移、可编程占空比和优化抖动。

这边实验任务是将50MHZ的输入时钟,输出四路不同的时钟频率。分别是100M 反相100M  50M 和 25M

配置好IP核后,通过顶层模块例化

module clk_ip(
    clk,
    reset_n,
    clk_100m,
    clk_100m_180,
    clk_50m,
    clk_25m
    
    );
    
    input   clk;
    input   reset_n;
    
    output  clk_100m;
    output  clk_100m_180;
    output  clk_50m;
    output  clk_25m;
    
    wire    locked;
    wire    rst_n;
    
    assign rst_n = reset_n & locked; // 都为高电平时,就是稳定了,复位稳定。
    
    clk_wiz_0 instance_name
   (
    // Clock out ports
    .clk_out1(clk_100m),     // output clk_out1
    .clk_out2(clk_100m_180),     // output clk_out2
    .clk_out3(clk_50m),     // output clk_out3
    .clk_out4(clk_25m),     // output clk_out4
    // Status and control signals
    .reset(~reset_n), // input reset 手册23页高电平有效
    .locked(locked),       // output locked
   // Clock in ports
    .clk_in1(clk)
    );      // input clk_in1
    

endmodule

唯一注意的地方就是,时钟IP核的复位信号,是高电平有效,所以例化的时候加上了取反。手册23页的。

然后仿真看波形

`timescale 1ns / 1ps

module clk_ip_tb();

    reg clk;
    reg reset_n;
    
    wire    clk_100m;    
    wire    clk_100m_180;
    wire    clk_50m;     
    wire    clk_25m;      
    
    initial clk = 1;
    always #10 clk = ~ clk;
    
    initial begin
        reset_n = 0;
        #201
        reset_n = 1;
 
    end
        
    clk_ip clk_ip_inst(
    .clk(clk),         
    .reset_n(reset_n),     
    .clk_100m(clk_100m),    
    .clk_100m_180(clk_100m_180),
    .clk_50m(clk_50m),     
    .clk_25m(clk_25m)      

    );


endmodule

posted @ 2024-03-13 16:26  祈愿树下  阅读(46)  评论(0编辑  收藏  举报
// 侧边栏目录 // https://blog-static.cnblogs.com/files/douzujun/marvin.nav.my1502.css