一看就懂的建立时间和保持时间

目录

前言

首先

画波形图分析

练习


前言


建立时间(set up time)和保持时间(hold time)一直是面试中的必考题,因为一直都不是很清楚明白的理解这两个概念,故在本文中通过一系列的分析来彻底搞懂这两个概念,力求看一遍就能在面试过程中侃侃而谈,对答如流。


首先


先上定义(来自维基百科):

建立时间时钟事件发生之前数据信号应保持稳定的最短时间,以便时钟能够可靠地对数据进行采样。 这适用于触发器的同步输入信号。

保持时间时钟事件发生之后数据信号应保持稳定的最短时间,以便时钟能够可靠地对数据进行采样。 这适用于触发器的同步输入信号。


这里面的时钟事件可以理解为:时钟信号的边沿触发事件。而同步设计是芯片设计的基础,如不考虑同步,那这些都将失去意义。接下来我们分析这两句话的意思。

都说建立时间和保持时间是触发器的固有属性,那么为什么会出现建立时间和保持时间这个概念,我的理解是因为在集成电路中存在着大量的基于同步设计的触发器,而由于时钟的漂移,和时钟源与每个触发器的远近不同所以抵达每个触发器的时间不同。由于这两个原因为同步设计造成了巨大的障碍,因此我们引入建立时间和保持时间这个概念,将电路中的不稳定因素全部考虑进去以确保设计的稳定性、可靠性。

上图是一个非常常见的两个触发器用组合逻辑相连的数据传输模型。我们知道,在真实电路中数据传输时处处都有延迟,在上图中,触发器在接收到有效的clk信号后,将数据从D端传输到Q端的所需要的时间为Tco。数据经过中间的组合逻辑时所需要的时间是Tcomb,在下一个clk到来之后,又需要一个Tco的时间才能将D2数据从D端传至Q端,经过这么长的路程,我们应该确保Q2还是最初的D1那一笔数据。

画波形图分析

接下来画波形图来直观的看到上面这么多延迟。

逐步分析这个波形图,在第一个clk上升沿的时候,将D1的数据传递到了Q1,触发器的延迟为Tco,接下来经过组合逻辑Tcomb,Q1变为了D2,随后在第二个clk上升沿,将D2的数据传递到了Q2。

回到最上面的定义,建立时间和保持时间的区别就在于处在时钟事件的前后,在波形图中,红色虚线就代表着时钟事件,而时钟事件之前,由于信号传输过程中的延迟,建立时间Tsu=Tclk - Tco - Tcomb保持时间Th=Tco + Tcomb。由上述公式我们可以推导出建立时间Tsu加上保持时间Th刚好等于一个Tclk。

由此可见,建立时间和保持时间并不是一个固定的数值,而是一种可以称之为裕量的存在。而且由于建立时间+保持时间等于一个clk周期,所以建立时间裕量越大那么保持时间裕量就越小,反之亦然。

那么在上述电路中,考虑到触发器延迟Tco的最大值和最小值,Tcomb的范围应该为:Th - Tco_max < Tcomb < Tclk - Tco_min - Tsu

但是一般触发器延迟不可控,我们只能去改变组合逻辑的大小来控制建立时间和保持时间,最常用的应用就是在两个触发器之间插缓存器(buffer)以此来满足保持时间的要求。

练习

下面我们来看一道计算题:

时钟周期为T,触发器D1的建立时间最大为T1max,最小为T1min。组合逻辑电路最大延迟为T2max,最小为T2min。问:触发器D2的建立时间T3和保持时间T4应满足什么条件?

通过上面公式和波形图都可以看到,计算第二个触发的建立时间和保持时间与第一个触发器没有关系。

本题默认触发器延迟为0,那么建立时间的最大值就应该是T3max = T - T2min ,所以T3 < T - T2min ;

保持时间的最大值就是T2max,所以T4 < T2max;

 

<think>嗯,用户问为什么在建立时间要设置多周期约束,之前我给的SDC约束里用了set_multicycle_path -setup 2。用户可能不太明白为什么需要这样做,尤其是在双沿采样的场景下。我需要仔细解释清楚,确保他们理解多周期约束的作用背后的时序分析原理。 首先,用户可能对多周期路径的概念不太熟悉。常规情况下,建立时间检查默认在每个时钟沿进行次,比如单沿采样时,每个时钟周期检查次。但双沿采样的话,数据速率翻倍,每个时钟周期有两个采样点,导致有效的数据窗口实际上只有半个周期。这时候,如果还按照默认的单周期检查,时序工具可能会误判,因为数据在两个边沿都需要满足建立保持时间,但实际上数据在两个边沿之间应该允许更长的路径延迟。 我需要解释清楚,双沿采样导致数据有效周期减半,而工具默认的检查是基于单周期的。因此,通过设置多周期约束,告诉工具建立时间检查可以跨两个时钟周期,这样就不会错误地认为路径必须在半个周期内完成,从而避免过紧的约束。同时,保持时间的多周期设置也需要调整,因为默认的保持时间检查可能基于前个周期的数据,而双沿采样需要调整到正确的边沿。 另外,用户提到保持时间没有要求,可能需要注意即使保持时间未指定,工具仍然会有默认检查,所以需要明确多周期约束对保持时间的影响,确保用户明白hold检查是如何被调整的,避免潜在的时序问题。 可能还需要用例子来说明,比如正常情况下,单周期的话,建立时间检查在下个时钟沿,而双沿采样下,数据需要在上升沿下降沿都被采样,所以数据需要保持更长时间的有效,多周期约束扩展了建立时间的检查窗口,让工具知道数据可以多等个周期再被采样,这样就不会误报建立时间违规。 需要确保语言通俗易,避免过多术语,结合具体场景解释。可能用户是刚开始学习时序约束的工程师或者学生,需要从基础概念入手,逐步引导他们理解多周期约束的必要性。</think>好的!这个问题需要结合**双沿采样(Dual-Edge Sampling)**的特性**时序分析的基本原理**来理解。以下是逐步解释: --- ### **1. 默认时序检查的局限性** 在常规单沿采样(如仅上升沿采样)时,时序分析工具默认: - **建立时间检查(Setup Check)**:数据需在 **下个时钟沿** 前稳定(即满足 `tsu`)。 - **保持时间检查(Hold Check)**:数据需在 **当前时钟沿后** 保持稳定(即满足 `thd`)。 例如,时钟周期为5ns时,数据路径必须在5ns内完成(从当前上升沿到下个上升沿)。 --- ### **2. 双沿采样的特殊性** 双沿采样(上升沿下降沿均有效)时: - **有效数据周期缩短为2.5ns**(即5ns/2)。 - 工具默认仍会按 **单周期(5ns)** 检查时序,导致约束过紧(误认为数据必须在2.5ns内稳定)。 例如: - 数据在 **上升沿** 采样后,下有效采样点是 **下降沿**(间隔2.5ns)。 - 若工具按5ns周期检查,会错误地认为数据有5ns时间稳定,但实际上仅有2.5ns! --- ### **3. 多周期约束的作用** 通过 `set_multicycle_path`,明确告诉时序工具: - **建立时间检查窗口需扩展**:数据实际有效窗口是 **两个时钟周期(5ns × 2 = 10ns)**,而非默认的单周期(5ns)。 - **保持时间检查需对齐到正确边沿**:保持时间检查需基于 **半个周期(2.5ns)** 的间隔。 #### **关键代码解释** ```tcl set_multicycle_path -setup 2 -from [get_ports data] -to [get_clocks clk] ``` - `-setup 2`:建立时间检查扩展到2个时钟周期(10ns)。 这表示:数据从当前采样边沿(如上升沿)到下个同类型边沿(如下个上升沿)之间有10ns的稳定时间窗口。 ```tcl set_multicycle_path -hold 1 -from [get_ports data] -to [get_clocks clk] ``` - `-hold 1`:保持时间检查仍基于1个时钟周期(5ns)。 这表示:数据需在当前采样边沿(如上升沿)后保持稳定至少5ns(覆盖到下个下降沿的保持时间检查)。 --- ### **4. 双沿采样的时序示意图** 假设时钟周期为5ns,双沿采样时序如下: ``` 时钟边沿: 上升沿(0ns) 下降沿(2.5ns) 上升沿(5ns) 下降沿(7.5ns) 数据窗口: |-----数据A-----|-----数据B-----|-----数据C-----|-----数据D-----| ``` - 数据A在上升沿(0ns)被采样,数据B在下降沿(2.5ns)被采样。 - **数据A的稳定窗口**:从0ns到5ns(下上升沿),实际允许路径延迟为5ns(而非2.5ns)。 - **数据B的稳定窗口**:从2.5ns到7.5ns(下下降沿),同样允许路径延迟5ns。 **如果不设置多周期约束**:工具会误认为数据必须在2.5ns内稳定,导致时序违例误报! --- ### **5. 总结:为什么需要多周期约束?** - **修正工具默认的检查窗口**:双沿采样的有效数据周期是单周期的半,需扩展建立时间检查到2个周期。 - **避免过紧约束**:若不设置多周期约束,工具会要求数据在2.5ns内稳定,而实际允许5ns。 - **对齐保持时间检查**:确保保持时间检查基于正确的边沿间隔(如下降沿到上升沿)。 --- ### **附加思考** 如果保持时间(`thd`)有要求,应如何约束? 示例:若 `thd = 0.5ns`,需额外设置: ```tcl set_multicycle_path -hold 1 -from [get_ports data] -to [get_clocks clk] ``` 工具会自动对齐到下降沿到上升沿的间隔(2.5ns),并检查是否满足 `thd`。 希望这样解释能更清晰!如果还有疑问,欢迎继续提问 😊
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值