← 2022 · NV 笔试

推荐答案 测试一下

Design a block (WriteVerilog code) with below requirement:

编程题 中等 笔试真题

参考答案

由于题目需求未具体给出,此处假设设计一个4位同步复位、带使能的模16计数器,上升沿触发。Verilog代码示例如下: module counter ( input wire clk, input wire rst_n, // 同步复位,低有效 input wire en, // 使能信号 output reg [3:0] count ); always @(posedge clk) begin if (!rst_n) count <= 4'b0; else if (en) count <= count + 1'b1; // 无else分支则保持 end endmodule 解析要点: 1. **同步复位**:复位信号只在时钟上升沿有效,避免异步复位引起的毛刺和亚稳态问题。复位逻辑写在时序块内,使用`if(!rst_n)`判断。 2. **使能控制**:通过`en`信号控制是否计数,使能无效时保持当前值。 3. **非阻塞赋值**:时序逻辑中使用`<=`赋值,避免产生竞争冒险,保证综合结果正确。 4. **模16计数器**:4位寄存器自动回绕至0(溢出)。若需特定模值(如模10),需增加判断条件。 5. **端口声明**:采用标准input/output声明,计数输出为reg类型(在always块中赋值)。 常见设计误区: - 混淆同步复位与异步复位,异步复位应使用``always @(posedge clk or negedge rst_n)``并将复位赋值放在敏感列表外。 - 使能信号未定义为input,或误用阻塞赋值导致综合电路出现锁存器。 - 未考虑复位的有效电平,通常用低有效(rst_n)以兼容常见复位电路。

涉及知识点

  • 同步复位与异步复位区别
  • 非阻塞赋值的时序语义
  • 计数器Verilog实现
  • 使能信号的时序控制
  • 模块端口与reg声明
← 上一题
登录后反馈错题