数字IC后端设计实现十大精华主题分享
今天小编给大家分享下吾爱IC社区星球上周十大后端精华主题。
Q1:星主,请教个问题,长tree的时候发现这个scan的tree 的skew差不多400p,我高亮了整个tree的schematic,我在想是不是我在这一系列mux前边打断,设置ignore pin,后边create_clock那是不是就可以做平这个tree?
数字IC后端实现时钟树综合系列教程 | Clock Tree,Clock Skew Group之间的区别和联系
你如果不做任何处理,所有的sink点都会做平的,即clock skew不会这么大。只不过clock tree长度会比较长而已。你这个case需要分析几个mux的另外一个输入时钟是什么?能否mux输入端设置ignore,取决于mux前后的寄存器是否有时序交互。如果没有,是可以这么做。否则就不行。
像下面这两个典型时钟结构,我们就需要对选择器的各个输入端做处理。比如第二张图所示的无毛刺时钟切换电路,该电路最后一级的输入端和输出端需要分别定义sink type和create_clock,否则整体clock tree会做得很长!
Q2:星主你好,我想请教一下create_clock 和create_gerated_clock 的sink 是否要做平问题。我看网上一些说法:create_clock 和create_gerated_clock 的sink 因为同属于一颗clock tree,会默认做平,电路图如下:
我觉得是不会做平,理由如下:
- create_clock 和create_gerated_clock 的spec 会产生不同clock tree,这是属于不同clock tree了,并且还产生不同的skew group。
2)我在innovus gui和命令确认了 DFF1和DFF2的clock skew 是远远大于我设置cts_target_skew的(如果是做平,理论DFF1和DFF2的skew 应该与我cts_target_skew差异不大)。并且确认了cts spec 没有mopdify_ccopt_skew_group -add_ignore_pins 命令把我DFF1/CK, DFF2/CK给ignore 掉。星主,请问一下,我想法是对的吗?
如果是在分频寄存器输出定义generated clock,效果如下图所示。FF1和FF2肯定会比较balance的。因为FF2这路多出一颗寄存器CK-Q的delay,所以FF1这路clock path上工具会插不少clock inverter的。
如果是在分频器输出create_clock,那么效果图如下图所示。FF1和FF2都在各自的clock tree上,skew一定比较大。FF1只会和分频寄存器做balance。
你的时钟结构图我帮你画出来了(clock mux的B端 你也可以进一步完善)。正常是要做clock balance的。这个需要将clock spec文件中这两颗寄存器相关信息截图看下,确认工具是否有对这两个点做了一些特殊处理。
另外我建议你单独做下ccopt_design -cts 然后再分析下。做tree之前记得把这个设置设上。正常后端实现流程不要把CTS和postCTS两个阶段合并一起做!
set_ccopt_property extract_clock_generator_skew_groups false
Q3:星主你好,想总结一下 timing report中 incr 延时后的特殊符号的意义。我了解到 * 代表工具抽的sdf延时,请问空白或其他特殊符号(如 # )代表了哪些意思,感谢!
一张图搞定这个问题。PT时序signoff看到的report中只能是真实RC反标&,其他任何符号都是错的。只要是咱们社区IC训练营学员的,这个肯定非常熟悉,每次时序signoff分析pt时序报告都会讲到这个。
数字IC后端笔试面试题库 | 经典时序计算题
Q4:Memory是否可以摆放在core区域和timing path合理性问题
- 图中所示的timing path是否合理?为什么?如何做优化?
2)Memory是否可以摆放在core区域中间?把memory摆放在core区域的利弊分别是什么?
Q5:星主,最近做的项目遇到了IR问题 有个违例点在buffer v10上,这个bufferv10驱动的是长线 200多um 领导的让在长线中间插个buffer 后面也解掉了,请问这是什么原理?
线短了单个buf负载变小,对应电流会变小,新加的buf在不同位置,原先位置的iavg会变小,所以对ir drop确实有点收益。
包括把cell驱动变小或换成阈值电压更高的cell,其实也是可以改善ir drop的。
数字IC设计后端实现前期预防IR Drop的方法汇总
Q6: TSMC28nm 1P8M Powerplan设计规划问题
Q7: 星主,问一个有趣的事情,同一个db,同样的命令,为啥nworst 1我这里报只有一个slack,同事那儿就变成三个了?
你们当前active的analysis view数量不一致哦,这个还是非常明确的。不能view下slack是不太一样的。
最后发现是有个同学在flow中将如下变量设置成true了,改成false就一模一样了。
set_global timing_report_group_based_mode true
Q8:星主,想问一下,设计存在mem2cgate的path,invs有啥命令让icg靠近mem摆放吗,或者这类path如何优化timing呢?
一般memory相关的ICG我们都是建议手工摆放好位置,fixed住。优化到ICG enable的timing path,我们主要有以下几种方法。
1)placement阶段设置更大的clock gating check
2)使用early clock flow,在placement阶段提前看到ICG和寄存器memory之间的天然skew
3)综合阶段和PR阶段控制fanout(可以改善timing)
- power aware的clock gating cell placement
甚至我们如果想精细化调timing和clock tree,我们还需要manual place这些ICG clock gating cell和相应的寄存器。
Q9: 星主,请教个问题,harden做lvs check结果如下图,extract open是我给harden打的text,分别为m5的VDDI,m7的VDD,我去掉text我lvs会fail,不去掉的话我这儿显示open,在top(hell)上也能显示出来open,所以我这儿的open究竟算不算真错?另外我给top出gds前还需要打text吗?
模块内部M5没有连成一个整体导致的。顶层在模块盖上高层的pg后就没问题了。你给top出gds不需要打text的,因为你出模块lef给顶层了,顶层可以看得到你模块内部高层PG的。
Q10: Calibre插dummy后对时序和IR Drop的影响?