synopsys-SDC第三章——时序分析与约束
前言
约束常和时序分析紧密相关,所以在学习约束前,先了解一下时序分析的知识一、静态时序分析(STA)
STA不依赖输入向量,分析电路拓扑并计算不同信号到达个点的时间窗口,并和要求的时间进行比较。
STA工具会对每个触发器上数据和时钟的到达时间与该触发器要求的setup time、hold time进行比较,如果不满足,则会进行时序违例报错。
-
具体STA分析在后续描述
二、约束在STA中的作用
STA工具需要各种信号到达时间及其它特性,这些都需要约束来提供。
1.作为声明
通过约束声明一些自身的输入,这些信息只用来验证时序是否满足,如:
-
输入到达边界的时间 输入信号过渡时间 输出必须驱动的负载
2.作为断言
通过约束做一些时序限制,计算时间窗口后,如果时序满足约束则通过STA,反之,STA失败,如:
-
输出信号在边界的可用时间
3.作为指令
有些时候,约束可作为某些工具的指令,如综合、布局布线,这些工具将约束作为它们试图满足的目标。
4.作为异常
有一些约束用来指定时序的放宽范围。假设一些路径被约束以满足时序,但是由于特殊情况,这些路径不需要满足这些时序,这称为时序异常,具体例子后续blog会详细介绍。
5.约束的变化
在不同阶段,约束的作用是不同的,约束作用通常是根据上下文作用的,如:
-
对预布局STA而言是一个声明 对综合工具而言是一个指令 而对布局后的STA来说,约束毫无意义
三、STA常见问题
1.无功能检查
STA只做时序分析,不保证功能是否正确,所以即使通过了STA,还需要进行仿真、验证、FPGA原型验证等。
2.无声明检查
由于约束都是由用户自己定义声明的,所以即使用户给出了错误的约束,STA能顺利通过,但是实际电路是不满足最初设计需求的。
3.要求正确
时序要求应该不过严也不过松,在不确定的情况下,应该严一点点。 但是用严格的约束会有以下问题:
- 更严格的时序,导致工具插入驱动能力更高的单元。导致更大的面积和更高的功耗。
- 有时为了满足严格的约束,将高效的路由资源分配给这些路径,而忽略关键路径,这会导致不必要的效果。
- 严格的约束还会带来时序关闭问题,约束的要求大大高于实际所需,导致时间开销巨大。
4.常见错误
- 不正确的时序约束
- 不正确的时钟,很多用户将注意力放在时钟系数上,而忽略边沿
- 与RTL更新不同步
四、延迟计算与STA
STA依赖与延迟计算,而延迟计算有关的数据有:
-
通过门、网络、路径的延迟 压摆率(slew) 压摆率退化 延迟计算是STA的一部分,也可以将延迟值写入标注延迟格式文件SDF中。
五、时序路径
1.起点与终点
信号时序开始的点即为起点,被定时的点即为终点,所以任何点可以作为起点和终点。 严格来说,时序从时钟源开始,到达触发器的clk引脚,再进入触发器的Q端,并继续传递。所以,寄存器并不是真正起点,但是大多数分析都是以寄存器为起点。
2.打断路径
用户可以通过指定启动条件和检查条件在电路的任何位置插入起点和终点,路径会在该点被打断,如:
如果用户约束了N1->N2的最大延迟,那么STA必须在N2处定时检查,所以N2变成了一个终点;同时也是下一个阶段的起点。
3.功能路径和时序路径
-
功能路径表示值将发生变化的顺序,而时序路径指示过渡过程发生的顺序。
如上图的功能路径为I2->D端->Q端->N3 而时序路径则为I2->D端->clk有效时的Q端,时序逻辑中时序路径都和时钟的流动有关。