← 2022 · 诺瓦科技 笔试

推荐答案 测试一下

用Verilog语言实现一个带使能的模100异步清0计数器;模块定义为module count (out, count_en, clr, clk);

编程题 中等 笔试真题

参考答案

实现一个带使能的模100异步清0计数器,模块端口定义为:output reg [6:0] out, input count_en, input clr, input clk。由于模100计数范围0~99,需要7位二进制数。异步清零意味着clr信号有效时,输出立即清零(与时钟无关),因此在敏感列表中加入clr的上升沿。使用always @(posedge clk or posedge clr)结构。在always块内,首先判断clr是否为高电平,若是则out赋值为0;否则在时钟上升沿下,若count_en有效,则判断out是否等于99,等于则out置0,否则out加1。注意:异步清零优先级高于使能信号;计数到99后下一个时钟沿归零;使能信号仅在时钟沿有效时才计数。代码示例如下: module count (out, count_en, clr, clk); output reg [6:0] out; input count_en, clr, clk; always @(posedge clk or posedge clr) begin if (clr) out <= 7'd0; else if (count_en) begin if (out == 7'd99) out <= 7'd0; else out <= out + 1'b1; end end endmodule 易错点:1. 异步清零必须包含在敏感列表中,否则综合为同步复位;2. 比较值99必须与out位宽一致;3. 使用非阻塞赋值以避免竞争;4. 注意使能信号在时钟沿判断,而非在组合逻辑中。

涉及知识点

  • 异步复位与同步复位区别
  • 模100计数器实现
  • Verilog敏感列表写法
  • 非阻塞赋值规则
  • 使能信号时序约束
← 上一题
登录后反馈错题
下一题 →