一、时序分析基础:时钟周期、建立时间、保持时间、时序路径
各位好,欢迎来到《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),一图胜千言。把违例路径高亮显示,你就知道你的电路瓶颈在哪了。
为了让你更直观地理解它们之间的关系,我画了一张图: