← eetop.cn_Perl语言入门(第四版小骆驼书)

推荐答案 测试一下

1.1避免 Shell ................................ ................................ ................................ ........…

问答题 中等 经典问答问答题

参考答案

在数字IC设计与验证中,“避免Shell”通常指避免在综合过程中意外生成锁存器(Latch)。锁存器是电平敏感的存储单元,与触发器(边沿敏感)相比,其时序分析复杂、易受毛刺干扰、测试覆盖率低,且可能引发组合逻辑环路,因此设计规范强烈建议避免。 产生锁存器的常见原因: 1. 条件语句(if/case)不完整。例如在always块中,if缺少else分支,或case缺少default分支,且组合逻辑赋值未对所有条件覆盖时,综合工具会推断出锁存器保持未赋值时的原值。 2. 组合逻辑always块中对同一变量在多个条件分支中赋值不完全(非所有分支均赋值)。 3. 敏感列表遗漏或错误,导致综合工具认为需要保持值。 避免方法: - 对组合逻辑always块,使用阻塞赋值“=”,并确保每个if都有else,每个case都有default。 - 对于时序逻辑always块(边沿触发),即使条件分支不全,也不会生成锁存器,因为触发器自带存储功能;但需注意避免组合反馈。 - 使用Verilog中“full_case”与“parallel_case”综合指令时要谨慎,避免隐藏锁存器。 - 仿真时检查波形,发现信号在组合逻辑中保持上次值即表示可能生成锁存器。 - 综合后检查报告,搜索“latch”或“inferred latch”。 易错点: - 混淆锁存器与触发器:锁存器由电平触发,触发器由边沿触发。 - 认为所有always块都是时序的:敏感列表为电平敏感(如always @(*)或@(a or b))时是组合逻辑,必须避免锁存器。 - 在时序逻辑中缺少条件分支不会生成锁存器,但可能导致功能错误。

涉及知识点

  • 锁存器与触发器区别
  • 组合逻辑中不完整条件导致锁存器
  • HDL编码风格避免锁存器
  • 综合工具推断锁存器的机制
  • full_case与parallel_case指令风险
  • 锁存器对时序与DFT的影响
← 上一题
登录后反馈错题
下一题 →