Dinglei_hello · 2021年12月06日

从寄存器结构上理解setup和hold time

在数字电路的世界里,只有“0”和“1”。但是在实际电路中,信号的变化并不是一瞬间的事情,而是会经过一个上升或者下降时间,如下图。所以人们通常会将小于VDD*30%的电平定义为“0”;同时将大于VDD*70%的电平定义为“1”;而在这两者之间的电平属于不确定区。换句话说,在这个区域内的电平有可能是“0“,也有可能是“1”。

aijishu_soc1.png     

寄存器是由两级锁存器串联而成,如下图。当clock为低电平时,T1和T4打开,T2和T3关闭,此时D只能传到B处,Q端输出的是前一个周期锁存到的值。而当clock由低变高(上升沿)时,T1和T4关闭,T2和T3打开,此时前面一级锁存器将锁存到的D值传到后一级锁存器,并通过Q端输出。所以,在上升沿处,如果D还处于变化状态,那就有可能采到它的不确定区,从而导致寄存器Q端输出不确定态,也就是我们所说的亚稳态。

aijishu_soc2.png

所以为了保证时序逻辑采样的正确性,就需要数据在时钟沿前后有一个稳定的窗口。那么这个窗口需要多大呢?这时就需要引入setup/hold time的概念:

aijishu_soc3.png

 

setup time:时钟沿到来之前,数据必须保持稳定的最小时间。
hold time:时钟沿到来之后,数据必须保持稳定的最小时间。

setup/hold time的大小跟器件有关,是器件的特定属性。我们可以在foundry提供的lib中找到相关的值,下图是某工艺库内锁存器D端的setup/hold查找表,其中蓝色方框内为setup time,而绿色方框内为hold time。

aijishu_soc4.png

原文链接:IC小迷弟
作者:ChaucerG

推荐阅读

更多嵌入式AI技术相关内容请关注嵌入式AI专栏。
推荐阅读
关注数
10966
内容数
1216
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息