时钟树综合的定义:时钟网络从根节点逐渐插入驱动器(buffer、inverter)从而达到其叶节点,按照芯片时钟网络的约束要求产生时钟树的过程。
主要内容:
·完成时钟树的综合CTS(负载平衡,解决DRC问题)和时钟树的平衡优化CTO(减少skewlatency)
·完成non_colck path的时序优化等
·完成时钟树的routing。
LAB4:CTS 时钟树综合
相关文件的准备:
orca_lib.mw/CEL:
place_opt 放置和扫描插入的设计以Milkway格式保存
scripts/:
cts_setup.tcl 设置CTS选项的脚本
ndr.tcl 指定非默认时钟布线规则命令的脚本
opt_ctrl.tcl 时序和优化控制
1. 打开设计,并检查时钟树
- 在lab4_cts目录下启动ICC GUI,并打开设计库,如下:
open_mw_lib orca_lib.mw
- 复制CEL place_opt,并将其命名为clock_opt,命令如下:
copy_mw_cel -from place_opt -to clock_opt
- 打开 clock_opt 设计
open_mw_cel clock_opt
- 检查时钟树的skew、总体情况和timing 违反
a. 检查时钟树的skew属性:
report_clock -skew -attributes
b. 查看时钟树的总体情况
report_clock_tree -summary
该命令可以查看时钟树所驱动的sinks,不同时钟的skew、时钟树的最长路径(最大延迟)。
c. 检查是否存在setup 违反
view report_constraint -all
从图中可以看出,该设计存在hold违反,因为hold违反在CTS后才进行修复。
- 通过GUI查看是否有时序例外的端口
exception pin知识补充:
默认情况下,CTS只会平衡时钟树延迟(最小skew)到 " 停止引脚 " ,停止引脚是顺序单元的时钟引脚。如果有例外的引脚需要平衡,那就需要在CTS前指定好这些例外的引脚,主要讲解如下:
若同一个引脚多次发出set_clock_tree_exception命令,引脚会保持最高优先级的异常,引脚优先顺序如下:
不间断引脚 > 排除引脚 > 浮动引脚 > 停止引脚。现在对它们进行详细介绍,如下:
a. Non_stop pins(不间断引脚)
不间断引脚通常被认为是时钟树端点的引脚,但ICC会穿过它们跟踪寻找真正的端点。驱动生成时钟的时序单元的时钟引脚是隐式不间断引脚。下面关于隐式不间断引脚的介绍:
若时序单元的扇出驱动的是生成时钟(即该时序单元用于分频之用,产生生成时钟),则ICC会将该时序单元的时钟引脚视为隐式不间断引脚,并穿过该时序单元以追踪到真正的时钟树端点,如下图①所示。此外,ICC认为集成门控(ICG)单元的时钟输入引脚是隐式不间断引脚,不用手动对其进行重复设置,如图②。
指定不间断引脚的命令如下:
set_clock_tree_exception -non_stop_pins
b. exclude pins(排除引脚)
排除引脚是从时钟树时序计算和优化中排除的时钟树端点。ICC仅在计算和优化设计规则约束时(DRC)使用排除引脚。
在CTS期间,ICC通过在排除引脚(隐式和显示排除引脚)之前插入 guide buffer 来从时钟树中隔离这些引脚。对于这些引脚,ICC只会执行设计规则(DRC)修复,不会执行skew和latency优化。
指定排除引脚的命令如下:
set_clock_tree_exception -exclude_pins
c. float pins(浮动引脚)
具有特殊插入延迟要求的时钟引脚。于停止引脚类似,但在构建时钟树时会考虑该引脚的内部时钟延迟。工具在计算到该float pins的插入延时时,将把float pin延迟(正或负)添加到计算插入延迟中