一、时序分析基础:时钟周期、建立时间、保持时间、时序路径

各位好,欢迎来到《HS-TTA时序参数调试案例》课程。

我是你们的讲师,一个在数字芯片设计这行摸爬滚打了十几年的工程师。今天咱们开始第一讲,聊聊时序分析最基础的东西。

核心观点:时序分析,说白了就是回答一个问题——你的芯片,在目标时钟频率下,能不能稳定、正确地工作?

我在刚入行那会,总觉得跑跑仿真,功能对了就行。直到有一次,一个看似简单的DMA控制器,流片回来死活跑不到设计频率。最后定位到是一条路径的建立时间违例。从那以后,我就把这几个基础概念刻在脑子里了。

1.1 时钟周期与频率

时钟周期(Clock Period)是时序分析的基石。你想想看,所有同步逻辑都在这个节拍下跳舞。

  • 时钟周期(Tclk):一个时钟上升沿到下一个上升沿的时间。单位通常是ns。
  • 时钟频率(Fclk):周期的倒数。F = 1 / T。

举个例子,100MHz的时钟,周期就是10ns。这10ns,就是你留个信号从寄存器出发,到被下一个寄存器捕获的“总预算”。什么路径延迟、时钟抖动,都要从这个预算里扣。

我个人习惯是:拿到一个时钟约束,先算清楚这个预算。心里没底,后面怎么调?

1.2 建立时间(Setup Time)与保持时间(Hold Time)

这两个概念,是新人最容易踩的坑。我来帮你理一理。

概念 定义 违例后果
建立时间 在时钟有效沿到来之前,数据输入必须保持稳定的最小时间。 数据不能被正确采样,导致功能错误。
保持时间 在时钟有效沿到来之后,数据输入必须保持稳定的最小时间。 数据穿越了时钟沿,导致后级寄存器捕获到不确定值。

为什么会有这两个时间?因为寄存器内部的电路(比如锁存器)不是瞬间完成采样的。它需要一个“窗口”,来保证数据安稳地抓进去。这个窗口就是建立时间和保持时间的总和。

避坑指南:我曾经在一个项目中,过度优化了建立时间,把组合逻辑路径压得太短,结果造成了严重的保持时间违例。修复保持时间违例可比修复建立时间麻烦多了,因为它需要给路径上插延迟单元,这通常是违例路径特有的,全局优化工具很难自动搞定。所以,切记,两者是一对矛盾,要均衡。

1.3 时序路径(Timing Paths)

路径是时序分析的对象。工具会枚举出所有可能的起点和终点,形成路径。主要分为四类:

  • 输入到寄存器(Input to Register):从输入端口到第一级寄存器。
  • 寄存器到寄存器(Register to Register):从一级寄存器到下一级。这是最常见、最关键的路径。
  • 寄存器到输出(Register to Output):从最后一级寄存器到输出端口。
  • 输入到输出(Input to Output):纯组合路径。

你想想看,我们平时调的绝大部分时序约束,核心就是搞定这些路径。尤其是寄存器到寄存器的路径,它能直接限制你芯片的最高频率。

我建议你用GUI的时序报告查看器(如PrimeTime的GUI),一图胜千言。把违例路径高亮显示,你就知道你的电路瓶颈在哪了。

为了让你更直观地理解它们之间的关系,我画了一张图:

时序分析核心概念关系图 时序分析核心要素与路径 时钟周期 T_clk 总时间预算 建立时间 T_su 时钟沿前的要求 保持时间 T_h 时钟沿后的要求 路径1: 输入 -> 寄存器 输入端口到第一级寄存器 路径2: 寄存器 -> 寄存器 核心时序路径,决定频率 路径3: 寄存器 -> 输出 最后一级寄存器到输出端口 路径4: 输入 -> 输出 纯组合逻辑路径 注意:建立时间和保持时间与四类时序路径都密切相关,一条路径可能同时存在违例。