分频器应该是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
发表评论