在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: andy89926

[原创] icc2enc脚本+后端问题

[复制链接]
发表于 2019-12-25 05:46:02 | 显示全部楼层


andy89926 发表于 2019-12-24 15:41
谢谢,又学到了
还想问一下,
我的setAnalysisMode就这么一句话,没有-lib -max什么的,可以吗?


如果是老一些的工艺, 在MMMC中用 ff library+RC best 作为 hold analysis view 是正确的。
新一些的工艺要多查几个 PVT corner。 例如, 65nm -40C can actually be slower, not faster.  Slow process, low temp, low voltage might be the worst corner for setup; fast process, nom temp, high voltage might be the worst corner for hold.  


set_analysis_view -setup { your list of views for setup analysis} -hold { your list of views for hold analysis }


setAnalysisMode -checkType setup

report_timing -view <one of your views for setup analysis>
...

setAnalysisMode -checkType hold
report_timing -view <one of your views for hold analysis>

...


Innovus is capable of producing fairly accurate SPEF, but it depends on how you set it up.  

1) Did you provide various qrcTechFile in your MMMC?  

2) setExtractRCMode -coupled true -engine postRoute -effort signoff
I think only when effort is set to "high" or "signoff", Innovus will run iQRC in the background (takes long time).  Still, Quantus QRC is more rigorous signoff.  


从描述看, Innovus timing 和 PT timing 没有 correlate, 这是不应该的。 两者应该很接近。 差 10ps 可以相信, 差很多就是设置有问题了。 选一个 path, 一个个 gate 对比,也许会给出一些线索。 BTW, SDF is for backannotating gate level sim.  SDF should be written out from PT or Tempus.  You seem to have used SDF as input to PT.  That's odd.  


发表于 2019-12-25 05:50:50 | 显示全部楼层


axxqql 发表于 2019-12-24 16:25
其实我很好奇你的sdc为什么有两个?差别从名字上看是ss和ff,这是啥?孤陋寡闻了。一般mmmc 多mode是说func ...


MMMC stands for multi-mode (func, scan), muti-corner (PVT).  


func_mode_wc view: ss library + RC worst + func_mode SDC

func_mode_bc view: ff library + RC best + func_mode SDC

scan_mode_wc_view: ss library + RC worst + scan_mode SDC
scan_mode_bc_view: ff library + RC best + scan_mode SDC

In a simple scenario like above, there are 4 different views.  



发表于 2019-12-25 09:52:26 | 显示全部楼层


jake 发表于 2019-12-25 05:50
MMMC stands for multi-mode (func, scan), muti-corner (PVT).  


你没明白我意思。。。你写的这些我都知道。你自己去看他的mmmc文件。你就知道为什么我那么问他了。
我是说他的sdc看起来是有两个,但是从名字上看起来都是区别是一个ss一个ff。并不是我通常认为的function 和test很明显的起名字方式。我也没找到他的sdc里面内容,所以我才问的。如果内容是function和test,那他就回答我只是名字起的不明显而已,如果不是,我就是孤陋寡闻想请教了。
所以你没有帮他回答我,你想当然了。
 楼主| 发表于 2019-12-25 14:03:44 | 显示全部楼层


axxqql 发表于 2019-12-25 09:52
你没明白我意思。。。你写的这些我都知道。你自己去看他的mmmc文件。你就知道为什么我那么问他了。[/back ...


感谢关注我的问题,这是我的sdc,我只是为了解决一个warning弄出了两个sdc,其实是一样的,应该都属于func sdc吧,因为我还不理解scan sdc是什么

这是我的sdc,不知道这个sdc设置的有没有问题。

create_clock -name "clk_200" -period 5 -waveform { 0 2.5  }  { clk  } ; #700M=1.43
set_clock_latency 0.1 [get_clocks clk_200]
set_clock_uncertainty -setup 0.3  [get_clocks clk_200]
set_clock_uncertainty -hold 0.3 [get_clocks clk_200]
set_clock_transition 0.1 [get_clocks clk_200]

set all_in_ex_clk [remove_from_collection [all_inputs] [get_ports clk]]
set MAX_LOAD [expr [load_of fsh0l_ers_generic_core_ss0p99v125c/INVLERMX1/I]*10]
set_max_capacitance $MAX_LOAD $all_in_ex_clk
set_load [expr $MAX_LOAD * 2] [all_outputs]
set_driving_cell -library fsh0l_ers_generic_core_ss0p99v125c -lib_cell INVLERMX1 -pin O $all_in_ex_clk

set_input_delay -clock clk_200  -max -rise 0.2 $all_in_ex_clk
set_input_delay -clock clk_200  -min -rise 0.1 $all_in_ex_clk
set_input_delay -clock clk_200  -max -fall 0.2 $all_in_ex_clk
set_input_delay -clock clk_200  -min -fall 0.1 $all_in_ex_clk
set_output_delay -clock clk_200  -max -rise 0.2 [all_outputs]
set_output_delay -clock clk_200  -min -rise 0.1 [all_outputs]
set_output_delay -clock clk_200  -max -fall 0.2 [all_outputs]
set_output_delay -clock clk_200  -min -fall 0.1 [all_outputs]

write_sdc $proj_path/DC_OUT/PEwithMC_ss.sdc


set all_in_ex_clk [remove_from_collection [all_inputs] [get_ports clk]]
set MAX_LOAD [expr [load_of fsh0l_ers_generic_core_ff1p21v0c/INVLERMX1/I]*10]
set_max_capacitance $MAX_LOAD $all_in_ex_clk
set_load [expr $MAX_LOAD * 2] [all_outputs]
set_driving_cell -library fsh0l_ers_generic_core_ff1p21v0c -lib_cell INVLERMX1 -pin O $all_in_ex_clk

write_sdc $proj_path/DC_OUT/PEwithMC_ff.sdc


 楼主| 发表于 2019-12-25 14:29:36 | 显示全部楼层
本帖最后由 andy89926 于 2019-12-25 14:32 编辑


jake 发表于 2019-12-25 05:46
如果是老一些的工艺, 在MMMC中用 ff library+RC best 作为 hold analysis view 是正确的。
新一些的工 ...


感谢大佬这么耐心的解答!

我才知道ff不是温度越低越快,长见识了

还得一个一个的report_timing check,看来我低估了后端的复杂程度啊。

1) Did you provide various qrcTechFile in your MMMC?  
我只用了两个,RCbest和RCworst,不知道够不够

2) setExtractRCMode -coupled true -engine postRoute -effort signoff
我用的是指令是setExtractRCMode -engine postRoute,估计是默认的effort 吧,可能不会那么准

现在还是innouvs和PT差别蛮大的,应该不只是QRC造成的吧。我发现innovus里setup没满足的话,hold就一定opt不好,setup满足了,hold才有可能opt好。
我在innouvs里把sdc的时钟设到5ns才能让setup满足,然后才有可能把hold修好。出来的.v和.spef去PT,发现2.5ns的时钟都可以MET。

我没有用sdf作为输入给PT啊,我是把spef给PT的。帖子里写错了,现在更正了。


我还想问一下,这个scan sdc怎么写啊,是scan什么啊,时钟频率还是负载啊?
发表于 2019-12-25 15:31:21 | 显示全部楼层
你没做DFT,没插scan, 是没有scan mode。通常test mode会有scan啦,mbist啦。。你其实就一个function mode. 对付脚本的话,你起两个名字,内容整一样吧,不需要在max load上变化。
你有5个corner就写4个呗,组合一下,反正你东西小,跑的快。cworst,cbest,rcworst,rcbest.

timing的差距问题我没太看懂你说的意思。。建议你用signoff抽RC给PT. postRoute是修的默认,抽还是用高精准的抽吧。。你的发现“innovus里setup没满足的话,hold就一定opt不好,”是对的。修hold时候是盯着setup的slack的
 楼主| 发表于 2019-12-25 16:52:59 | 显示全部楼层


axxqql 发表于 2019-12-25 15:31
你没做DFT,没插scan, 是没有scan mode。通常test mode会有scan啦,mbist啦。。你其实就一个function mode. ...


感谢感谢,我离真相又近了一步
发表于 2019-12-25 23:57:58 | 显示全部楼层


andy89926 发表于 2019-12-25 14:29
感谢大佬这么耐心的解答!

我才知道ff不是温度越低越快,长见识了


从 #1 楼下载了 pt_postPR.tcl, 看了一下, 有几个地方可能可以提供一些线索。
1)

#################################################################################
# READ PARASITICS
#################################################################################
#reading Parasitics.
#Increment option is used to read in multiples parasitics

#Do not use keep capacitive coupling for regualr PT
read_parasitics -format spef $SPEF_FILE ;#

# this command is ued to check net that has not annotated.
#report_annotated_parasitics -internal_nets -boundary_nets -list_not_annotated -max_nets 5000

这里 read_parasitics 应该会汇报一下 annotation %。 如果%低, 说明 SPEF 和 netlist 不匹配。


2)

set TARGET_LIBRARY_FILES          fsh0l_ers_generic_core_tt1p1v25c.db  ;#  Target technology logical libraries ;#
从名字看, 这个 .db 是 nominal corner。 这句在不同的 corner 下是否改成对应的 .db.  在做 hold analysis 时改成 fsh0l_ers_generic_core_ff1p21v0c.db, 在做 setup 时改成 fsh0l_ers_generic_core_ss0p99v125c。 只是问一下, 相信你应该是改的。


3)

综合算法优化 setup。hold 没有意义。

INNOVUS 在 CTS 之后, 时钟树成为 propagated。INNOVUS 算法中第一优先的是 timing, 要先满足 setup。 只有 setup 满足的情况下, optDesign -hold 才有意义。

通常跑第一遍先不 fix hold,检查 setup 是否能满足。fix setup 比较困难。 只有 setup 满足了, 且有余量, fix hold 才有意义。 hold 加些 buffer 总能 fix, setup 就没那么简单了, 受前端影响极大。



 楼主| 发表于 2019-12-26 14:15:02 | 显示全部楼层
本帖最后由 andy89926 于 2019-12-26 14:40 编辑


jake 发表于 2019-12-25 23:57
从 #1 楼下载了 pt_postPR.tcl, 看了一下, 有几个地方可能可以提供一些线索。
1)


1、read_parasitics 试过了,1万多根线就4根没标注,应该是匹配上了吧

2、问题就在这里!我在哪看到PT里的TARGET_LIBRARY不用设置来着,所以我随便设置了一个就一直没管它,我以为设置了set_operating_conditions -min_library fsh0l_ers_generic_core_ss0p99v125c -max_library fsh0l_ers_generic_core_ss0p99v125c -analysis_type on_chip_variation之后PT会自动选择max和min来计算hold和setup。

换了TARGET_LIBRARY之后基本能跟innovus匹配上了。我真是太菜了。。。

多亏你的帮助

我怀疑我的DC是不是也设置错了,DC的target lib是吃进去所有的.db,还是只吃ss啊? 我dc用1.5ns的时钟就能setup met,而做PR的时候要把时钟放到5ns才能把setup修好 ,我怀疑DC用了ff的lib。
我的DC link lib是所有的ss到ff加* ,target lib是所有的ss到ff,operating_conditions是 ss里的WCCOM,

wire_load_model是 enG50K -library fsh0l_ers_generic_core_tt1p18v25c,这个wire_load_model我太不确定了,不知道G50K和enG50K或者100K什么区别,还是说应该设成set_app_var auto_wire_load_selection true或者set_zero_interconnect_delay_mode true ?



感谢老兄的指点,让我走出了谜团,麻烦你再解答下我这两个问题呗,关于DC环境的。

 楼主| 发表于 2019-12-26 14:55:54 | 显示全部楼层


jake 发表于 2019-12-25 23:57
从 #1 楼下载了 pt_postPR.tcl, 看了一下, 有几个地方可能可以提供一些线索。
1)


在论坛里翻了一下,好像dc的target lib是应该只用ss的。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-28 21:09 , Processed in 0.029258 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表