目录
一、时序例外约束
1.1 为什么需要时序例外约束
在STA中时序分析工具默认的时序检查方式可能与实际情况不吻合,此时就需要额外增加一些约束命令,用于调整时序检查方式,添加的这些额外的时序约束称为时序例外约束。
如以下情况就可以通过时序例外约束改善系统时序:
- 某些逻辑的时序单元不是每个时钟周期都进行数据采样传输,可以使用多周期约束;
- 对时序路径施加更紧的约束以获得更大的时序余量,可以使用最大最小约束;
- 某些路径组合是静态的或并不需要进行时序约束,可以使用虚假路径忽略。
因此对一些可以放宽时序要求的路径添加时序例外约束,以减少对布局布线的占用、释放资源给时序要求高的路径,确保系统更好的收敛。
1.2 时序例外约束分类
时序例外约束主要包括多周期约束、虚假路径约束和最大最小延时约束。
命令 | 功能 |
set_multicycle_path | 多周期约束,指定从起始时钟沿到目标时钟沿所需的时钟周期数。常用于放宽某些时序路径的时序要求,以指导设计工具实现更合理的布局布线资源分配。 |
set_false_path | 虚假路径约束,指定在设计中不做分析的时序路径,即在布局布线中作为最低优先级的路径。 |
set_max_delay set_min_delay |
最大延时约束和最小延时约束。该约束将会覆盖设计默认的(已约束或系统默认)用于建立和保持时间分析的最大或最小路径延时时间,即用延时时间对特定时序路径添加的约束。 |
二、多周期约束
2.1 多周期约束语法
默认情况下,时序工具以单周期为单位进行时序路径分析。多周期约束可以调整建立时间和保持时间检查的起始时钟沿到目标时钟沿所需的时钟周期数,多周期约束可以设置在单个路径上,多个路径上,甚至两个时钟之间,使用set_multicycle_path命令实现。
set_multicycle_path <path_multiplier> [-setup|-hold] [-start|-end] [-from <startpoints>] [-to <endpoints>] [-through <pins|cells|nets>]
- <path_multiplier> 用于设置修改约束路径分析的时钟周期数,取值必须是正整数。一般情况下setup/recovery分析是<path_multiplier>默认为1,hold/removal分析时<path_multiplier>默认为0,因此进行多周期约束就是改变<path_multiplier>默认参数;
- -setup和-hold用于指定约束命令所针对的是路径的建立时间分析(-setup)还是保持时间分析(-hold);
- -start和-end用于指定约束命令的<path_multiplier>参数是以源时钟(-start)还是以目标时钟(-end)作为参考时钟;
- -from指定约束路径的起始节点<startpoints>,可与to同时指定,若只指定form则表示覆盖所有从起始节点开始的路径;
- -to指定约束路径的终止节点<endpoints>,可与form同时指定,若只指定to则表示覆盖所有到终止节点结束的路径;
- -through指定约束路径所经过的节点<pins|cells|nets>,可选项。
单周期约束就是按照单周期关系来分析数据路径,即数据的发起沿和捕获沿是最邻近的一对时钟沿,如下图所示。
- 建立时间关系:以第一个发送沿为基准,再向后寻找距此发送沿最近的一个捕获沿,并将两者的setup定为1个周期;
- 保持时间关系:确保当前发送沿推出的数据不被上一个捕获沿给捕获,即hold1(Source clock中的4ns发射的数据不能被Destination clock中的4ns处捕获);确保下一个发送沿推出的数据不被当前捕获沿给捕获,即hold2(Source clock中的8ns发射的数据不能被Destination clock中的8ns处为捕获)。
- 因此previous capture与current launch 构成一组检查;current capture与next launch 构成一组检查。对于两条保持时间的检查,时序报告最终只会给出裕量最小的一条。一旦确定建立时间路径,保持时间路径会自动根据规则做调整。
保持(hold)时间关与建立(setup)时间关系可通过如下公式进行换算:
保持时间时钟周期数=建立时间<path_multiplier>参数 —1 — 保持时间<path_multiplier>参数
由于建立时间的默认<path_multiplier>参数为1,保持时间的默认<path_multiplier>参数为0,则默认的保持时间的时钟周期数就是1-1-0=0.
总结 -end 和 -start 选项如何影响有效的启动和捕获边沿: