时钟分频器
4.1 同步整数分频器(偶分频)
偶数分频器可以用摩尔型状态机或者计数器很容易实现。
4.2 奇数整数分频(%50占空比)
产生具有50%占空比的奇数分频时钟最简单的方式是以输出频率的一半生成两个正交相位时钟(两个时钟之间有90度相位差),然后将两个波形异或得到输出时钟(以N=3为例)。
步骤1: 创建由时钟上升沿触发的0到(N-1)的计数器,N自然数,用于对参数时钟进行分频(N不等于偶数)
对3 分频:从0计数到2···N=3
对5分频:从0计数到4···N=5
对7分频:从0计数到6···N=7
步骤 2: 使用两个开关触发器,按以下方式产生其使能信号。
tffl_en: TFF1在计数值为0时使能。
tff2_en:TFF2在计数值为 (N+1)/2 时使能(2对应3分频,3对应5分频,依此类推),如图4.2所示。
步骤3: 产生以下信号。
div1:TFF1的输出一由输人时钟 (ref_clk) 上沿触发;div2:TFF2的输出一由输人时钟 (ref_clk)下沿触发。
步骤4:通过异或 div1 和 div2 产生波形。
4.3 非整数分频(非50%占空比)
1.5倍分频
注意:上述电路在仿真时可以正确工作,但是在综合时可能出现问题,因为在多路器的选择端切换开关时两个输入端的延时并不相等。多路器的输出不能马上改变并可能在输出时钟上产生毛刺。随着参考时钟 (ref_clk) 频率的增加,出现错误的可能性会越来越大。
1.5 倍分频的查找表实现
4.5倍分频计数器
每9参考时钟包含两个对称脉冲。使用使用移位寄存器对非整数分频电路进行优化,使输出时钟不含毛刺。
(1)使用复位值为000000001的9位移位寄存器,在时钟上升沿使移位寄存器循环左移一位。
(2)产生4.5倍分频的第一个脉冲,将在半周期移位第1位并将之与第1位与第2位进行或操作(占空比40%)
(3)产生4.5倍分频的第二个脉冲,第5位和第6位在半周期时移动并与第6位进行或操作
reg [8:0] shift_cnt
always@(posedge clk or negedge rstn)begin
if(~rstn)begin
shift_cnt <= 9'b000000001;
end else begin
shift_cnt <= shift_cnt << 1;
end
end
always@(negedge clk or negedge rstn)begin
if(~rstn)begin
ps_cnt0 <= 1'b0;
ps_cnt4 <= 1'b0;
ps_cnt5 <= 1'b0;
end else begin
ps_cnt1 <= shift_cnt[0];
ps_cnt4 <= shift_cnt[4];
ps_cnt5 <= shift_cnt[5];
end
end
assign clk_out = (shift_cnt[0]|shift_cnt[1]|ps_cnt[0]) |
(shift_cnt[4]|shift_cnt[5]|ps_cnt[5]);