###Module 14 时钟树综合
###LAB14-1
这个章节的主要学习目标如下:
1)时钟树综合前的准备工作熟悉
2)时钟树综合的跑法
3)时钟树结果分析
4)时钟树综合后的时序优化(PostCTS的timing优化)
数字后端零基础入门系列 | Innovus零基础LAB学习Day6
数字后端零基础入门系列 | Innovus零基础LAB学习Day5
数字后端零基础入门系列 | Innovus零基础LAB学习Day4
首先,我们按照lab的要求来打开pr.inv这个数据。

我们可以直接用我们打开数据的命令:
restoreDesign .../saved/pr.inv.dat DTMF_CHIP
打开数据后,我们要读入做时钟树综合前的一些设置,比如这个lab中的dtmf.ccopt。这个文件的内容如下(用gvim dtmf.ccopt即可打开该文件):
set_ccopt_property buffer_cells [ list CLKBUFX1 CLKBUFX12 CLKBUFX16 CLKBUFX2 CLKBUFX20 CLKBUFX3 CLKBUFX4 CLKBUFX8 CLKBUFXL ]
set_ccopt_property inverter_cells [ list CLKINVX1 CLKINVX12 CLKINVX16 CLKINVX2 CLKINVX20 CLKINVX3 CLKINVX4 CLKINVX8 CLKINVXL ]
这两句其实就是设置工具长时钟树时可用的clock buffer和clock inverter cell list 。
很多新手肯定会有疑问,我是初学者,我哪里能知道做时钟树前要设置哪些设置,而且我压根不知道ccopt有哪些相关的property。
这里教大家一个大招,可以通过下面的命令来报告出所有ccopt相关的property。至于要设置哪些,这是慢慢积累的一个过程。刚开始只要知道设置一些常用的设置即可,等后续经验多了,自然就都会了。
set_ccopt_property * -help

设置好ccopt相关的设置后,我们需要基于sdc和这些ccopt property来产生clock tree spec文件。因为工具长tree会根据这个spec文件来做tree。
create_ccopt_clock_tree_spec
spec产生后,我们就可以使用下面的命令来跑时钟树综合和时钟树综合后的时序优化。
ccopt_design
如果仅仅想做一个时钟树综合,可以带上选项-cts即可。 具体命令如下:
ccopt_design -cts (cts跑法)
利用GUI图形界面分析时钟树质量 (CTD)
Clock----Ccopt Clock Tree Debugger

点击OK后弹出如下结果。

这里要求大家熟悉下图中所框出来的三个地方。通过这个CTD还可以来trace设计的时钟结构。

通过这个CTD分析的一个好处是我们可以在CTD窗口任意选择一颗cell,此时layout上会同步高亮显示出这颗cell。而且还能高亮当前sink点对应的clock path走向。

当然,我们也分享过如何通过命令在layout上高亮clock path。

如果设计中有很多时钟,我们可以通过Visibility----Clock tree来只显示我们所关心的clock tree的结构及相关信息。

除了分析时钟树质量和时钟树结构外,我们还需要关心设计的时序Timing情况。
我们可以通过timeDesign来报告出当前设计的时序。

第一个就是报告postCTS阶段的timing,因为此时我们就是做完了CTS,所以此时我们应该带上PostCTS来报timing。
第二个命令又再加了一个 -hold选项,这个代表是我们想让工具报出当前阶段的hold time情况。
【思考题】 为何这个阶段要看hold time?
优化时序方法
如果工具自己做完时钟树综合和时序优化后的timing还有较大violation,我们还可以通过命令自带的时序优化命令来做时序的优化------optDesign -postCTS -setup (-hold 代表我们希望让工具优化hold time)
####END OF LAB14-1
###LAB14-2
这个章节主要是了产生一个比较合适的rc scale factor系数,使得PT和Innovus之间的timing比较接近。
值得注意的是,工具自动产生出来的rc factor不一定是最佳的,很多时候还是需要工程师来辅助一些分析。对于初学者来说,这部分内容可以大体上了解即可。
generateRCFactor --preroute true -postroute medium -reference externalSpef -spefMapFile spef.map
其中sepf.map为Starrc寄生参数提取signoff工具抽出来的spef文件,externalSpef为Innovus内部自己写出来的spef文件。
###END OF LAB14-2