热度 19| |||
后端EDA在pr过程中需要抽取寄生参数,通过寄生参数来计算延时-delay;
但是抽取寄生参数需要用到不同精度的文件和不同精度的抽取引擎,在个别的工艺上可能会导致preroute和之前的阶段与postroute的signoff阶段的差距较大,简单举个例子:
我使用innovus来做pr,然后使用starc来抽取寄生生成spef文件,再由pt报告时序,可能会发现在innovus中所有时序已经没有问题,但是pt中还是有violation,这种情况一部分是工具算法的原因,还有一个就是starc和innovus抽取寄生时差距很大,精度与engine都不同,为了调整工具之间的协调性,可以通过对比spef来调整RC Factor来实现。
create_rc_corner \
-name min \
-cap_table $captable_min_file \
-preRoute_cap 0.943 \
-preRoute_res 0.680 \
-preRoute_clkcap 1.049 \
-preRoute_clkres 0.254 \
-postRoute_cap {0.943 0.943 1.0} \
-postRoute_res {0.680 0.680 1.0} \
-postRoute_clkcap {1.049 1.049 1.0} \
-postRoute_clkres {0.254 0.253 1.0} \
-postRoute_xcap 0.9696 \
-T $min_op_T \
-qx_tech_file @qrctechfile
调整RC factor有两个方法:
一、可以使用命令generateRCFactor来生成RC scale factor
二、使用Ostrich
1.根据routed DEF文件,使用signoff抽取引擎来抽取一个spef文件。
2.使用命令设置一个工艺节点值
setDesignMode –process processnode
3、设置preRoute和postRoute的-effortLevel low引擎,通过读取captable文件抽取互连线的电容值。
4、生成spef,通过extractRC和rcOut命令。
preRoute应该在trail route阶段,postRoute应该在nanoroute阶段生成spef。这样可以提高校正。
5、使用Ostrich 寄生校正工具来对比spef。
6、在未来run 本地抽取前,指定这些比例因素,在create_rc_corner命令中。Pre.post
7、重新run extractRC命令来抽取spef文件,这些文件包含了矫正后的电容、电阻值。
Ostrich是EDI系统中一个独立的实用程序。
1、在EDI使用终端中输入ostrich
2、点击file-import-SPEF
3、在SPEF
Import表单中,指定signoff SPEF文件的名称,在Data Set name字段中指定“Data
Set Name filed”字段中的名称。
接下来,单击Import按钮在Ostrich窗口中添加SPEF值。要关联电阻值,请选择“Extract Resistance”选项。
4、相同导入本地抽取的spef文件
5、单击Correlate-Build,
6、选择Golden为signoff
spef,target为本地抽取spef
7、选择Bulid TCAP按键,Bulid RES按键,
Bulid XCAP按键,单击Bulid。
8、在Ostrich界面,单击Correlate-Draw Plot
Plot 界面展示了建议scale factor
可以在tech file中改ScaleFactor,
使用命令create_rc_corner中的-pre and –post参数
可以设置在preRoute或postoute提取模式下提取的电阻和电容的比例因子。通过将postRoute引擎变量指定为双组和三组,可以为它们设置不同的postRoute比例因子。例如,{value1 value2 value3}
Single value:如果指定一个值,则被使用与effort low精度,精度为medium和high默认使用比值为1
Duplet: 如果指定两个值,第一个值被使用于low,第二个值被使用于medium,high还是1
Triplet:以此类推
create_rc_corner -postRoute_xcap {1.1 1.05} -postRoute_cap 1.2 -postRoute_res 1.1 -preRoute_cap 1.3 -preRoute_res 1.4 -preRoute_clkcap 1.11
注:使用saveDesign命令之后,设置会被保存到viewDefinition.tcl中,
除了时钟的scale的值都为1.所有默认的时钟net的比例值为0。暗示为时钟线的scale值跟随匹配的信号线的比例值。
但是比较坑的是,starc的spef为加密格式,此工具识别不了,所以最后还是改用了cadence家的qrc工具,如果一定要用starc,只能通过reportDelayCalculation和report_delay_calculation来手动计算比例了,如果有好的方法能够调节innovus和pt之间的协调性,欢迎大佬在下面留言,谢谢!
哎,starc抽spef的脚本中不知道什么时候加了一句NETLIST_COMPRESS_COMMAND: gzip -q,删掉就不是加密的spef了!
林137: 大佬,为什么我这边抽取的spef 反标可以成功,但是ostrich 却一直报错,与starrc的option有关吗? 报错log (read_spef): Net 'u01_mbist_test_block/u02_mbist_c ...