嵌入式技术
静态时序分析经常会遇到基于锁存器(latch)的设计从而引入了一个概念称为“Time Borrowing”。这篇文章向大家解释了什么是time borrowing,以及锁存器(latch)设计和时序报告中关于time borrowing的处理方式。
下面的时钟信号周期为10,占空比为50%:
同时我们引入一个简单的电路,如下所示:
为了更容易理解,我们假设每个触发器的建立时间和保持时间均为“0”。
同样假设时钟偏移和时钟延迟也为“0”。
F1在时刻0得到数据,F2在时刻10对数据进行了采样。
因此如果数据在时刻10之后到达F2,那么F2就不能采集到正确的数据。
同理,从F2传出的数据到达F3也需要10个时间单位,在下一个时钟沿的时候被采样。
现在我们用一个锁存器(latch)L2替代F2,锁存器的Gate也由同样的时钟信号驱动:
F1在时刻0发出数据:
数据会在时刻10之前到达锁存器的输入端,数据会在锁存器的D端口等待。
这与F2的效果非常相似。
但是如果数据在时刻10之后到达会发生什么呢?
在时刻10到15之间可以说L2是透明的。
因此即使数据在时刻10之后到达L2,L2也能够处理只要数据能够在时刻15之前到达L2。
这意味着数据可以最多用15个时间单位到达锁存器,而使用触发器最多是10个时间单位。
举个例子,如果数据在时刻12到达L2,这意味着与触发器相比,锁存器提供了2个时间单位的优势。
在这个例子中L2最多能提供5个时间单位的优势。
现在让我们再来看一下L2到F3之间的路径。
数据在时刻12从L2传出,在时刻20被F3采样。
那么从L2到F3仅花费了8个时间单位。
在都是由触发器组成的电路中,第二段路径则需要10个时间单位。
这样看来这个电路少用了2个时间单位。
从本质上来说:
通往锁存器的路径多用了2个时间单位 因此,锁存器后面的路径必须在原来的基础上(10个时间单位)少用2个时间单位。我们可以这样来看,通往锁存器的路径向后面的路径“借用”了2个时间单位。
因此,通往锁存器的路径可以从后续的路径借用时间(相当于锁存器是透明的)。
时间借用的时间不需要全部都借。
实际借用的时间只需要满足路径时序要求的最小值(锁存器全部透明时为最大界限)。
以我们这个例子来说:
可以借用的时间单位为5个时间单位。 实际借用的时间为2个时间单位。 默认是10个时间单位,加上额外的2个时间单位,这段信号路径需要12ns能够满足时序要求。我们要注意到F1到F3这段路径仍然使用了20个时间单位,没用改变。
只是时间分布改变了。
感谢Catalin Baetoniu,在实际的时序设计中验证了这些概念。
作者:Sanjay Churiwala,赛灵思公司工具与方法学应用专家
全部0条评论
快来发表一下你的评论吧 !