← eetop.cn_数字IC设计工程师笔试面试经典100题(大部分有答案)

推荐答案 测试一下

RTL设计(代码输入)。使用HDL语言完成对设计实体的RTL级描述。这一阶段使用和Verilog HDL语言的输入工具编写代码。

编程题 中等 笔试真题

参考答案

参考答案(Verilog HDL): module cnt4 ( input clk, input rst_n, input en, output reg [3:0] q ); always @(posedge clk or negedge rst_n) begin if (!rst_n) q <= 4'b0; else if (en) q <= q + 1'b1; end endmodule 解析:本题要求用HDL语言完成RTL级描述,核心在于体现可综合的寄存器传输级设计。上述代码实现了同步复位(实际为异步复位同步释放的简化写法,此处为典型的异步复位)、时钟使能的4位加法计数器。 关键要点: 1. RTL级描述关注数据在寄存器间的流动和运算,always块中必须指定敏感列表(时钟沿和复位信号),所有赋值使用非阻塞赋值(<=)以避免竞争冒险和模拟行为与硬件一致。 2. 时钟采用posedge clk,复位采用negedge rst_n(低有效),复位为异步置零,确保在复位信号有效时立即清零。 3. 使能信号en为高电平时,计数器在每个时钟上升沿加1;否则保持。体现了寄存器的使能控制。 4. 位宽明确(reg [3:0] q),综合工具推断为4个触发器,符合RTL设计原则。 5. 避免在always块中同时使用电平敏感和边沿敏感组合,否则会产生锁存器(除复位外,其他条件应完整)。 易错点: - 混淆阻塞赋值(=)与非阻塞赋值(<=),在时序电路中使用阻塞赋值会导致仿真与综合结果不一致。 - 遗漏else分支或其余条件,导致综合出锁存器。例如en为低电平时未处理q,应使用else保持原值(如上例else if,实际隐含了else q <= q)。但更安全写法是完整if-else。 - 复位信号未列入敏感列表,导致复位行为异常。 - 敏感列表使用电平触发(always @*)用于组合逻辑,而时序逻辑必须用边沿触发。

涉及知识点

  • RTL级描述要点
  • 同步/异步复位区别
  • 阻塞与非阻塞赋值
  • 可综合代码风格
  • 锁存器避免方法
  • 有限状态机(FSM)设计
← 上一题
登录后反馈错题
下一题 →