推荐答案
测试一下
题目
3.1 锁存器与触发器区别
参考答案与知识点
参考答案
设计之外产生锁存器的常见原因是组合逻辑描述不完整,尤其在 Verilog 的 always 块(组合逻辑)中,当 if-else 或 case 语句未覆盖所有可能分支时,综合工具会推断出锁存器以保持数据。例如,if 语句缺少 else 分支,或 case 缺少 default,且信号在某些条件下未赋值,此时工具会插入透明锁存器来维持原值。另外,在组合逻辑中使用了阻塞赋值但赋值条件不全也会导致锁存器。锁存器是电平敏感(高电平或低电平透明),与触发器(边沿敏感)不同,其输入输出间存在直通路径,易使毛刺传播,且会形成组合反馈环路,如题目图1.7所示,当输入 X、Y 同时变高时,锁存器同时打开可能引起振荡。在 FPGA 中,寄存器资源丰富而锁存器不是原生结构,综合出的锁存器通常需要额外逻辑单元,增加面积和功耗,并使电路时序分析复杂化、可测性下降。避免方法:在组合逻辑块中确保所有条件分支都有赋值,使用 if-else 结构时每个 if 必须有 else,case 语句必须包含 default(除非所有可能值已列出且为 full_case),并且注意敏感列表完整。对于时序逻辑(always @(posedge clk)),系统会自动生成触发器,不会产生锁存器。因此,设计者应养成完整描述组合逻辑的习惯,并利用综合工具的 lint 检查或报告来识别非预期的锁存器。
涉及知识点
- 锁存器电平敏感 vs 触发器边沿敏感
- 组合逻辑中条件不完整产生锁存器
- if-else缺少else分支或case缺少default
- FPGA寄存器密集结构不擅长锁存器
- 组合逻辑反馈环路与毛刺传播
- 避免意外锁存器的编码规范