第一、CTS

在建立CTS之前时钟不会传播,CTS是沿着ASIC设计的时钟路径插入缓冲器或反相器的过程,以实现零/最小偏差或平衡偏差。CTS的目标是最小化偏差和插入性延迟。除此之外,还通过缓冲器和反相器在设计中增加了有用的偏斜。

(注:为了实现正松弛或零松弛故意在设计中引入一些偏斜,通过添加缓冲器或反相器或通过增大单元的大小来实现。这被称为有用的倾斜。)
时钟在placement放置之后被传播,因为时钟的传播需要单元和模块的确切物理位置,这反过来又影响处理准确的延迟和工作频率,并且时钟在逻辑绕线之前被传播,因为与逻辑绕线相比,时钟绕线被赋予更高的优先级。这是因为时钟是唯一经常作为动态功耗源的信号开关。
(注:在时钟树合成期间要添加到设计中的缓冲器和反相器必须具有相等的上升和下降时间延迟。如果不是,它将影响时钟的时间周期/占空比,而时钟的时间周期/占空比又改变了工作频率。虽然有多种时钟路由算法可用,但EDA工具会自动选择优化算法,并且只显示树传播后的关键路径。)
如果设计导致负松弛negtive slack,增加时序是一种简单的方法,但更改时钟周期会改变工作频率。通过增大或缩小关键路径中的单元大小,可以在不改变时钟周期的情况下解决负松弛。
时钟树开始和结束。
时钟树从SDC(Synopsys设计约束)定义的时钟源开始。时钟树结束于FF或硬宏的时钟引脚或组合逻辑的输入引脚。如上所述,时钟也将被给予组合块的输入引脚,但在诸如时钟选通等低功耗技术中非常少见。

时钟树优化(CTO)

时钟可以被屏蔽,以便噪声不会耦合到其他信号,但屏蔽面积增加了12%到15%。由于时钟信号本质上是全局的,因此用于功率路由的同一金属层也用于时钟。
CTO是通过缓冲区大小调整、门大小调整、缓冲区位置调整、电平调整和HFN合成来实现的。在CTS阶段之前的预放置、放置和后放置优化中可以改善setup slack,而忽略hold slack。
在后置优化中,改进了CTS hold slack的布局。作为CTS的结果,添加了许多缓冲区。

通常,对于100k门,添加了大约650个缓冲器。

第二、CTS时钟树实践

(一)应对大的插入性延迟insertion delay。

1. 如果网表中有delay cell,可能成为无法优化的源头。CTS会比照这个最差的插入型延迟来平衡其它路径。
2. 如果有dont_touch单元,CTS则无法删除它们来优化时钟树。
3. 对CTS友好的布局。在布局时,将CTS当做一个约束。如果又长又瘦的通道,会导致更长更瘦的放置形状,给时序和CTS造成困难。考虑软的blockage和重新布局。
4. 能否重新定义create_clocks,协助cts的分而治之。在主时钟上一遍又一遍地跑cts未必最好;考虑分开时钟树,建立子时钟,定义同步pin,再建立上层主时钟。
5. 在Macro宏里面,是否正确地定义了syncPins,同步pin。检查syncPins文件,确保syncPins是有意义的,同时确保数量和实践单位正确。
6. 如果能够定义ignore pin,在cts之前先定义好。
7. 定义varRouteRules有助于减少插入型延;定义shielding防护,加倍时钟线宽度,使用astMarkClockTree来传播。
8. 只在时钟树上使用CTU buffer(时钟树专用缓冲单元),且不要标记”dont_use”。
9. 灵活使用不同的CTS intParams。换几种CTS选项尝试。
10. 首先使用block选项,通常得到更好的插入insertion、skew结果。当std cell使用率不到5%的时候,可以尝试。
11. CTO用于处理skew,但一旦建立不会减少插入性延迟。可以尝试提高skew目标。
12. 如果可能,仅仅使用反相器建立ct。
13. 定义可变的绕线规则,大于默认宽度,clearance,并且防护时钟线。用astMarkClockTree传播,有助于减少插入性延迟。

(二)不合理的skew偏差

2.1. 除了1.11,其它1.x项,也适用与skew。
2.2 如果有衍生时钟不需要balance,对它们要单独建立时钟树,不要参与偏差计算。
在交叉点,定义sync pins 和 ignore pins。
2.3 在最差路径上找可能得嫌疑犯。时序最差路径上可能有问题,导致CTS无法优化,从而导致其它路径也增加了延迟,无法达到允许的插入性延迟和合适的skew。
2.4 使用intParams areaBased 和 ECOWinSize来帮助Overlap Removal OV引擎。

(三) CTS不正常

3.1 同前。
3.2 检查
create_clock
set_clock_transition
set_clock_latency
set_clock_uncertainty
3.3 设置
intParam
axSetIntParam “acts” “clock uncertainty goal” 1
如果有多个create_clock,应该正确设置 define ataPropagationClockThruCreateClock。
3.4 在底层时钟上建立时钟,定义sync pin ,在上一层跑cts。
总是记得在需要时定义sync pins。
3.6 时钟线标记”dont_touch”。如果因为分析导致标记dont_touch,可以用astMarkClockTree命令复位它。
3.7 如果在非物理性结构化pin上定义了create_clock,也无法运行cts。

在这里插入图片描述
在这里插入图片描述

(1) Stop/sync pin停止(同步)引脚:

FF的所有时钟引脚称为停止(同步)引脚。到达SYC/STOP引脚后,时钟信号不应传播。在构建时钟树时,需要考虑此管脚,需要平衡。
set_clock_tree_exceptions -stop_pins

(2) Exclude/ignore pin排除(忽略)引脚:

所有非时钟引脚(如FF的D引脚或组合逻辑的输入)都称为排除(忽略)引脚。在时钟树传播期间不需要考虑这些管脚,不需要平航。
set_clock_tree_exceptions -exclude_pins

在这里插入图片描述

(3) Floating pin 浮点(隐式停止或宏模型)引脚:

这与同步或停止引脚相同,但在构建时钟树时会考虑该引脚的内部时钟延迟。它是硬宏的时钟输入管脚,在构建时钟树时需要考虑它。但在将其视为同步管脚之前,需要平衡宏的内部树。最终节点藏在后面。

在这里插入图片描述

(4) Explicit stop/sync pin 显式同步(停止)管脚:

构建时钟树时会考虑组合逻辑的输入。大多数情况下,无论何时使用时钟门控概念,都会出现这种情况。

(5) Explicit exclude/ignore pin 显式排除(忽略)引脚:

触发器的时钟引脚不被视为同步/停止引脚。这也是由于时钟选通概念的使用。因为在选通时钟时,时钟信号将被提供给AND门。

(6) Nonstop pin:

不间断引脚是通常被视为时钟树端点的引脚,但是相反,IC编译器通过它们跟踪以查找时钟树终结点的时钟针。驱动生成时钟的顺序单元是隐式不间断引脚。此外,IC编译器支持用户定义(或显式)不间断接点。信号穿过这个pin。
set_clock_tree_exceptions -non_stop_pins

(7) insertion delay:

Insertion delay是指clock root pin和flip flop的clock sink pin之间的延时。CTS为了min skew,会插入clock delay,从而产生insertion delay, 一般试图找到min latency,CTS算法目标就包含获得一个min latency。

(8) clearance :

macro clearance定义工具不允许放置标准单元格的宏单元格周围的区域。要创建宏间隙,使用“force plan clearance”命令。
halo定义保留为全局布线通道的宏单元周围的区域。要创建halo,使用“force paln halo”命令。
在最终详细放置期间,由两个宏单元格的晕圈定义的矩形可能不会重叠。
halo和clearance都是单元格的属性。因此,单元格周围的晕圈和间隙也会随着单元格的移动而移动。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐