###LAB15
Detail Routing for Signal Integrity, Timing, Power and Design for Yield
这个章节虽然标题有点长,但不要被它吓到,其实这个章节就是Innovus工具的绕线Routing。只不过这个阶段做Route不是仅仅是把所有的逻辑连接,用实际的金属层连线来实现实际物理连接,它还需要考虑时序,DRC,功耗和DFM(考虑良率)等因素。
数字后端零基础入门系列 | Innovus零基础LAB学习Day7
数字后端零基础入门系列 | Innovus零基础LAB学习Day6
数字后端零基础入门系列 | Innovus零基础LAB学习Day5
数字后端零基础入门系列 | Innovus零基础LAB学习Day4
这里所说的Signal Integrity是指信号完整性,在PR中是指信号的质量分析,主要是靠crosstalk串扰来衡量信号的完整性。

对于普通信号,如果存在crosstalk,但timing是满足的,我们是可以不用修复。
对于关键时钟信号,如果有crosstalk,我们需要尽量修复干净。
DFM全称是Design For Manufacture。工艺在制作过程中,需要满足一些特殊的要求,这些特殊的要求往往比基本要求要严格点,比如原来Metal的space要求只要0.05um,考虑DFM,foundary可能会把space要求提高到0.07um,又比foundry又希望信号变得更宽,通孔VIA变成双(多)孔。
###LAB15-1
这个章节的学习目标是学会给一些关键信号设置NDR(Non-Default Rule) 和shielding,从而确保时序和信号质量满足设计要求。
首先,我们打开postCTSopt这个database,命令如下:
restoreDesign .../saved/postCTSopt.inv.dat DTMF_CHIP
给net设置特殊space和Shielding
使用的命令是setAttribute,具体命令如下。这个官方lab是用VDD来做shielding net的,但实际项目中大都是使用VSS来做的,因为VSS相比VDD要安静。
setAttribute \
-net DTMF_INST/TDSP_CORE_INST/read_data \
-shield_net VDD
备注:命令中的每行的"\"是当一行写不下一条命令的时候可以通过这个特殊字符来换行继续写。
给net设置后,真正给对应net加shielding VDD会在后续绕线时加上的。
为了查看我们所设置的是否生效以及这条net还有其他什么属性,我们可以通过下面的命令来获取。
getAttribute -net DTMF_INST/TDSP_CORE_INST/read_data

【思考题】 这条net所加的shielding net是单边shielding 还是双边shielding?
对于设计中的关键信号,比如DTMF_INST/clk这个时钟信号,我们可以给这条net设置一个2倍space的约束。设置约束后,后续工具绕这条net时会遵守我们的约束条件来完成绕线。
setAttribute -net DTMF_INST/clk -preferred_extra_space 2
对net进行绕线
首先,我们优先把需要加shielding的net先完成绕线。
按照之前的lab介绍,我们有两种方式来选中这样的net------DTMF_INST/TDSP_CORE_INST/read_data。
第一种方法是直接使用selectNet DTMF_INST/TDSP_CORE_INST/read_data。
第二种方法就是lab中介绍的图形界面操作方法。具体操作步骤如下图所示。
弹出我们要的net之后,通过Design Browser界面的Select即可完成net的选中。

【思考题】图中显示这条net有3个pin,请问它们分别是什么pin?几个输入pin,几个输出pin?
选中net后,我们就可以来针对这条net来进行绕线。
GUI图形界面操作方式:Route--- NanoRoute----Route
选择后会弹出如下左边界面,按照下图所示的操作步骤来设置,然后点击OK即可开始绕线。

绕线完成后,我们来看看这条net的走线以及shielding net是怎么走线的。工具走线后的效果如下图所示,这条net优先绕线就是漂亮,而且shielding也是包围的很严实。

如果对于高亮显示的net看不太清楚,可以用之前lab介绍的ctrl+F12来把显示的屏幕变暗。连续这样操作三次又会回到默认的亮度。
针对这条net绕线完成后,我们还要利用工具来完成剩下其他signal的绕线。这里的操作方法和上面的操作是一样的,唯一不同的地方是不能再选择Selected net Only这个选项。

针对每次的绕线,我们都需要通过log来查看当前绕线后是否存在DRC。本次绕线后的结果如下图所示。
当然,我们也可以通过图形界面上的Violation Browser来查看,具体操作步骤如下图所示。结果显示也是没有任何DRC,这个和log中的信息是吻合的。

前面绕线前我们选择了Timing Driven和SI Driven,所以工具绕线的过程就会自动考虑Timing和SI。
那下面我们直接来看下timing到底能否meet? 报timing我们还是要请出我们熟悉的朋友------timeDesign。
为了考虑OCV效应,在报timing前我们还需要有如下的变量设置。
setAnalysisMode --analysisType onChipVariation
报告setup timing的命令如下:
timeDesign --postRoute
报告timing summary结果如下:

这里我们发现此时有比较大的setup violation,所以我们还需要做一轮optDesign来优化时序。使用的命令如下所示:
optDesign -postRoute -setup
经过一轮优化后的timing结果如下图所示,基本上进剩一条16ps的violation。这里觉得不够满意也可以再做一轮,也可以等后续再修。

报告hold timing的命令如下:
timeDesign --postRoute -hold
同样从timeDesign的report中可以看到设计也存在hold violation。我们也可以用同样的方法来优化hold time,这里就不再做演示了。

在innovus中如果想同时报setup和hold的timing,我们主要有两种方式来实现。
1)设置如下global timing变量
set_global timing_enable_simultaneous_setup_hold_mode true
2)设置analysisMode分别为setup和hold
setAnalysisMode -checkType hold
保存绕线后的设计
saveDesign DTMF_detailrouted.inv
###END OF LAB15-1