← 2022 · 艾为 笔试

推荐答案 测试一下

请用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%占空比实现方法
  • 双边沿触发计数器
  • 时序逻辑与组合逻辑结合
← 上一题
登录后反馈错题
下一题 →