微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC后端设计交流 > 尚未解决--PT产生的SDF文件中,hold time 没有按照lib中负值计算,不解,寻求帮助

尚未解决--PT产生的SDF文件中,hold time 没有按照lib中负值计算,不解,寻求帮助

时间:10-02 整理:3721RD 点击:

我在pr后进行pt分析,同时在pt中产生sdf文件,比较了pt路径分析中的 library hold time 和 sdf中的hold time check,发现有不一样的情况。
首先说明: 用到库里的reg为scan flip-flop,library hold time是负值,比如:-0.83。但是sdf中全被表为0了。见下图:



我们看到那个library hold time 为-0.88.



产生sdf命令:write_sdf -version 3.0 ./out/sta.sdf
我们看到在sdf中相同reg hold time 是0. pt产生sdf怎么没有体现负值呢?如果在这种情况下,用这个sdf去做后仿,岂不是不准确了?
请朋友们指导下,多谢! 顺祝大家新年快乐!

sdf是可以写出负值的

缺省 write_sdf会写出来吧,
-negative_XXX 会把所有负值变成 0 ,
这个没关系吧, 只要sta过就行了, timingcheck 会体现在 sdf里面么?

后防应该会调用sdf里面的delay信息

首先,SETUP和HOLD这两个时序描述符不支持负值,如果限制值是负值的话,仿真工具会直接当成0处理
其次,SETUPHOLD这个时序描述符,是SETUP和HOLD两者的联合,并且支持负值,如果限制值是负值的话,当仿真工具使能了负值检查时,会进行负值的时序检查,否则也会当成0处理
然后,我们再讨论这个问题。工具直接把负值当成0处理,是一种更悲观的处理方式,在时序不紧张的情况下,倒是影响不太大。如果时序相对很紧张,就可能出现很多TIMING VIOLATIONS。所以,到底关心不关心这个问题,就要看设计的时序情况了
最后,提出一种使用SETUPHOLD时序描述符,描述SDF文件的方法。
write_sdf -version 3.0 -include SETUPHOLD -context verilog xx.sdf
Note:vcs工具使能负值时序检查的参数是+neg_tchk

我用的是version 2.1的分开描述SETUP和HOLD可以写出负值如果想用SDF反标检查RECOVERY 和 REMOVAL ,在写出write_sdf是不是还需要附加什么选项?
谢谢指点。

我已经提到了,是可以用SETUP和HOLD写出来负的时序限制值,但是仿真工具会把负值当成0处理,这样达不到原本想要的结果。只有SETUPHOLD和RECREM才支持负的时序限制值
不需要加额外的选项,但必须是3.0版本的才能全部写出来,2.1版本的好像无法写出来REMOVAL
如果无法写出来RECOVERY和REMOVAL,再请察看library中是如何定义recovery和removal的时序曲线类型的,关键字:timing_type

谢谢你。
之前没理解你说的不支持负值,现在知道了。下次去试试,原来没注意2.1会把负值当0处理。

确实是没有写出来负值,PT分析路径时序的时候都用到了cell的负值的library hold time,怎么导出的SDF却始终产生不出负值,始终为0。(HOLD (posedge DT)(posedge CLK) (0.000::0.000))。什么原因呢?

5F很精采的回答阿!


1. 5#说:首先,SETUP和HOLD这两个时序描述符不支持负值,如果限制值是负值的话,仿真工具会直接当成0处理
疑问:怎么说SETUP和HOLD不支持负值呢?像我之前DC和ASTRO导出的SDF中不都有负值吗,
对于同一个reg port,SDF中的timingcheck:
DC.SDF: (HOLD (negedge E) (posedge CK) (-0.207:-0.118:-0.118))
astro.SDF: (HOLD (negedge E) (posedge CK) (-0.2395:0.0000:0.0000))
另外我发现,之前我一直都是在PT中反标了astro导出的astro.SDF,导出的SDF中timingcheck中没有负值。如(HOLD (posedge DT) (posedge CLK)(0.001::0.000))。后来尝试在PT中不反标astro.SDF,那么最后导出的SDF中 timingcheck中是包含负值的。如 (HOLD (posedge DT) (posedge CLK)(-0.933::-0.933)),这是什么原因呢?反标了astro.SDF会影响PT产生的SDF?
2. 5#说:最后,提出一种使用SETUPHOLD时序描述符,描述SDF文件的方法。
write_sdf -version 3.0 -include SETUPHOLD -context verilog xx.sdf
疑惑:我按照此方法导出的SDF中,如果反标了astro.SDF,PT仍然是导不出带有负值的SDF.
请指导,谢谢!

您好,您所说的我有点不明白,限制值是什么意识?还有您是如何确认“SETUP和HOLD这两个时序描述符不支持负值,如果限制值是负值的话,仿真工具会直接当成0处理”?仿真工具会直接当成0处理?

第一个问题,能写出来不代表就是支持,关于$setup、$hold和$setuphold(或者$recovery、$removal和$recrem)是如何描述时序关系的,请参阅相应语法,这个就是常规规定,不是我要说它支持或者不支持的
第二个问题,我习惯的用法是astro工具导出spef文件,使用star-rc工具提取sdf

比如说,library中规定DFFX1单元时钟的建立时间为2ns,那么该单元setup time limit value is 2ns
关于当成0处理,可以查看仿真的log file,应该是工具的默认处理方式

五楼正解,学习了

5楼很强大,正解!

我也遇到了小编同样的问题。
1. 我用write_sdf -version 3.0 -include SETUPHOLD -context Verilog -no_edge 吐出sdf后,看到SETUPHOLD里,hold的值确实是负值。
2. 反标到netlist后,用nc跑simulation,发现NC仍然是把某个hold的负值解释为0,某个cell仍然是violation的。
何解?
有高手能解答一下么?

我想问一下,SDF反标0的话,对path上的timing有影响吗?

你好,请教个问题。
个人理解,即使把hold的负值反标上去了,nc也只是在检查相应的时序时会用到这个值,
而不会在信号路径的延时里加上这一信息。
这样就导致仿真有可能的失败。
不知道是不是这样?

我也是这个问题。貌似nc只是在检查时序用到这个值,我仿真nc没有报hold violation,但是功能就是不对。
然后trace到一个cell,在波形上看hold是不满足的。查pt的时候发现,该cell 的 path延时就没有把hold的
负值计算在内。
后来我就直接把库里面相应的cell中,$setuphold 给改了,加上相应的信息。
心里有点忐忑,不知道这么做合不合适啊。



试试VCS

当然会有影响,具体的查看响应的文档,主要是检查窗口的调整

不是简单的加减而已

一般来讲,$SETUPHOLD和$RECREM就是为了调整负值时序检查窗口的,高频电路需要特别注意的

非常感谢!
我的问题已经解决了,是没用对库。应该用带neg的库。
后来发现,该库中$setuphold的用法和我改的是一致的。
放心了。
谢谢指点。

“但是仿真工具会把负值当成0处理,这样达不到原本想要的结果”怎么理解?工具自己干还是因为文件的原因造成的?我用NCsim仿真的

有一个选项叫做replace negtive value by 0,记不清在哪里见过了,不知道是不是因为这个?

我也遇到同样的问题,带neg的库长什么样子呢?在线等解答

分析的太透彻,受益匪浅。

用neg的库在哪里呢?小白一枚,求指教什么是带neg的库

上一篇:ICC Route DRC Error
下一篇:ICC布局求助

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

网站地图

Top