推荐答案
测试一下
题目
请用verilog/vhdl实现5分频电路,占空比50%
参考答案与知识点
参考答案
实现5分频且占空比50%的Verilog代码如下:
module div5 (
input clk,
input rst_n,
output reg clk_out
);
reg [2:0] cnt1, cnt2;
wire clk1, clk2;
// 上升沿计数器
assign clk1 = (cnt1 < 2) ? 1 : 0;
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
cnt1 <= 0;
else if (cnt1 == 4)
cnt1 <= 0;
else
cnt1 <= cnt1 + 1;
end
// 下降沿计数器
assign clk2 = (cnt2 < 2) ? 1 : 0;
always @(negedge clk or negedge rst_n) begin
if (!rst_n)
cnt2 <= 0;
else if (cnt2 == 4)
cnt2 <= 0;
else
cnt2 <= cnt2 + 1;
end
// 两时钟相或得到50%占空比
assign clk_out = clk1 | clk2;
endmodule
原理:对于奇数分频,单一沿计数无法得到50%占空比(5分频下,2个高、3个低或反之)。利用两个计数器分别对上升沿和下降沿计数,产生两路占空比40%(低电平60%)的时钟,它们相位相差半个输入时钟周期。将两路信号相或,得到高电平覆盖2+2=4个半个周期(即2个完整周期),低电平覆盖剩余1个完整周期,实现50%占空比(2.5个周期高、2.5个周期低)。
易错点:1)计数器范围0~4,共5个状态;2)使用非阻塞赋值;3)复位时计数器清零;4)注意clk1/clk2生成条件,若取小于2则高电平持续2个计数值;5)clk_out用组合逻辑assign,避免时序竞争。
涉及知识点
- 奇数分频电路设计
- 50%占空比实现方法
- 双边沿触发计数器
- 时序逻辑与组合逻辑结合