在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