后端基础——vcs后仿delay
贴上参考文章, 写的很好:negative timing check和negative delay - 知乎 (zhihu.com),如有需要可以参考原文
一,vcs后仿两个关键的option
在做vcs后仿时,有两个参数:+neg_tchk和-negdelay
+neg_tchk针对的是timing check task,即$setuphold / $recrem / $nochange 这三种task,如果这些timing check task中的timing limit有负值,就需要加上这个option,否则vcs会把负的timing limit当作0来处理。这个参数不会影响$setup / $hold / $removal / $recovery / $skew / $width / $period这些类型的timing check task,因为后面这几种timing check task的timing limit不允许是负值。
-negdelay针对的是延时的计算,即cell内部(IOPATH)或者cell to cell间(INTERCONNECT)的延时,如果不使用这个option,vcs同样会把负的delay值当作0来处理。
IOPATH / INTERCONNECT / PORT / DEVICE delay,都是些什么呢?可以在sdf的specification中找到对应的解释。
二,sdf中4种delay
1,IOPATH
cell内的input to output的delay
以上图sdf中的一段为例:
IOPATH是关键字,无须多说;posedge i1是这条IOPATH的start point,o1是end point;后面的(2:3:4)和(4:5:6),分别指的是o1在rise和fall时的delay。
被两个冒号所间隔开的3个值,分别对应着MIN : TYPICAL : MAX,在反标sdf时(比如test bench中使用的$sdf_annotate语句)会指定其中一种。
比如说,如果在$sdf_annotate中指定了MIN,那么,posedge i1如果导致了o1从0跳变为1,则delay值为(2:3:4)中的2,如果posedge i1导致了o1从1跳变为0,则delay值为(4:5:6)中的4。
“posedge i1”这两个单词是一个整体,如果发生了i1从1至0/x/z的跳变(即negedge i1),则不会走这一条。MIN的值并非一定小于MAX,是有可能大于MAX的,比如,可能会出现(4:3:2)这样的情况,它也是合法的。
2,INTERCONNECT
一般用于描述前一个cell的output至下一个cell的input的delay,可以理解作为cell与cell间的连线的delay。
例子中的每条INTERCONNECT后面只有一个延时值,这意味着end point不再区别rise delay和fall delay,不管是rise还是fall,都采用这个delay值。
3,PORT
也是一种连线的delay,和INTERCONNECT有点像。不同的地方在于,INTERCONNECT会有一个start point(前一个cell的output)和一个end point(后一个cell的input),但PORT类型只有end point(后一个cell的input),没有start point(前一个cell的output)。
4,DEVICE
和IOPATH有点相似,一般用于描述cell内的延时。但IOPATH需要指定input和output,而DEVICE只需要指定output(这一点又有点像PORT,但PORT面向的是cell的input,PORT是cell外的delay)。
使用DEVICE时,任意input至这个output的delay,都被此DEVICE语句决定。
ps:在一个sdf文件内,会见到大量的INTERCONNECT和IOPATH语句,而DEVICE和PORT似乎比较少见,有些sdf中则完全看不到后2种。
三,再看delay option
对于-negdelay,在vcs user guide中能看到它还有一些额外的说明:
To consider a negative INTERCONNECT delay, one of the following should be true:
- Sum of INTERCONNECT and PORT delays should be greater than zero
- Sum of INTERCONNECT and IOPATH delays should be greater than zero
- Sum of INTERCONNECT and DEVICE delays should be greater than zero
Otherwise, the negative INTERCONNECT delay is ignored, and a warning message is generated for the same.
Similarly, to consider a negative IOPATH delay, the sum of IOPATH and DEVICE delays should be greater than zero. Otherwise, the negative IOPATH delay is ignored, and a warning message is generated for the same.
如果不满足以上条件,sdf反标将报出warning信息
在实际的vcs后仿真中,遇见了以下问题:
Warning-[SDFCOM_UHICD] Up-hierarchy Interconnect Delay ignored
这是在top hierarchy中使用了INTERCONNECT语句来定义某个sub hierarchy cell’s output至top hierarchy的output所导致的。工具认为这里需要的是DEVICE,而不需要INTERCONNECT,拿掉这条INTERCONNECT后,就不会再有这种warning了。
在阅读网络上论坛等相似问题,很多人的答案是这个warnning并不碍事。我分析此处是sdf中重复定义了部分端口的延时,INTERCONNECT语句定义到下层模块的延时被下层模块再次定义,因此忽略了该语句的定义,而DEVICE Delay被采用,从效果上来说影响不大。