跳转到内容
新建笔记

同步时序基础

flowchart LR
R1["源寄存器"] -->|"Tco"| L["组合逻辑 + 布线延迟"] --> R2["目的寄存器"]
C["时钟"] --> R1
C --> R2

建立检查要求数据在下一个有效时钟沿之前足够早地稳定:

Tclk >= Tco + Tlogic + Trouting + Tsetup + clock_uncertainty

保持检查要求数据在当前采样沿之后继续稳定一小段时间。建立违例通常通过降低逻辑深度、流水化或改善布局解决;保持违例不能靠降低时钟频率解决。

指标含义判断
Slack要求时间减实际到达时间>= 0 才通过
WNS最差负裕量首先处理最差路径
TNS所有负裕量之和反映违例规模
Unconstrained paths未被约束的路径不能当作“无需检查”

达到 0 负裕量只是最低签核条件,还要确认所有主时钟、生成时钟、I/O 和跨时钟路径都被正确识别。

异步输入或跨时钟域信号可能在目的寄存器采样窗口内变化,使寄存器进入暂时不确定状态。亚稳态不能被逻辑完全消除,只能把传播概率降到可接受水平:

  • 单比特电平:使用两级或更多级同步器。
  • 脉冲:用握手、脉冲展宽或 toggle 同步。
  • 多比特数据:用异步 FIFO 或握手保持数据稳定。
  • 复位:通常异步置位、同步释放,并分别在各时钟域处理。
  • 功能仿真通过不代表时序通过。
  • 时钟不是普通数据线;应使用专用时钟资源和正确约束。
  • set_false_path 不是修复工具,只能用于确实不需要时序检查且结构已经安全的路径。
  • 时序收敛应从架构、流水和约束入手,而不是盲目增加综合“努力等级”。