1.一种后端异步电路的signOff流程
同步电路和异步电路分别signOff
对于同步电路,后端会分析sta setup/hold,这里不在赘述。在该scenario下 异步电路是不会分析,也不会关注异步电路之间的走线
在cdc scenario(mode)下sdc有一下设置:
- 将所有同名的clk之间的path都设为falsePath
该scenario下不检查同步电路的sta
foreach_in_collection per_clk_cdc [get_clocks *_cdc] {
set_false_path -from ${per_clk_cdc} -to ${per_clk_cdc}
}
2.将所有的clk hold检查设为falsePath
该scenario下不检查时钟之间的hold
set_false_path -hold -from [get_clocks *_cdc] -to [get_clocks *_cdc]
3.对所有不同名的clk 做双向的max_delay检查
设 有clk_a,clk_b;周期分别为period_a和period_b,则两者之间最小的周期为period_min_ab,做一下max_delay检查
set period [expr ${period_min_ab} * ${cdc_ratio}];#normally, we can set cdc_ratio=0.7
set_max_delay -from clk_a to clk_b ${period} -ignore_clock_latency
set_max_delay -from clk_b to clk_a ${period} -ignore_clock_latency
以上约束的含义就是 对所有a to b和b to a的clk做两者之间快时钟周期的0.7倍 max_delay检查。
因为这是异步时钟域的检查,所以可以ignore 所有的clk latency。只关注dataPath的maxDelay
在设置了max_delay的约束之后,综合和布局布线工具不一定能满足所有的约束,这时就会像setup检查一样出现violation【max_delay vio】,根据vio报告设计人员确认哪些需要后端去迭代或者手动去修,哪些不需要修改
maxdelay和setup检查的path Type都是max,但不同的地方是,setup检查data required time是来自(clk path delay - lib setup) 时间;而maxdelay的data required time是设置的(maxDelay - lib setup)时间。
那么就有两个问题:
- 为什么要做max_delay的检查
- 如果有不同名字的clk 原本是同步时钟域 该怎么办
- 如果有异步电路不能满足0.7倍的fastclk maxDelay检查该怎么办?
带着这些问题我们进入下一节。