时钟分频

在FPGA中应该使用同步逻辑,工作频率的控制不应该采用“时钟分频”,而使用“时钟使能“,并尽量让所有模块使用同一个时钟。

为了产生XKHz的使能信号,可采用一个模可设置的计数器对时钟计数。

/*-----------------------------------------------------------------------

Date                :        2017-07-15
Description            :        Design for clk.

-----------------------------------------------------------------------*/

module pro_clk_en
(
    //global clock
    input                    clk,            //system clock
    input                    rst_n,             //sync reset
    
    //clk interface
    output        reg            clk_10k,       //
    output                    clk_10k_en        //    
); 


//--------------------------------
//Funtion :  pll_200
wire        clk_200;

clk_200 pll(
        .refclk(clk),   //  refclk.clk
        .rst(!rst_n),      //   reset.reset
        .outclk_0(clk_200) // outclk0.clk
        //.locked()    //  locked.export
    );

//--------------------------------
//Funtion :  计数器
//parameter            CNT_CLK_10K = 25; //50M ---- 10k 2500 1M 25   
parameter            CNT_CLK_10K = 100; //50M ---- 10k 2500 1M 25   
reg        [31:0]        cnt_clk;

always @(posedge clk_200 or negedge rst_n)
begin
    if(!rst_n)
        cnt_clk <= 0;
    else if(cnt_clk == CNT_CLK_10K - 1)
        cnt_clk <= 0;
    else
        cnt_clk <= cnt_clk + 1;
end             

assign    clk_10k_en = (cnt_clk == CNT_CLK_10K - 1) ? 1 : 0;


//--------------------------------
//Funtion :  clk_10k


always @(posedge clk_200 or negedge rst_n)
begin
    if(!rst_n)
        clk_10k <= 0;
    else if(clk_10k_en)
        clk_10k <= ~clk_10k;
    else
        clk_10k <= clk_10k;
end

endmodule
    
原文地址:https://www.cnblogs.com/bixiaopengblog/p/7184080.html