马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
各位大神,请教一个问题,用S K库的时候,发现在load比较小,transition比较大的时候,cell出来的延时是负值。后面是引用一个范例。
请教各位大神,做库的时候遇到这种问题怎么办?不吝赐教。
是修改hspice仿真的参数?还是怎么做?非常感谢!
----------------
对于cell delay的计算,以inverter为例, INV是由一个NMOS和一个PMOS串联而成,当输入为“1”时,NMOS打开,构成下拉电路,输出为“0”;输入为“0”时,PMOS打开,构成上拉电路,输出为“1”。 如何定义“0”和“1”? 这是由transition threshold决定的(在时序lib中定义,由半导体公司给出),分为rise transition和fall transition。假设将80%的作为rise_transition_threshold, 20%为fall_transition_threshold。关键是区分20%到80%,和80%到20%这段区间,到底认为其为0还是1. 对于rise transition,在(0, 80%)区间为0,(80%,1)为1; 对于fall transition,在(1,20%)之间为1,在(20%,0)之间为0。 这样,如何计算cell的delay,一个cell有多个delay,对应不同的timing arc。以INV为例,如图(a)所示。 delay警告的解释" title="[转载]关于使用ncsim仿真时出现negative delay警告的解释" action-data="http%3A%2F%2Fs11.sinaimg.cn%2Fmw690%2Fcdd8559agx6DtuDnpaOba%26690" action-type="show-slide" style="margin: 0pt auto; padding: 0px; border-width: 0px; border-style: initial; list-style: none; display: block;">
delay警告的解释" title="[转载]关于使用ncsim仿真时出现negative delay警告的解释" action-data="http%3A%2F%2Fs13.sinaimg.cn%2Fmw690%2Fcdd8559agx6DtuDwibG8c%26690" action-type="show-slide" style="margin: 0pt auto; padding: 0px; border-width: 0px; border-style: initial; list-style: none; display: block;">
delay警告的解释" title="[转载]关于使用ncsim仿真时出现negative delay警告的解释" action-data="http%3A%2F%2Fs11.sinaimg.cn%2Fmw690%2Fcdd8559agx6DtuDFNmq5a%26690" action-type="show-slide" style="margin: 0pt auto; padding: 0px; border-width: 0px; border-style: initial; list-style: none; display: block;">
delay警告的解释" title="[转载]关于使用ncsim仿真时出现negative delay警告的解释" action-data="http%3A%2F%2Fs2.sinaimg.cn%2Fmw690%2Fcdd8559agx6DtuDNyKJc1%26690" action-type="show-slide" style="margin: 0pt auto; padding: 0px; border-width: 0px; border-style: initial; list-style: none; display: block;">
但是,当输入端的驱动较小,导致输入的transition时间较大,而输出端负载较小,导致输出transition较快的时候,就会出现(b)的情况,计算得出的delay为负值。这种情况存在也是合理正常的。 明确两个时间的概念,一个是仿真的时间精度,比如`timescale 1ns/1ps,意思是说,仿真的时间单位是1ns,精度是1ps,在程序中,可以控制的最小时间是1e-3,即1ps。 另一个是simulator的delta时间,delta=0. Delta时间实际上是决定了在某一时间段内,simulator允许的状态变化的最大数,并没有实际的时间概念。模拟器需要为仿真的程序建立一个状态机,每一个状态可以理解为一个模拟器为模拟仿真程序所维持的一个变量,在某一个特定时刻模拟器只允许一定数目的并行的、互相independent的状态,然后经过delta时间之后,模拟器经过计算,决定出下一个状态,因此,下一个状态必定是与之前的某一个状态dependent的。 因此,模拟器的工作过程可以描述为,若假定delta决定的仿真粒度为100个状态变化,初始时刻,所有状态已经建立,然后每当100个状态发生变化,模拟器推进一个delta时间,根据当前系统的当前状态,决定下一步的操作。然后再经过100个状态,模拟器再开始停下来,判断当前状态,决定下一步的操作。因此,如果delta越小,模拟器需要的计算量就越大,因为每隔几个状态就要判断一下;如果delta较大,就会丧失精度,某些dependent的状态会被当成一个状态,中间的状态转换过程就无法得到。 因此,为什么模拟器会报出negative delay的警告,并自动将其设置为0呢? 这是因为,两个事件1和2,事件2依赖于1,可以理解为状态1的下一个状态。因此,模拟器经过了状态1后,经过delta时间,才能到达状态2。可以,当模拟器到达状态2的时候发现,它的时间为0,意味着实际的电路行为是,先执行2,后执行1,这样,模拟器就会很迷惑。如果没有反馈功能,模拟器就只能将负的delay设置为0。 |