STA新视角之Setup Time和Hold Time

1、register-to-register模型

 图表 1‑1 register-to-register模型

图表 1‑1是一个常见的register-to-register的模型。CLK是源寄存器(Source)和目的寄存器(Destination)的时钟源头,在SDC中一般用create_clock/create_generated_clock定义。

A点表示CLK的出口,B点表示源寄存器的CK端,C表示目的寄存器的CK端,D表示源寄存器的Q端,E表示目的寄存器的D端。在实际的电路实现(FPGA/ASIC)中,因为布局布线产生的线延时和组合逻辑产生的CELL延时,让电路实现起来不那么理想。

表格 1‑1延时参数

延时参数

含义

图中位置

Tck1

时钟定义点到源寄存器CK端的时间

A -> B

Tck2

时钟定义点到目的寄存器CK端的时间

A -> C

Tco

源寄存器时钟上升沿到达到Q端输出的时间,由寄存器本身参数决定

B -> D

Td

目的寄存器Q端到源寄存器D端的时间

D -> E

         实际数字实现中波形如下:

图表 1‑2 register-to-register波形图

D0`指的是D0经过了组合逻辑之后的单bit数据。数字实现中,为了保证目的寄存器可以成功采样源寄存器发送的数据,用setup time和hold time来判断是否满足时序要求。

图表 1‑3 DFF采样正确要求

         Setup time指的是在时钟触发寄存器采样(上升沿或下降沿,取决于寄存器)数据必须稳定保持的最小时间,以保证数据能被时钟正确的采样。

         Hold Time指的是在时钟触发寄存器采样(上升沿或下降沿,取决于寄存器)数据必须稳定保持的最小时间,以保证数据能被时钟正确的采样。

         Launch edge指的是源寄存器CK端发送数据的时刻,Capture edge指的是目的寄存器CK端接收数据的时刻,用于理想情况下(时钟和数据都没有延时)。Launch edge在分析setup和hold的时候是不一样的,在下文中解析。


2、Setup Time

图表 2‑1 Setup Time

Setup Relationship是理想时钟下launch edge和capture edge之间setup关系。在图表 2‑1中源寄存器和目的寄存器用同一个源时钟且上升沿触发,setup relationship就是CLK的时钟周期。例如CLK为100MHz,setup relationship为10ns。

图表 2‑1的各种参数含义见表格 1‑1。

以时钟源CLK作为起点,数据的实际到达目的寄存器D端的时间(Data Arrival Time)为:

Data Arrival Time(Setup)= launch edge time + source clock path delay + data path delay          =Tck1+Tco+Td

假定launch edge time是在0ns时刻,capture edge time就是在Tclk时刻,Tclk表示时钟周期,因为capture edge time-launch edge time=setup relationship=Tclk。

以时钟源CLK作为起点,数据实际被采样的时间(Data Require Time)为:

Data Require Time(Setup)= capture edge time + destination clock path delay – clock uncertainty-Destination Setup Time   =Tck2+Tclk-Tuncertainty-Tsetup  

为了满足目的寄存器的时序要求,数据的实际到达目的寄存器D端的时间(Data Arrival Time)必须比数据实际被采样的时间(Data Require Time)早Tsetup以上,Tsetup由寄存器库的特性决定。因此Setup的裕量(slack)为:

Setup Slack=Data Require Time(Setup)-Data Arrival Time(Setup)= Tck2+Tclk-Tuncertainty-Tck1-Tco-Td-Tsetup= Tskew +Tclk-Tuncertainty-Tco-Td-Tsetup 

Tck2-Tck1称为时钟偏移(skew),用Tskew表示。Setup Slack必须大于0才能满足目的寄存器的setup time要求。

Tuncertainty包括时钟抖动(jitter)和人为设定的裕量(margain)。时钟抖动和时钟自身质量以及传输过程有关。

如果Setup Time有了violation,可以采取的措施有:1)优化DFF间的组合逻辑,使其路径减少(减少Td);2)在组合逻辑中再加一个寄存器,将组合逻辑变成2条路径(减少Td);3)将目的寄存器的时钟通过增加线长度和插入clk buffer往后延(增加Tskew);4)降频(增加Tclk)。

         在ASIC中,降频是最后的手段,能不采用尽量不用,说明设计已经不满足规格的要求。如果是工艺的原因(太落后),可以考虑降低signoff的频率要求,在实际产品中抬压提频并大规模测试达到稳定的效果。措施2是俗称的“打拍”,从设计端解决时序问题,如果不影响功能和性能的话没有副作用,比较考验数字设计功底。措施3是在后端(PR工具)处理,缺点是会影响hold time。在hold slack比较大的时候(大于|setup slack|)时可以交给后端处理。

3、Hold Time

图表 3‑1 Hold Time

Hold Relationship是理想时钟下launch edge和capture edge之间hold关系。在图表1-2中源寄存器和目的寄存器用同一个源时钟且上升沿触发,hold relationship就是为0。

图表 3‑1的各种参数含义见表格 1‑1。

将图表2-1的后半段波形补全,如图表4-1,以时钟源CLK作为起点,数据的实际到达目的寄存器D端的时间(Data Arrival Time)为:

Data Arrival Time(Hold)= launch edge time + source clock path delay + data path delay=Tck1+  Tco+Td

假定launch edge time是在0ns时刻,capture edge time就是在0ns时刻因为capture edge time-launch edge time=hold relationship=0。

与setup time的一样,区别是setup time中的Data Arrival Time指的是capture edge上一个cycle的,hold time中的Data Arrival Time指的是capture edge同一个cycle的,但是值相等。

以时钟源CLK作为起点,数据实际被采样的时间(Data Require Time)为(见图表1-2):

Data Require Time(Hold)= capture edge time + destination clock path delay+clock uncertainty+destination hold time = Tck2+Tuncertainty+Thold 

和Tsetup一样,Thold由寄存器库的特性决定。为了满足目的寄存器的时序要求,新数据的实际到达目的寄存器D端的时间(Data Arrival Time)必须比旧数据实际被采样的时间(Data Require Time)晚Thold以上

Hold Slack=Data Arrival Time(Hold)-Data Require Time(Hold)=Tck1+  Tco+Td- Tck2-Tuncertainty-Thold=Td+Tco-Tskew-Tuncertainty-Thold  

Hold Slack必须大于0才能满足目的寄存器的hold time要求。

Hold Time的违例(violation)的处理办法为:1)增加源寄存器Q端到目的寄存器D端的延时;2)减少时钟偏移(skew)。但是这两种方法都是以牺牲setup slack作为代价。Hold Slack与Tclk(时钟周期)无关,无法通过降频/提频的方式收敛,因此signoff时不能降低hold的标准,宁可牺牲setup time导致正常工作频率低,否则电路无法工作(DFF采错数据)。

4、其他说明

图表 2‑1和图表 3‑1中的Source.D的波形与实际的电路不一定符合,因为一个目的寄存器可能有很多个源寄存器,所有源寄存器都会对目的寄存器的D端产生影响。但是分析方法不变,每一条源寄存器到目的寄存器的setup time和hold time都满足才能满足时序要求,当然这部分工作EDA工具会帮我们完成,我们需要做的更多是在EDA工作report_timing时找出slack为负的路径,然后通过各种手段分析优化以达到设计的要求。

 

 

### 建立时间(Setup Time)与保持时间(Hold Time) 在数字电路设计中,**触发器**是实现时序逻辑的基本单元。为了确保数据能够被正确地锁存到触发器中,输入数据必须满足两个关键的时序约束条件:**建立时间(Setup Time)****保持时间(Hold Time)**。 #### 建立时间(Setup Time) 建立时间是指在时钟信号上升沿到来之前,数据信号必须稳定保持不变的时间长度。这是为了确保触发器能够在时钟边沿到来时正确采样并锁存数据。如果数据在建立时间窗口内发生变化,则可能导致触发器进入亚稳态,从而导致系统不稳定或功能错误[^1]。 - **作用**: - 确保数据在时钟边沿前足够稳定,以保证可靠捕获。 - 影响电路的最大工作频率,较长的建立时间限制了高频操作的可能性[^2]。 #### 保持时间(Hold Time) 保持时间是指在时钟信号上升沿之后,数据信号必须继续稳定保持不变的时间长度。该时间确保了触发器内部的锁存机制有足够的时间完成数据的存储过程。如果数据在保持时间内发生改变,同样会导致采样失败或状态不确定[^1]。 - **作用**: - 防止时钟边沿后数据立即变化,影响触发器的锁存稳定性。 - 在高速设计中,保持时间不足可能成为时序收敛的关键瓶颈之一[^2]。 #### Setup TimeHold Time 的区别 | 特性 | Setup Time | Hold Time | |------------------|---------------------------------------|----------------------------------------| | 定义 | 时钟边沿前数据需稳定的最短时间 | 时钟边沿后数据需稳定的最短时间 | | 时间位置 | 发生在时钟边沿之前 | 发生在时钟边沿之后 | | 对频率的影响 | 直接影响最大时钟频率 | 不直接影响频率,但影响设计稳定性 | | 违背后果 | 数据未准备好,触发器无法正确采样 | 数据过早改变,导致锁存失败或亚稳态 | #### 数字电路设计中的作用 在同步数字系统中,建立时间保持时间共同构成了触发器的关键时序约束条件。一个健壮的设计必须同时满足这两个时间要求,才能保证系统的功能正确性稳定性。它们决定了信号路径上的延迟是否合理,并最终影响整个设计的最高运行频率。 - 设计人员通过静态时序分析(Static Timing Analysis, STA)来检查所有路径是否满足建立时间保持时间要求。 - 若不满足时序约束,可以通过插入缓冲器、调整逻辑层级、优化布局布线等方式进行修复。 ```verilog // 示例:基本D触发器的行为描述 module dff ( input clk, input rst_n, input d, output reg q ); always @(posedge clk or negedge rst_n) begin if (!rst_n) q <= 1'b0; else q <= d; // 此处隐含了setuphold时间的要求 end endmodule ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值