何为裕量?
裕量,英文名称叫做“Slack”。我们在Vivado实现后的报告中常常能看到这样一栏:
因为都是缩写,所以我们来解释一下前四栏的含义:
- WNS,即Worst Negative Slack,最差负时序裕量。这个表征了我们设计的电路中,最差的那条路径的时序裕量,如果为正,则说明满足建立时间要求,如果为负,则说明建立时间时序出现问题。
- TNS,即Total Negative Slack,也就是所有负时序裕量路径之和,数字的含义和上面是一样的。
- WHS,即Worst Hold Slack,代表最差保持时序裕量 ,为正则说明满足保持时间要求,为负则说明保持时序出现问题。
- THS, 即Total Hold Slack,也就是总的负保持时序裕量路径之和。
上面我们一直提到了一个词:裕量。究竟如何理解“裕量”这个词呢?所谓的裕量字面上理解就是多出来的量,之前的文章中我们讨论过建立时间和保持时间的概念。
对于建立时间,我们要求信号在建立时间之前就要稳定下来,至于具体提前了多久,那就得用“建立裕量”WNS和TNS进行衡量。
对于保持时间,我们要求信号要在保持时间之后才可以变换,至于延后了多久,那就得用“保持裕量” WHS,THS进行衡量。
多说一嘴,建立时间要满足时序路径中最慢的信号也要符合要求,因此称为最大分析。保持时间要保证时序路径中最快的信号也要满足要求(不能在保持时间之前变换),因此称为最小分析。
在理解了裕量的概念之后,我们可以开始研究“裕量”究竟应该怎么进行计算了。
建立时间裕量
在图示的时序路径中,Clock是时钟源的时钟,由于布局布线等因素,该时钟上升沿到达reg1的时钟端口Clock1时会有一小段延时,Clock1的上升沿也被我们称为启动沿。
从启动沿到寄存器Q输出数据还有一小段延时,即,并且数据经过寄存器间的数据通路时还会有一小段延时,即。因此我们可以得出:
数据到达时间 =时钟基准(0ns)+ (3.2ns)++(0.8ns) = 4ns
同理,很容易计算数据被捕获的时间边界为:
数据锁存时间 = 时钟基准2(10ns)+(2ns) - 建立时间(1.4ns)= 10.6ns
因此可以知道,
建立时间余量 = 数据锁存时间 - 数据到达时间 = 6.6ns(即图中蓝色部分)
只要建立时间裕量是正值,则说明我们的设计是符合要求的,如果为负值则说明不满足建立时间的要求,容易产生亚稳态等问题。
保持时间裕量
保持裕量的计算和建立裕量差不多,其核心为:
保持时间裕量 = 数据保持时间 - 数据锁存时间
对于数据保持时间:
数据保持时间 = 数据到达时间(4ns) + 数据周期时间(Sig In = 10ns) = 14ns
对于数据锁存时间:
数据锁存时间 = 时钟基准2(10ns)+(2ns) + 保持时间(1.4ns)= 13.4ns
因此,数据的保持时间裕量:
保持时间裕量 = 数据保持时间 - 数据锁存时间 = 0.6ns
如果保持时间裕量为负,则说明数据在保持时间之前就发生了改变,因此将不满足保持时间的要求。
学习计算裕量的目的
其实,在开发过程中并不需要我们去手工计算裕量,因为EDA软件将帮助我们计算。那为什么我们还要学习裕量的计算呢?其实这就是一种“从哪里来,到哪里去”的道理,我们心中要明白,这个时序裕量是怎么计算的,当我们遇到不满足裕量要求的情况时,我们能明确地知道问题的出处,以及解决问题的方法。