← FPGA中数字电路经典问答

推荐答案 测试一下

latch与register的区别 ,为什么现在多用 register.行为级描述中 latch如何产生的。

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

参考答案

Latch(锁存器)与 Register(寄存器)是数字电路中的基本存储单元,主要区别在于:Latch 对电平敏感,在使能信号有效时输出随输入变化(透明模式),无效时保持;Register 对时钟边沿敏感,仅在时钟跳变沿采样输入并保持至下一跳变。结构上,Latch 通常由门级电路构成,面积小、功耗低,但透明特性导致静态时序分析(STA)复杂,且容易在组合逻辑中引入毛刺传播。Register 多由两个 Latch 级联(主从结构)或边沿触发器实现,时序行为确定,STA 只需检查建立/保持时间,设计更可靠。 当前设计多用 Register 的原因:1)同步设计范式易于理解和验证,STA 收敛快;2)Register 的边沿采样可屏蔽组合逻辑毛刺,提升信号完整性;3)综合工具对 Register 支持完善,可有效优化时序、面积和功耗;4)现代工艺下 Register 的面积和功耗已大幅降低,早期 Latch 的面积优势不再明显。 行为级描述中 Latch 的隐式生成:在 Verilog 的 always 块(组合逻辑或时钟块)中,若存在未覆盖的分支条件,综合工具会推断出 Latch 以保持未赋值的状态。典型场景:always @(*) 中的 if 语句缺少 else 分支,或 case 语句缺少 default 分支,且至少有一个输出信号在某个路径未被赋值。例如: always @(*) begin if (sel) q = d; // 缺少 else,q 在 sel=0 时保持,生成 Latch end 此外,在 always @(posedge clk) 中若对同一个寄存器在多个分支赋值但条件不完全,也可能产生 Latch,但因同步块默认触发器,通常工具会报 Warning 而非生成物理 Latch。防止方法:在组合逻辑中确保所有可能路径对所有输出赋值,或使用完整的分支结构及默认赋值。

涉及知识点

  • Latch电平敏感、Register边沿敏感
  • Register简化静态时序分析
  • 行为级描述中未分支条件导致Latch
  • 同步设计优先生成Register
  • always@(*)缺少else或default
← 上一题
登录后反馈错题
下一题 →