数字IC设计时序之建立、保持时间


一、Setup time/Hold time(建立、保持时间)

  • Setup time(建立时间Tsu):在时钟沿(上升沿)到来之前,数据所需保持不变的最小时间

    setup

  • Hold time(保持时间Th):在时钟沿(上升沿)到来之后,数据所需保持不变的最小时间

    hold

  • 建立与保持时间是确保在时钟沿(上升沿)对数据采样时确保数据的正确性,如果在这段时间内数据没能保持不变,则称为建立、保持时间违例(Setup time/Hold time Violation),这样会导致在时钟沿(上升沿)采样的数据可能会产生亚稳态,从而导致后面RTL设计的一系列错误。至于如何解决建立与保持时间违例可以参考第四节。

    setup_hold

二、为什么会有Setup time(建立时间)、Hold time(保持时间)要求

  要说起建立与保持时间,这就要从触发器说起。因为触发器是数字电路中一个最基本的单元,而建立与保持时间正是触发器中的一个概念。构成一个边沿触发器最普通的方法是采用主从结构,如下所示:

1、主从结构边沿触发寄存器

寄存器是由一个负锁存器(主级)串联一个正锁存器(从级)构成,下图采用的是多路开关型锁存器。

  1. 在时钟的低电平阶段 ( C L K = 0 ) (CLK=0) (CLK=0),主级相当于一条导线,输入 D D D被直接传送到主级的输出端 Q M Q_M QM,在此阶段,从级一直处于维持状态,通过反馈保护它原来的值。
  2. 在时钟的上升沿期间,主级停止对输入采样,而从级开始采样。
  3. 在时钟高电平阶段 ( C L K = 1 ) (CLK=1) (CLK=1),从级对主级的输出 Q M Q_M QM采样,而主级处于维持状态(即输出 Q M Q_M QM由反馈保护它的值),由于 Q M Q_M QM在时钟的高电平阶段保持不变,因此输出 Q Q Q每周期只翻转一次。

由于Q的值就是时钟上升沿之前的D值,因此具有正沿触发效应。负沿触发寄存器同理,只需简单改变下正负锁存器的位置就可以。边沿触发寄存器时序图如2所示:

主从触发器

2、边沿触发寄存器时序图

时序

3、晶体管级主从结构边沿触发寄存器

下图是个完整的主从正沿触发寄存器晶体管实现电路,接下来就从内部结构讨论第一节的传输是如何完成的。

  1. 在时钟的低电平阶段 ( C L K = 0 ) (CLK=0) (CLK=0) T 1 T_1 T1导通 T 2 T_2 T2关断,输入 D D D被采样到节点 Q M Q_M QM上。在此期间, T 3 T_3 T3 T 4 T_4 T4分别关断和导通。交叉耦合的反向器( I 5 I_5 I5 I 6 I_6 I6)保持从锁存器的状态。
  2. 在时钟上升到高电平时 ( C L K = 1 ) (CLK=1) (CLK=1),主级停止对输入采样并进入维持状态, T 1 T_1 T1关断 T 2 T_2 T2导通,交叉耦合的反相器 I 2 I_2 I2 I 3 I_3 I3保持 Q M Q_M QM状态。同时, T 3 T_3 T3导通 T 4 T_4 T4关断, Q M Q_M QM被采样到输出 Q Q Q上。

晶体管

4、多路开关型主从寄存器的时序特性

  我们假设在理想情况下,上图电路中每个反相器传播延时为 t p d − i n v t_{pd_-inv} tpdinv,传输门的传播延迟为 t p d − t x t_{pd_-tx} tpdtx。同时假设污染延时(contamination delay)为0,而且CLK端的反相器的延时也为0。

  1. 建立时间是输入 D D D在时钟上升沿之前必须有效的时间,就相等价于在时钟上升沿之前输入 D D D必须稳定多长时间才能使 Q M Q_M QM采样的值是可靠的?对于上面的多路开关型寄存器,输入 D D D在时钟上升沿之前必须传播经过 I 1 I_1 I1 I 2 I_2 I2 I 3 I_3 I3 T 1 T_1 T1。这就保证了在传输门 T 2 T_2 T2两端节点电压相等,否则交叉耦合反相器( I 2 I_2 I2 I 3 I_3 I3)就可能停在一个不确定的值上。建立时间到这里就相当于保持 T 2 T_2 T2输入与输出相同的最短时间。
  2. 由上图电路我们可知,最短时间为 T 1 T_1 T1导通时, D D D首先经过 I 1 I_1 I1 T 1 T_1 T1,由于此时 T 2 T_2 T2 T 3 T_3 T3处于关断状态,所以此时数据首先到达传输门 T 2 T_2 T2的输出端,另一边经过 I 3 I_3 I3 I 2 I_2 I2到达传输门 T 2 T_2 T2的输入端,当数据这个分支到达传输门 T 2 T_2 T2的输入端的时候,此时 Q M Q_M QM的值已经保持稳定,时钟可以翻转进入从级数据传输。所以建立时间即数据输入 D D D在时钟翻转前保持不变的最小时间就必须大于等于 3 ∗ t p d − i n v + t p d − t x 3*t_{pd_-inv}+t_{pd_-tx} 3tpdinv+tpdtx
  3. 传播延时是 Q M Q_M QM数据传播至输出 Q Q Q所需时间,由于在建立时间包含了 I 3 I_3 I3 I 2 I_2 I2的延时,则 I 4 I_4 I4的输出在时钟上升沿之前已经有效,所以传播延时 t c o t_{co} tco就是数据通过 T 3 T_3 T3 I 6 I_6 I6的延时 ( t c o = t p d − t x + t p d − i n v ) (t_{co}=t_{pd_-tx}+t_{pd_-inv}) (tco=tpdtx+tpdinv)
  4. 保持时间表示时钟上升沿之后输入必须保持稳定的时间。在上面电路中,当时钟为高电平时,传输门 T 1 T_1 T1关断。由于 D D D输入 C L K CLK CLK在到达 T 1 T_1 T1之前都要通过反相器,所以在时钟变为上升沿之后输入上的任何变化都不会影响输出,所以保持时间为0。

三、建立、保持时间之时序约束

  上节分析了理想情况下建立与保持时间的时序约束要求,但实际情况下保持时间不为0,建立与保持时间还需要考虑时钟的偏移、组合逻辑时延等。

1、时序模型

  典型的时序模型如下图所示,一个完整的时序路径包括源时钟路径、数据路径和目的时钟路径,也可以表示触发器+组合逻辑+触发器模型。
  这里我们将数据通过组合逻辑电路的延时称为 T c o m b T_{comb} Tcomb D D D触发器的传播延时如上节一样称为 T c o T_{co} Tco,时钟偏移(目的时钟路径相对于源时钟路径之间的偏移)为 T s k e w T_{skew} Tskew,时钟周期为 T c l k T_{clk} Tclk

模型图

lu



时序图

xu



2、保持时间约束

  由上面的时序图可以看出,如果没有时钟偏移,保持时间约束为 T c o + T c o m b > T h d T_{co}+T_{comb}>T_{hd} Tco+Tcomb>Thd,但是有了时钟偏移,原来以 c l k clk clk时钟上升沿为基准的变为了以 c l k s k e w clk_skew clkskew为基准,缩短了其保持时间约束,则这时约束应该更新为 T c o + T c o m b − T s k e w > T h d T_{co}+T_{comb}-T_{skew}>T_{hd} Tco+TcombTskew>Thd

3、建立时间约束

  建立时间约束则就可以根据时钟周期来建立为 T c l k − ( T c o + T c o m b − T s k e w ) > T s u T_{clk}-(T_{co}+T_{comb}-T_{skew})>T_{su} Tclk(Tco+TcombTskew)>Tsu,即 T c l k + T s k e w − T c o − T c o m b > T s u T_{clk}+T_{skew}-T_{co}-T_{comb}>T_{su} Tclk+TskewTcoTcomb>Tsu

四、如何消除建立、保持时间违例(Setup time/Hold time Violation)

1、裕量Time Slack

  • 时间裕量包括建立时间裕量和保持时间裕量(setup slackhold slack)。从字面上理解,所谓“裕量”即富余的、多出的,即保持最低要求的建立时间或保持时间所多出的时间,那么“裕量”越多就意味着时序约束越宽松。
    如果Times Slack > 0 , 则电路能够正常被采样,否则不可以!

2、Setup Time Violation解决方法

  • Setup时间公式: T s e t u p s l a c k = T c l k + T s k e w − T c o − T c o m b − T s u T_{setupslack} = T_{clk} + T_{skew} - T_{co} - T_{comb} - T_{su} Tsetupslack=Tclk+TskewTcoTcombTsu。其中 T s e t u p s l a c k T_{setupslack} Tsetupslack是建立时间裕量。如果出现了Setup Time Violation,也就是说 T s e t u p s l a c k T_{setupslack} Tsetupslack为负数了,那么可以考虑:
    1、增大时钟周期 T c l k T_{clk} Tclk,即降低时钟频率
    2、减小传输延迟 T c o T_{co} Tco,即更换更快的器件,使用更先进的器件库
    3、减小 T T c o m b T_{Tcomb} TTcomb,即减小组合逻辑延时,主要是关键路径的处理。包括插入寄存器使其流水、重定时等。
    4、增大时钟偏移 T s k e w T_{skew} Tskew。如果时钟偏移 T s k e w T_{skew} Tskew为正,对setup time是有利的,对hold time是有害。

3、Hold Time Violation解决方法

  • Hold Time公式: T h o l d s l a c k = T c o + T c o m b − T s k e w − T h d T_{holdslack} = T_{co} + T_{comb} - T_{skew} - T_{hd} Tholdslack=Tco+TcombTskewThd。其中 T h o l d s l a c k T_{holdslack} Tholdslack是保持时间裕量。如果出现了Hold Time Violation,也就是说 T h o l d s l a c k T_{holdslack} Tholdslack为负数了,那么可以考虑:
    1、增加 T c o T_{co} Tco延迟,增大数据的延迟具体表现为插入BufferXilinx还提到可以插入LUT1增加延迟等方式来修复;
    2、增大 T c o m b T_{comb} Tcomb,即增大组合逻辑延时,主要是关键路径的处理。可以增加Buffer,或者后端布局布线拉长布线以增加延时。
    3、减小时钟偏移 T s k e w T_{skew} Tskew。如果时钟偏移 T s k e w T_{skew} Tskew为正,对setup time是有利的,对hold time是有害。

五、Verilog时序检查

1、setup 建立时间检查

  语法格式:$setup(data_event, reference_event, limit);

  例如:$setup(data, posedge clk, tSU);表示在clk上升沿到来之前的tSU时间段内,检查data的有效时间是否在这段时间内,如果落在了上升沿到来前的tSU时间窗口内,则不满足建立时间要求,就会产生建立时间冲突。

2、hold 保持时间检查

  语法格式:$hold(reference_event, data_event, limit);

  例如:$hold(posedge clk, data, tHLD);表示在clk上升沿到来之后的tHLD时间段内,检查data的有效时间是否在这段时间内,如果落在了上升沿到来后的tHLD时间窗口内,则不满足保持时间要求,就会产生保持时间冲突。

3、setup/hold 建立、保持时间检查

  语法格式:$setuphold(reference_event, data_event, hold_limit, setup_limit);

  例如:$setuphold(posedge clk, data, tSU, tHLD);等价于$setup(data, posedge clk, tSU);$hold(posedge clk, data, tHLD);

4、width 脉冲宽度检查

  语法格式:$width(reference_event, limit);

  例如:$width(posedge clk, 10);表示检查clk的高电平持续时间是否大于10个时间单位。

5、skew 时钟歪斜检查

  语法格式:$skew(reference_event, data_event, limit);

  例如:$skew(posedge clk1, posedge clk2, 10);表示检查clk1与clk2之间的时钟偏移是否超过10个时间单位。

6、period 时钟周期检查

  语法格式:$period(reference_event, limit);

  例如:$period(posedge clk, 4);表示检查clk的周期是否超过4个时间单位。

7、recovery 复位信号的恢复时间检查

  语法格式:$recovery(reference_event, data_event, limit);

  例如:$recovery(posedge rst_n, posedge clk, 4);表示检查在时钟clk上升沿来临之前,复位信号rst_n恢复到非复位状态的需求时间是否大于4个时间单位,确保时钟上升沿时有效复位到非复位状态。

8、removal 复位信号的移除时间检查

  语法格式:$removal(reference_event, data_event, limit);

  例如:$removal(posedge rst_n, posedge clk, 3);表示检查在时钟clk上升沿到来之后,复位信号rst_n恢复到非复位状态还需要保持的时间是否大于3个时间单位。

9、recrem 复位信号的恢复/移除时间检查

  语法格式:$recrem(reference_event, data_event, recovery_limit, removal_limit);

  例如:$recrem(posedge rst_n, posedge clk, recovery_limit, removal_limit);等价于$recovery(posedge rst_n, posedge clk, recovery_limit);$removal(posedge rst_n, posedge clk, removal_limit);

六、参考

[1]《Xilinx Vivado 数字设计权威指南》
[2]《数字集成电路第二版》
[3]《猫叔FPGA时序约束教程》

如有错误,欢迎评论指出!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340