用SiliconSmart做Re-characterization结果setup误差偏大
用 SiliconSmart 做 Re-characterization,按照 user guide 里面的flow来run的,结果是delay相差+-3%左右,但是setup 相差-60%左右,hold相差-100%左右。上面的问题是用 Re-ch 得到的 liberty 与原库的 liberty 比较的结果。
1、原库有 liberty 文件,从原库导出instance file;
2、使用原库提供的 GDS 和CDL 生成带RC 参数的NETLIST;
3、使用与原库相同的 Spice Model(含shrink设置),NETLIST 不再做shrink操作;
4、调整与 setup 和hold 有关的参数 smc_degrade 和 smc_degrade_absolute 后,setup的 rise 部分误差有所减小,但是 setup 的 fall 部分和 hold 都基本没有变化;
这个问题搞了一个月了还是没有进展,请大侠帮忙分析下,还有什么可行的办法,新手求助,谢谢了!
邮箱:cn_dabby@hotmail.com
configure里面的参数,有一一确认过吗?比如Input transition time.Constraints, m*n tables? output capacitive loading?等等 。 你先单用跑一个单元这样好查问题。然后调整输入参数。与原库一致,还有一些参数并不一定会写在seed lib里面。
小编好,您说的configure参数是指“configure.tcl”文件里面的参数吗?这里面的参数都确认过了,与原库一致,包括Input transition time, constraint m*n table, output capacitance, 各种 threshold 值等等。我是单独 run 一个 DFF cell。下面是我的两张截图,图1是原库中关于该DFF cell的setup & hold信息,图2 是我做re-ch后抽出的关于该DFF cell的setup & hold信息,两者的rise_capacitance 和 fall_capacitance 值不同是我现在能检查到的不一致的地方了……求指点,谢谢!
差好多!你在cadence中用电路搭建DFF,然后用spectre仿真或者hspice仿DFF寄生网表(layout中提取rc后的网表),选取和siliconsmart中相同的一组index_1,index_2,然后对比timing信息,与你上面的结果是否一致或者跟哪个接近。现在光从结果中也难以直接找出原因,除非我用你的网表和model,以及设置文件重新跑一次来debug.
你的输入信号是怎么设置的?我之前仿真setup和hold,输入信号对它们的影响不能不忽略。
小编好,单独仿DFF电路的时候需要写“激励文件”,而激励文件中需要设置 CLOCK 对 DATA 的延时,这个延时就是 setup ,既然已经设定了 setup 值,那这个仿真的作用是什么呢?其中,您提到的选取与 SiliconSmart 相同的一组 index_1 和 index_2,是在激励文件中对 CLOCK 和 DATA 的 slew 的设定吗?请小编指点,谢谢!
或者,小编的意思是:我在仿真的时候,选取和SiliconSmart 相同的一组index_1 和 index_2,然后通过仿真找出该组条件下的最小setup & hold 信息?但是如果这样的话,找到的最小setup & hold 的值不一定是SiliconSmart 抽取的 timing 所选择的值,它还要考虑这个时候的CK->Q的值是不是在某个范围内(这个是SiliconSmart 中的 user guide 中提到的)。还是我理解有误?
小编好,我用 HSPICE 对 DFF 仿真需要写激励文件,文件中需要设置 CLOCK 对 DATA 的延时,而这个延时就是setup,既然这个值已经被设定了,那单独仿真电路的作用是什么呢?您提到的选取与SiliconSmart 相同的一组index_1 和 index_2 也是在激励文件中分别对CLOCK 和 DATA 的slew 的设置,是吗?求指点,谢谢!
输入transition的波形有好几种选择
难道说的是TSMC的NLDM?你确定他是用hspice跑出来的吗
不是tsmc,后半句是什么意思?抽timing model不是用siliconsmart一类的工具吗?
更专业的,也许他根据实际单元的流片校准逻辑库的时序信息;
或者不专业的,特征化工具的精度和测量方法都配置的不准确。比如说constraint,不知前边有没有人说道,可以使用pass/fail方法,可以使用relative slew或relative delay方法,而判断的threshold也是人为设置的。如果你做re-char,则这些测量方法应该是default而不是我们实际使用的。
我抽取timing model 的时候用的是silicon smart 工具,不需要设置输入信号。您的意思是单独仿真一个cell的时候设置的激励吗?这个时候我的设置如下:
v1 cp gnd pulse 0 1.8 0.5n 1n 1n 9n 20n
v2 d gnd pwl 00 1u 0 1.001u 1.8
*** data rise
v2 d gnd pwl 0 1.8 1u 1.8 1.001u 0
***data fall
您好!像您说的,从更专业的角度来说,如果他们根据流片结果手动调整时序库信息的,我做re-char的话怎么调都很难与其接近了?
从不专业的角度讲的话,我做re-char的时候,有尝试调试各种能影响setup & hold的参数,比如smc_degrade、smc_degrade_absolute,四种constraint mode 和四种 constraint style 的组合情况我都试过了,结果也如您所说,default 情况就可以了。
冒昧地问下各位大侠:哪位周末或者下班后有时间?能不能留个QQ或者电话给我邮箱cn_dabby@hotmail.com? 知道大家都是level 比较高的大侠,刚接触siliconsmart一个多月,这个问题就搞了近一个月了,正在试用期啊……能参考的资料就《user guide》了,先谢过
其实特征化单元库也需要了解很多知识的,可以看看新思公司library compiler的文档,里边详细介绍了synopsys liberty format里边的属性和group是如何定义的;之后需要了解每一个单元类型的行为,这就需要先参考一下比较成熟的商业库中对应单元的类型,都有哪些timing arc,每个pin有什么特殊属性,这些东西siliconsmart现在还不能很好的处理;同时,了解一下静态时序分析方法,毕竟咱们的库是要被商业工具使用的,有个验证流程。siliconsmart并不是万能的,对于一些特殊的结构通过使用set_config_opt可以完成,但这都是基于充分了解cell的行为。而对于更复杂的单元,往往你engineering了半天不如使用nanotime来得有效率。
然而你通过这样的学习做一个项目后,其他项目又变得简单了,因为单元的类型都固定了,现在使用脚本进行自动化操作,多少感觉这个工作很无聊,不知自己的出路何在。
另外,通过流片测试做调整这个操作需要¥,流片测试的QA是进一步的保障,我个人也还没有这方面的经验,只要做好DB到XRC有很好的一致性就可以了,可以把误差归咎于模型和寄生抽取。
你在PDA吧?
谢谢您,又给我指了一条道路,已经找到了library compiler 的文档在看了,嘿嘿。
另外,您提到"只要做到从DB到XRC有很好的一致性就可以了"这是什么意思?DB是data base?从哪里获取呢?XRC是寄生参数抽取?从前者到后者的一致性要怎么判断呢?
PDA是哪儿?我还搜索了下。
单独run就是让你确认仿真结果是否正确,比如rising/fall time设置的时候是否从transition time做相应的转换,即激励中的rising/fall time = transition除以(slew_upper_threshold_pct_rise/fall—slew_lower_threshold_pct_rise/fall)%,另外仿真时钟周期建议至少大于max_transition 四倍,多做几次调整,如果对仿真结果影响较大就说明设置有不合理的地方;可以多选取index中几组输入数据,然后从波形中手动截取delay time或transition信息,对比你的查找表中得到的数据,误差是否一致或都接近。如果单独跑的的结果与你的Lib结果一致,则说明你的configure与原厂仿真的时候设置不一致。
DC、PT通过使用你提供的库报的timing path和同样条件下使用SPICE仿真得到的delay误差在一个范围内。
求问大神,transition波形可以在siliconmart中选择么?怎么设置?
受益匪浅
请问 nanotime可以处理memory的timing 抽取吗?
不知是否方便给个使用nanotime做timing extraction的例子(简单的即可),谢谢
我QQ 1219280234@qq.com
可以参考nanotime或siliconsmart的ug,里边有对讲专门对memory lib的抽取。