1、偶数分频
偶数倍分频相对简单,可以通过计数器对预分频的脉冲沿计数实现,如果要进行N倍(N为整数)偶数分频,可由预分频的时钟触发计数器计数,当计数器从0计数到N/2—1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数,以此循环下去。分频的主体程序如下:
module freq_div_even(input clk_in,
input reset,
output reg clk_out
);
reg[2:0] count;
parameter N=8;
always@(posedge clk_in)
begin
if(!reset)
begin
count<=0;
clk_out<=0;
end
else
if(count==(N/2-1))
begin
clk_out<=~clk_out;
count<=0;
end
else
begin
count<=count+1;
end
end
endmodule
2、奇数分频
对于对占空比没有特殊要求的奇数分频,需要对上升沿和下降沿脉冲进行计数,利用下降沿产生的波形移相半个输入脉冲的作用,最后用错位“异或”法实现。一个13分频的程序如下:
module count_num(
input clk,
input reset,
output cout//这里是wire