分频器应该是verilog里最常用的一个模块了,原理也很简单,就是设置一个计数器,设置在计到指定的分频数的一半后反转输出波的电平,以实现指定数目的分频,以下是一个100,000分频的例子:(这个模块本来是用于将一个100mHz的晶振信号转化为周期为1ms的信号)
module ms_clk( input clk_100mhz, //输入时钟信号100mHz output reg clk_ms ); localparam DIV_COUNT=50000; //100,000分频 reg [16:0]div_ms_counter=0; //分屏用计数器 initial begin clk_ms=0; end always @(posedge clk_100mhz)begin div_ms_counter=div_ms_counter+1; //每周期计数器+1 if(div_ms_counter==DIV_COUNT)begin //计满50,000重置计数器并翻转输出信号 div_ms_counter=0; clk_ms=!clk_ms; end end endmodule
发表评论