跨时钟域设置set_false_path的问题

问题:

请教下:两个异步时钟域有path, 但是都经过了同步。

应该怎么约束这种异步path?
直接设置成false path 是否可以,为什么好多
ip的这种path 都通过set max delay设置为一个
源时钟域的周期?这样设置是否只为了保证性能,

为什么不设置为两个时钟周期?



回答:

1:两个异步时钟域设置false path是可以的,设置max delay是保证总线类的跨时钟信号在被采样的时候是采的同一拍的数据,约束上一般是目的时钟的一个或者半个周期,最严格的是源和目的的最快时钟周期的一半。

2:异步时钟域如果没有path或者path根本不影响功能,应该直接设置false path就行。 但是如果异步时钟域之间有功能path,并且
    这些path经过同步处理,那么如果也只设置成false path,我的理解是这样会影响性能,不影响功能。所以使用set max delay保证性能。

    这样理解是否正确?

 3:   还是要看你的设计,比如总线跨时钟,假设是3bit信号,如果仅仅设置异步,那么1bit可能是1cycle到达,1bit可能是2cycle到达,还有1bit可能是3cycle到达,这个时候跨时钟采样的就不是源端同一拍的数据,如果设计容忍度很高,比如是静态的,那么没有问题,如果设计容忍度不高,比如只能保持两拍数据不变,那么功能上就可能会出错。:

4:多谢。一般的多bit bus不会直接使用异步时钟采样进行同步的,基本都是fifo,除非向你说的是静态的。 我在多问一下, 比如总线使用异步fifo同步, 约束的时候都会约束下异步fifo中的格雷码信号, 设置为set_max_delay $source_clk_period, 这样是否仅仅是为了保证性能,即 如果异步fifo中的格雷码同步信号path直接设置为false path不会影响功能,只是影响性能?

5:如果只set_false_path, 那么综合工具不会把对应的CDC路径看成所谓的“timing path”,会认为“这条路径的timing无所谓”,会可能预先插入很多不必要的cell。更重要的是,当后端的人实际layout的时候,也会认为这是false path,因此可能会因为芯片P/R空间不够,或者走线不够balance, 或者局部power没法收敛等等原因,最终把所关注的这些CDC path拉的很长或者很散,甚至能在layout里面走多层或者对角线。你可以在相关的PT setup timing report里会见到drive强度很大(比如D16,D32 etc)的一坨BUF,或冷不丁蹦出几个延时很长(好几百ps)的delay cell。对于false path,会导致工具理解设计时有误,因此才用set_max_delay做显式的延时约束




猜你喜欢

转载自blog.csdn.net/wordwarwordwar/article/details/80188856