STA 静态时序分析 第八章——时序检查(3)

之前的文章STA 静态时序分析 第八章——时序检查(1)

之前的文章STA 静态时序分析 第八章——时序检查(2)


目录

8.9 例子

半周期路径 - 例1

半周期路径 - 例2

快时钟域-慢时钟域

慢时钟域到快时钟域

8.10 多时钟

8.10.1 整数倍

8.10.2 非整数倍

8.10.3 相移(Phase shifted)


8.9 例子

半周期路径 - 例1

这个例子中,俩个时钟周期相同但是是反相的,代码指定如下,波形见图。

create_clock -name CLKM \
-period 20 -waveform {0 10} [get_ports CLKM]
create_clock -name CLKP \
-period 20 -waveform {10 20} [get_ports CLKP]

建立检查在0ns的发射边沿,到下个捕获边沿,在10ns。半个时钟周期的裕量可以用于保持时间检查,从而去验证在20ns发射的数据没有被10ns的捕获边沿捕获。下面是报告。

下面是保持时间检查报告:

半周期路径 - 例2

这个例子与例1类似,只不过将发射时钟在时间轴进行了平移。

create_clock -name CLKM \
	-period 10 -waveform {5 10} [get_ports CLKM]
create_clock -name CLKP \
	-period 10 -waveform {0 5} [get_ports CLKP]

建立时间检查是从5ns的发射时钟边沿到到下一个10ns的捕获边沿。保持时间检查是从5ns的发射时钟边沿,到前一个0ns的捕获边沿。

下面是保持时间报告:

快时钟域-慢时钟域

这个例子中,捕获时钟是发射时钟的二分频

create_clock -name CLKM \
-period 10 -waveform {0 5} [get_ports CLKM]
create_clock -name CLKP \
-period 20 -waveform {0 10} [get_ports CLKP]

建立时间检查是从10ns的发射边沿到20ns的捕获边沿;保持时间检查是从0ns的发射边沿到0ns的捕获边沿。这里可能会思考一个问题,既然发射时钟的数据每两个周期才用一次,那么为什么用相同的上升沿做建立时间检查和保持时间检查?原因就在于STA只去检查潜在的最悲观的路径,而不去分析具体的功能。

保持时间报告如下:

慢时钟域到快时钟域

在这例子中,捕获时钟的频率是发射时钟的两倍。建立时间检查是从0ns的发射边沿到5ns的下个捕获边沿,保持时间检查是从0ns的发射时钟边沿到0ns的捕获边沿。

建立时间检查报告

保持时间检查报告


8.10 多时钟

8.10.1 整数倍

有时候设计中存在多个时钟,彼此呈倍数关系。这种情况下,STA会计算所有关联时钟之间的共同基本周期(关联指的是两个时钟域之间有数据路径),建立了共同基本周期之后,所有的时钟就可以实现同步。下面有四个关联的时钟,从图中可以看出共同基本周期20ns,当存在CLKP-CLKM之间的路径的时候,就会用到20ns。

create_clock -name CLKM \
-period 20 -waveform {0 10} [get_ports CLKM]
create_clock -name CLKQ -period 10 -waveform {0 5}
create_clock -name CLKP \
-period 5 -waveform {0 2.5} [get_ports CLKP]

下面的建立时间时序报告,是从最快的时钟域,走向最慢的时钟域。由于15ns的上升沿是最严格的条件,所以从此分析。

下面是相对应的保持时间报告。

8.10.2 非整数倍

两个时钟域之间存在数据路径,但是频率不互为倍数。

create_clock -name CLKM \
-period 8 -waveform {0 4} [get_ports CLKM]
create_clock -name CLKQ -period 10 -waveform {0 5}
create_clock -name CLKP \
-period 5 -waveform {0 2.5} [get_ports CLKP]

时序分析过程将会为关联时钟(定义之前讲过)计算一个公共基本周期。比如,CLKQ CLKP的公共基本周期为10ns,CLKM CLKQ的公共基本周期为40ns,CLKM CLKP的公共基本周期为40ns。让我们考虑一条从CLKM时钟域到CLKP时钟域的路径。公共基本周期为40ns。

建立时间检查发生在最短时间的发射边沿与捕获边沿之间。在我们的例子中,将会是24ns的发射边沿,与25ns的捕获边沿。

下面是保持时间报告。最严格的保持路径是从0ns的CLKM到0ns的CLKP

另外的检查也类似,此处不赘述了。

8.10.3 相移(Phase shifted)

这个例子中两个时钟有90度的相位差。

create_clock -period 2.0 -waveform {0 1.0} [get_ports CKM]
create_clock -period 2.0 -waveform {0.5 1.5} \
[get_ports CKM90]

建立时间报告如下图所示:

CLK90的第一个上升沿在0.5ns,是捕获边沿。对于2ns的发射边沿,捕获边沿在2.5ns,前一个捕获边沿在0.5ns。所以将使用2.0ns 0.5ns的两个边沿进行保持时间分析。

其他的时序检查如数据-数据检查,以及时钟门控检查,将会在第十章中描述。


关于本章的一些思考:

set_input_delay  set_output_delay 都是某个引脚相对于某个时钟而言的延时,如果延时为正值说明比时钟来的晚,如果延时为负值说明比时钟来得早。

建立时间使用max选项:数据相对于当前边沿有着最大延时,但是捕获在下个边沿,若此时是最大延时,意味着数据提前于下个边沿到来的时间更短,则必定是最严苛的建立时间情况。

保持时间使用min选项:数据相对于当前边沿有着最小延时,捕获边沿在同时间,想要捕获上个周期发射的数据,若此时是最小延时,那么在捕获边沿捕获后,可能会造成重写,为最严格情况。


部分内容翻译自“Static Timing Analysis for Nanometer Designs A Practical Approach”  欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值