推荐答案
测试一下
题目
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