偶数分频时钟,奇数分频甚至是小数分频也在考虑范围内。
4.2 同步整数分频器
使用 Moore 状态机很容易实现同步整数分频。但是无法实现占空比 50% 的奇数分频。

4.3 具有 50% 占空比的奇数整数分频
如下图所示,一个三分频,50% 占空比的例子。

- 计数
0
到 N - 1
- 在
0
和 (N+1)/2
上生成使能信号
- 分别在两个使能信号上用上升沿和下降沿做 T 触发器,将得到的结果异或即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| module div3( input clk, input rst_n, output div3 ); reg [1:0] cnt; wire tff_1en; wire tff_2en; reg div1; reg div2;
assign tff_1en = cnt == 2'd0; assign tff_2en = cnt == 2'd2; assign div3 = div1 ^ div2;
always @(posedge clk or negedge rst_n) begin if (rst_nn == 1'b0) cnt <= 0; else if (cnt == 2'd2) cnt <= 0; else cnt <= cnt + 1'b1; end
always @(posedge clk or negedge rst_n) begin if (rst_n == 1'b0) div1 <= 0; else if (tff_1en) div1 <= ~div1; end
always @(negedge clk or negedge rst_n) begin if (rst_n == 1'b0) div2 <= 0; else if (tff_2en) div2 <= ~div2; end
endmodule
|
4.4 非整数分频(非50%占空比)
这里以 1.5 分频为例,也就是没三个时钟包含两个对称的脉冲。
借助三分频器的辅助,用如下电路可以实现 1.5 分频:

该电路容易出现毛刺,因为多路器的输入经历了不同的延迟,因此会出现这种情况。
分频计数器的实现
- 使用复位值
000000001
的 9 位移位寄存器,可以在每个时钟上升沿使移位寄存器循环左移一位。
- 产生第一个脉冲,在半周期时移动第 1 位并将第 1 位与第 2 位进行或操作。
- 产生第二个脉冲,第 5 位和第 6 位必须在半周期时移动并与原始第 6 位进行或操作。
4.5 N 分频的替换方法
