这里介绍一种奇数分频的设计方法,基本思路如下。
1. 确定计数子:设计上升沿和下降沿计数子,计数子的宽度根据分频系数决定。比如,5分频就是5了。
2. 计数子自加:在时钟信号的上升沿将计数子自加1,这里当计数子等于4 = 5 -1 的时候,将其清零。
3. 输出寄存器:分别输出上升沿和下降沿,因为 5 >> 1 = 2 ,所以输出下降沿和上升沿的时候做个简单的处理,上升沿和下降沿寄存器的值在时钟信号的上升沿到来时,如果小于或等于2 = 5 >> 1 ,就输出高电平,否则输出低电平。
4. 综合寄存器值:将上升沿和下降沿寄存器的值做个与运算,即可得到时钟信号的5分频。
以下为Verilog代码:等占空比的5分频电路
module div_5(clk,o_clk);
input clk;
output o_clk;
reg [2:0]cnt_down, cnt_up;
reg clk_down, clk_up;
always @(posedge clk)
begin
if(cnt_up == 4)
cnt_up <= 0;
else
cnt_up <= cnt_up + 1;
end
always @(negedge clk)
begin
if(cnt_down == 4)
cnt_down <= 0;
else
cnt_down <= cnt_down + 1;
end
always @(posedge clk)
begin
if(cnt_up<2)
clk_up <= 0;
else
clk_up <= 1;
end
always @(negedge clk)
begin
if(cnt_down<2)
clk_down <= 0;
else
clk_down <= 1;
end
assign o_clk = clk_down & clk_up;
endmodule
对于其他奇数倍分频同样的道理即可