时序电路中的Latch

本文是关于FPGA中Latch(锁存器)的定义及其规避原因的详细解析。

定义与核心特性​

基本概念​​Latch(锁存器)是一种​​电平敏感的存储单元​​,其行为取决于控制信号(如enable或clk)的电平值:

  • 当使能信号有效时(例如高电平),输出随输入实时变化(“透明”模式);
  • 当使能信号无效时,输出保持之前状态不变。

类似的是时序电路中的触发器(​​Flip-Flop),需要对比的是latch是电平敏感的,​​Flip-Flop是边沿敏感的。

为何避免出现latch

在时序电路中,需要避免出现latch,主要原因如下:

  1. 时序问题与毛刺风险
    • 毛刺传播​:由于电平触发,会产生空翻现象,组合逻辑的瞬态毛刺(Glitch)会直接传递到输出,导致下级电路误动作。
    • ​​时序收敛困难​​:Latch缺乏时钟边界,静态时序分析(STA)难以建模其保持时间(Hold Time),易引发竞争和亚稳态。
  2. 资源效率与设计稳定性​​
    • ​资源浪费​​:FPGA底层由查找表(LUT)和触发器构成,无原生Latch单元。综合工具需用多个逻辑单元(LE)模拟Latch,消耗额外资源。
    • 初始化风险​​:Latch无异步复位端,上电后状态不确定,增加系统不可靠性。
  3. 调试与维护复杂度​​
    • ​隐蔽性高​​:Latch通常因代码逻辑疏漏(如未覆盖分支)意外生成,问题难以通过仿真发现。
    • 工具支持弱​​:调试工具(如ILA)对Latch的观测能力弱于触发器,增加定位难度。

常见产生场景及规避

  1. 未覆盖的条件分支
  2. ​​信号自赋值

有限应用场景​

  1. 异步数据缓冲​​
  2. 低功耗设计​​
作者

LiXintao

发布于

2025-07-22

更新于

2025-07-22

许可协议

评论