什么是 latch?
- latch 是 电平敏感(level-sensitive) 的 时序逻辑器件,不是组合逻辑器件!
- 最常见的是 D latch:当使能信号为高电平时,数据 D 传输到 Q;否则保持原值。
Latch 和 D 触发器的区别与适用场景
| 项目 |
Latch |
D 触发器(Flip-Flop) |
| 类型 |
时序逻辑器件 |
时序逻辑器件 |
| 敏感性 |
电平敏感(如高电平有效) |
边沿敏感(通常上升沿触发) |
| 数据保持 |
在使能电平有效时,输入变化立即传输 |
仅在触发沿采样输入数据 |
| 时序控制 |
容易产生毛刺 |
边沿控制更稳定 |
| 典型语句 |
if (en) q = d; |
always @(posedge clk) |
| 用途 |
异步状态保持、低功耗时钟门控 |
常规同步逻辑、时序设计主干 |
| 推荐程度 |
一般不推荐(除非明确需要) |
广泛使用 |
Latch 可能带来的问题(为什么要避免隐式 latch)
1. 时序分析困难
- Latch 对时钟是电平敏感的,因此时序边界不清晰。
- 在静态时序分析(STA)中,工具很难界定其数据保持时序,容易导致Setup / Hold 违例。
2. 功能难预测 / 仿真与综合不一致
- 模拟仿真可以看到 latch 保留值的行为,但综合后可能由于优化或不同策略行为改变,出现不一致。
- 尤其在 FPGA 设计中,隐式 latch 可能不被支持或被错误综合为寄存器。
3. 电路功耗和面积极难控制
- latch 会因电平敏感,在时钟高电平期间内频繁响应输入信号跳变 ,可能导致不必要的功耗或毛刺。
- 不易控制布线逻辑,也影响设计收敛。