timingPath/set_data_check和set_max_delay/set_multicycle_path

目录

0.timing path

1.set_data_check

1.1set_data_clk约束cdc path

1.2 set_data_check和set_max_delay区别和使用场景

2.set_mulicycle_path


0.timing path

timing path的概念:

start和end不只是reg的CP和REG的D pin

还可以是mem的D/Qpin和 port

port-->port 这种feedthrough也算timing path

1.set_data_check

set_data_check 通常用于信号间的skew 约束,比如一些高速接口相关信号间的约束。摘一段:

Data checks are normally applied where there is a specific requirement of skew (either minimum of maximum) or race condition (where the order of arrival of two signals can affect output and the intention is to get one of the probable outputs by constraining one signal to come before the other) between two or more signals. These may be required where:

At the digital-analog interface within a chip where analog signals at the analog block boundary are required in a specific order.

At the chip boundary, some asynchronous interface signals may have skew requirements.

set_data_check 和set_max_delay是有很大区别的,一个是保证多bit信号到达capture pin时间相差不多另一个是保证所有bit的走线延迟在一定范围内

换一种说法 一个是对skew约束;另外一个主要是约束delay。

可参考:

SDC | set_data_check-腾讯云开发者社区-腾讯云

静态时序分析——Data to data check_沧海一升的博客-CSDN博客

确保数据总线的信号偏移控制 | 电子创新网赛灵思中文社区

在异步电路后端实现流程(cdc signOff 后端做什么)中说明了使用set_max_delay收cdc path,这里讨论一下set_data_check。

1.1set_data_clk约束cdc path

对于grayCode的多bit同步,我们要求这个多bit信号到达dstClk的寄存器时间尽量相等,那么怎么用set_data_check来约束呢?比如dst_gray_code[3:0],我们做如下的约束:

set_data_check -from dst_gray_code_reg_0_/D -to dst_gray_code_reg_1_/D -setup 0.3
set_data_check -from dst_gray_code_reg_0_/D -to dst_gray_code_reg_2_/D -setup 0.3
set_data_check -from dst_gray_code_reg_0_/D -to dst_gray_code_reg_3_/D -setup 0.3
set_data_check -from dst_gray_code_reg_0_/D -to dst_gray_code_reg_1_/D -hold 0.4
set_data_check -from dst_gray_code_reg_0_/D -to dst_gray_code_reg_2_/D -hold 0.4
set_data_check -from dst_gray_code_reg_0_/D -to dst_gray_code_reg_3_/D -hold 0.4

那么约束起效果后,结果就是dst_gray_code[3:1] 3bit信号到达寄存器D端的时间在dst_gray_code[0]到达D端时刻t的 [t-0.3 : t+0.4]范围内,这样对于grayCode来说是否可以呢?

我们可以用公式来描述一下:

设t0时刻src_gray_code[0]发生变化,经过td之后到达dst_gray_code[0] pin D。t0+tf(tf为fastCLk的周期)时刻src_gray_code[1]发生变化,dst_clk在t0+x时刻第一次采样src_gray_code的变化

m为set_data_check的setup时间

n为set_data_check的hold时间

如果要满足此时两个bit都不满足dst_clk的setup,则需同时满足以下的条件

0<t_{0}+x-(t_{0}+t_{d}) < t_{setup}

0<t_{0}+x-(t_{0}+t_{d}+t_{f}+[-m:n]) < t_{setup}

化简可得:

t_{d} <x< t_{setup}+t_{d}

t_{d}+t_{f}+[-m:n] <x< t_{setup}+t_{d}+t_{f}+[-m:n]

正常情况下

t_{f}>m

进一步需要满足下面两个条件

最终要求如下:

t_{d}+t_{f}+n <x< t_{setup}+t_{d}

一般在一种工艺下

t_{f}+n < t_{setup}是不会发生的,

同理hold分析也可以完成

所以set_data_check也是可以保证grayCode的最多只有1bit在dst clk 采样时不稳定。

1.2 set_data_check和set_max_delay区别和使用场景

        那为什么一般cdc check用maxDelay约束而不用set_data_check?

        个人认为 maxDelay除了能保证grayCode同步的上述特性,还能对走线延迟绝对值进行约束。而set_data_check只能保证到达指定pin上的时间相差不大,但这个绝对时延无法保证。

        set_data_check常见用于 I2C的scl和sda之间约束。也用于多bit使用打拍同步器的约束(在SNPS家的hdmi PHY sdc见过)。

        实际上对于I2C/SPI/I2S/dpi这些接口,后端signOff的时候都会同时处理从数字寄存器到pad port上的maxDelay和信号线之间的skew。常有两种做法:

  • 正向约束

        可以正向用set_max_delay+set_date_check来约束,分别设定某类接口的maxDelay和信号之间【clk,多bit数据,控制信号等】的skew。

  • 反向迭代

        这种方法是后端先按照经验做timing,做完之后写脚本检查某类接口的所有信号是否满足maxDelay和信号间skew的要求,如果不满足,那就继续迭代。

2.set_mulicycle_path

timingPath/set_data_check和set_max_delay/set_multicycle_path_第1张图片

可参考原创sdc中set_multicycle_path的解释_进击的芯片的博客-CSDN博客

或本人转载之后的地址:

sdc中set_multicycle_path的解释_cy413026的博客-CSDN博客

该篇文章详细介绍了setup/hold是的检查从launch/capture clk的哪个沿

快慢时钟间的setup/hold检查从launch/capture clk的哪个沿

multicycle path时setup/hold检查用的从launch/capture clk的哪个沿

你可能感兴趣的:(芯片后端,soc,set_data_check,timing,path,timing,check,multicycle)