数字IC之静态时序分析

1.时序路径与分析方法

(1)时序路径
按照不同的输入输出,时序路径可以划分为以下四种:
.模块外部输入-第一级寄存器输入
.寄存器-寄存器
.最后一级寄存器-模块外部输出
.模块外部输入-组合逻辑-模块外部输出
其中以第二种,寄存器间的时序路径最为常用。
在这里插入图片描述
(2)时序分析方法
动态时序:布局布线后将门延迟、布线延迟反标于门级网表仿真,输入测试向量,以不同的testcase检查是否存在时序违例(violation);
静态时序STA:无输入,将电路划分为每一条寄存器之间的时序路径,并使用穷举法,寻找最大、最小延时路径,以确定是否存在时序违例。

2.寄存器级时序分析

(1)RTL级设计,就是数据运算结果在寄存器之间传输。因此以寄存器为基本模型进行时序分析。如果一条路径上级数多,延时大,也可以插入寄存器对其进行切割,其思想类似于流水线。
(2)一个典型的D触发器,包括时钟端、数据端、复位端、输出端。在时序上可以划分为同步逻辑和异步逻辑。
在这里插入图片描述

同步逻辑时序分析:检查D触发器的同步端口(数据输入端口)的变化是否满足建立时间要求(Setup)和保持时间要求(Hold);
异步逻辑时序分析:检查D触发器的异步端口(异步复位端口)的变化是否满足恢复时间要求(Recovery)和移除时间要求(Removal);
(3)为什么需要建立时间和保持时间
在这里插入图片描述
一个上升沿采样的寄存器(D触发器)的内部结构如上图,其主要构造是SR锁存器+与门。时钟作为与门的开关,clk=0时,第一级的与门开启,数据D经过非门-与门-或非门达到第一级输出Q0,经过门电路需要一段延迟时间,即建立时间;当上升沿到来,第一级与门未完全关闭时,此时若D端发生改变,则Q0也可能发生改变(D连接到与门,延迟主要是导线延迟,而clk经过非门-与门,门电路延迟大于导线),因此D在上升沿到来后还需要保持一段时间,即保持时间;clk=1,第一级与门关闭,第二级与门开启,数据Q0传输到Q,这段延迟时间为Tco(clk到output)。

3.建立时间与保持时间

(1)建立时间
数据从发送到接收采样需要一段时间,因此我们可以通过数据最快到达时间最慢的数据采样时间,来约束建立时间的范围
在这里插入图片描述

Data arrive time=launch edge+Tclka+Tco+Tdata
假设在launch edge时刻产生发送沿,经过源时钟路径延迟(Tclka)时钟信号到达寄存器A时钟端,再经过Tco数据D传输到Q,后经数据路径延迟Tdata(可能是组合逻辑,同样是逻辑门延迟+导线延迟),到达寄存器B的采样端D

Data required time=capture edge+Tclkb-clk uncertentity-Tsu
同样地,假设在capture edge产生上升沿,经过目的时钟路径延迟(Tclkb),寄存器B的时钟端才真正接收到该上升沿。由于时钟信号可能产生抖动,向前或向后移动,约束应采用最严苛的条件,假设时钟提前到来,因此减去clk uncertentity;由前面的分析,数据需要在上升沿到来之前一段时间先到来,因此减去Tsu

我们还需要一个量来衡量时序是否满足要求:建立时间裕量
Setup slack=required time-arrive time
=(capture edge-launch edge)+(Tclkb-Tclka)-uncertentity-Tdata-Tsu
=setup requiment+clk skew-uncertentity-Tco-Tlogic-Tnet-Tsu
若slack<0,则产生时序违例;slack>0则满足约束条件。
在这里插入图片描述

(2)保持时间
在这里插入图片描述

保证时钟捕获沿捕获到上一个发送的有效数据,避免数据未被采集就被刷新的情况
因此时序引擎约束的思路是,用捕获沿约束下一个发送沿,即当前数据被采样后,下一个数据才能被刷新,分别计算出捕获时间required time和下一次刷新时间arrival time

required time=capture edge+Tclkb+Th+clk uncertainty
先采样,后刷新,因此约束条件应该计算最迟的采样时间。采样沿capture edge经过目的时钟路径延时+Tclkb,在保持时间+Th后采样完成;同时需要考虑时钟抖动,本身可正可负,但我们要考虑最迟采样时间,因此+clk uncertainty。

arrival time=next launch edge+Tclka+Tco+Tdata
下一次数据刷新时间,与建立时间的传输时间表达式相同。

Holdup slack=arrival time-required time
=(next launch edge-capture edge)+(Tclka-Tclkb)+Tco+Tdata-Th-clk uncertainty
=Tco+Tdata-Holdup requirement-clk skew-Th-clk uncertainty
slack>0,说明数据刷新比采样时间更晚到达,则满足时序约束;slack<0,说明保持时间违例
在这里插入图片描述
综上,分析建立时间与保持时间的约束表达式,Tco、Tdata、clk uncertentity不利于建立时间,有利于保持时间;clk skew有利于建立时间,不利于保持时间。

4.异步信号的时序同步化

(1)为什么要进行同步化
完全的异步逻辑,意味着没有规律,也无法进行约束。但寄存器的复位恰好就是异步的,verilog设计中常这样描述:

always@(posedge clk or negedge rst_n)begin
	if(rst_n==1'b0)begin
		...
	end else begin
		...
	end
end

如果我们要对异步信号进行时序约束,则要将其同步化。最常采用的方法是将该信号寄存两拍,以防止亚稳态的出现。
在这里插入图片描述

reg	A;
reg	B;
always@(posedge or negedge rst_n)begin
	if(rst_n==1'b0)begin
		A	<= 1'b0;
	end else begin
		A	<= 1'b1;
	end
end

always@(posedge or negedge rst_n)begin
	if(rst_n==1'b0)begin
		B	<= 1'b0;
	end else begin
		B	<= A;
	end
end

将其同步化之后,复位信号依然是异步的,但复位信号的释放是同步的。
(2)recovery分析
复位信号类似于建立时间,其时序约束表达式为:
Recovery slack
=setup requiment+clk skew-clk uncertentity-Tco-Tlogic-Tnet-Trc

(3)removal分析
释放信号类似于保持时间,其时序约束表达式为:
Removal slack
=Tco+Tdata-Holdup requirement-clk skew-clk uncertainty-Tre

5.时序违例的修改

时序违例,即slack<0,以下针对表达式的优化各项延时
(1)Setup slack
=setup requiment+clk skew-clk uncertentity-Tco-Tlogic-Tnet-Tsu
若setup requiment<0,说明时序引擎捕获沿挑选错误,可以使用脚本进行多周期约束
若clk skew不合理,需要调整源时钟路径和目的时钟路径的逻辑与布线,例如经过MMCM处理后的时钟信号会被补偿,应尽量减少不对称的情况。对于时钟路径和复位路径,应尽量保持干净,少引入组合逻辑;
clk uncertentity、Tco为时钟和寄存器参数,一般较难调整;
若Tlogic过大,可以调整逻辑级数,中间插入寄存器进行流水线分割;
若Tnet过大,可能是布线长度过长、工艺制程小、扇出过大,其中布线长度和扇出可以调整;
Tsu过大,可能是Block(包括但不限于BRAM、DSP等)作为起点或终点,可以在起点前、终点后插入寄存器,将时序路径分割成寄存器到寄存器的传输模型。
(2)Holdup slack
=Tco+Tdata-Holdup requirement-clk skew-Th-clk uncertainty
Holdup requirement=capture edge-next launch edge,一般小于0,即捕获沿比下一个发起沿先到;若其大于0,可以通过脚本进行多周期约束。
其他项的优化与(1)中的类似。

  • 5
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值