微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC后端设计交流 > 在后端设计中如何在worst corner下查hold

在后端设计中如何在worst corner下查hold

时间:10-02 整理:3721RD 点击:
求助!我在使用ICC时,以前都是在bc下修hold,而在wc下修setup。如何能新创建一个特殊的corner,可以在worst corner下查看并修复hold违例,并且和之前的默认corner并存?(也就是不用重启工具重新设置library,使bc wc的lib互换,两边来回倒。)我在MCMM下尝试也不成功,求教了!

自己顶一个。希望有个解决办法!在40nm工艺以下不是经常会遇到吗?各个corner都需要经过setup和hold检查。那ICC都是如何设置的呢?请教各位大牛了!

bc下hold都没有violation,那wc下一般也就没了吧。

也不尽然。主要是想查芯片的input hold。一般这里worst下比best更容易发生hold违例。我在best下hold全部通过,在signoff时worst下就在这里发生hold问题了。可是在后端中worst下的hold我根本就看不到!

请问没有人遇到过这种问题吗?现在感觉ICC中MCMM的multi-corner不像是真正的多转角。还是只能检查默认的setup和hold。想要在不同mode下自由选配corner很难实现呀!

create_scenario + set_scenario_option

谢谢!我查了一下set_scenario_option,里面的-setup和-hold是指工具在优化时是否考虑该scenario中对应违例的cost,而且默认都是true。没有找到指导工具在worst corner下检查hold并能报出来的命令。

是不是工具就不支持呢?需要在target_library和link_library中进行设定才可以?

set_fix_hold [all_clocks]

不是修复hold的命令。而是一种MCMM设定的方法。multimode可以通过create scenario实现,但multicorner却没办法灵活实现,只能实现bc下的hold和wc下的setup。但我想wc下查看hold却无法办到。

在target_library和link_library 中要将max和min的库都设置上,然后再create scenario,在wc下看setup,在bc下看hold,在wc下看不到hold是因为不存在吧,不知道小编的用意?

我知道,我认为是可以的啊。用 create_scenario,然后对各个scenario设好自己的operating condition。
psynopt刚开始时,是看不到MIN DELAY COST的,修完setup才会看到。

此言差矣,对hold来说,很大程度上取决于skew,而对一个确定path,它的skew到底在worst还是best更大,不能简单确定。

想要wc下的hold timing报告么?
report_timing -scenario [all_active_scenario] -......
就应该能看到结果了吧 或者想看哪个下的就[current_scenario]

我觉得楼上正解

worst corner下report_timing min和max都可以报出来的!
在ICC 在worst corner下不一定有hold,可能要在pt里面才可以看到!
不知道是不是你想要的

我见这个问题很久了你都没得到满意的答案。不知道你注意report_qor的结果格式没?如果你要是只想知道wc下有没有hold violation。report_qor -scenario [all_scenarios]下它会把所有的corner下hold都给报出来。

prompt> report_qor -significant_digits 4
****************************************
Report : qor
Design : top
Version: E-2010.12
Date: Fri Aug6 17:34:51 2010
****************************************
Timing Path Group 'default'
-----------------------------------
Levels of Logic:26.0000
Critical Path Length:9.9998
Critical Path Slack:0.0002
Critical Path Clk Period:Undef
Total Negative Slack:0.0000
No. of Violating Paths:0.0000
Worst Hold Violation:0.0000
Total Hold Violation:0.0000
No. of Hold Violations:0.0000

谢谢小编。我认为report_qor下报出来的Worst Hold Violation指的是hold违例中的最差路径。和setup的WNS差不多,而不是worst corner下的hold违例,如有不同意见请指出,谢谢。另外我设置的target lib和link lib只有MAX.db,但set_min_library MAX_lib.db -min_version MIN_lib.db 所以每次报timing时工具都自动使用MAX_lib报setup timing,使用MIN_lib报hold timing。但我现在除了这些之外还需要工具使用MAX_lib报一次hold timing,也就是之前提出的问题。尝试和很多办法都无法办到。

你在worst corner下report_qor报出来的hold就是你想要的啊。

我觉得问题的关键地方是: ICC大多用户是bc_wc模式来做的,而PT则只支持单个db库。
PT只需设一个target lib ,而且不支持bc_wc两套库的模式,所以看到的setup hold都是同一套db延时(我指的仅仅是普通模式,如果用DMSA方法就可以和ICC看到的bc_wc一样) 。 所以,只要想办法让ICC只读入一套库或许能达到目的。我没有亲自试过,不知道能否实现,我只是凭感觉提示一下,如果小编找到方法,记得通知下。
我记得在设max-min关联时可以选择用同一套库的,用-none选项:
set_min_library max_library -none
这样,分析min delay时会选择和分析max delay相同的库。
(stand cell我真没试过这样设,不知道结果会如何。但是有些模拟IP或黑盒子IP只提供一个db时,我这样设置过没报什么错。)
还有Set_operating_conditions不知道这命令有没有帮助。



没错,我认为关键也是这个问题,我使用bc_wc模式。可是现在的要求比较特殊。如果target lib只设置max_lib一套库,不使min_lib相关联,理论上可以报出wc下的hold。可这样bc_wc就不管用了,也就是无法在bc下报hold timing,而这种模式也是我所需要的。

绕了这么多,回复也不少,先谢谢大家。可是感觉有点跑偏。重新精简一下:
已有: max_lib和min_lib各一套
在ICC中,如何配置target_library 和operating_condition(或者使用其他方法),可以使工具同时报出如下时序:
使用max_lib报出setup timing和hold timing,使用min_lib报出hold_timing

关键点已经尝试成功了,剩下的就是靠设置scenario来搭配了。
举个最简单的例子,PT需要读 cmax的spef和ss1.08v125c 的db 来做sta ,那么它检查setup和hold的环境都是同一套。同时,另一个PT窗口需要读cmin的spef和ff1.32cm40c的db来做sta,它也会用同一套环境检测setup 和hold。
假如设计signoff只需要上面这4种,那么只要在ICC里设置2个scenario分别对应即可,需要有多少个pt窗口跑,我们就设几个,每个scenario看到的都和单个PT看到的完全一致。
现在ICC的思路是:整个设计都不用bc_wc那种两套库的关联,把所有corner的db都写进link_lib,把所有corner的stand cell db写进target_lib ,删除set_min_library 语句。
先remove_sdc ,然后
create_scenario func_wc_cmax_125 ;set_tlu_plus 用cmax的;read_sdc ;Set_operating_conditions 只设max的值,应该是ss1.08v125c的库,min不填默认和max的环境相同,bc_wc模式。
create_scenario func_bcl_cmin_m40 ,set_tlu_plus 用cmin的 ;read_sdc ;Set_operating_conditions 只设max的值,应该是ff1.32cm40c的库,min不填默认和max的环境相同,bc_wc模式。
建立完后,report_scenario看报告,每个场景的库设置和PVT是否是你想要的那种和PT一致的形式。
具体没跑过流程,不确定是否可行。请小编实验后告诉结论。

多谢!经验证该方案可行。已经成功配置了MCMM,并且需要的都能报出来。看来是之前设置的set_min_library将multi-corer限制住了,现在已经没问题,能够实现多corner的自由配置了。

学习了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top