← 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)设计