在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2958|回复: 6

[求助] 跨时钟域约束问题

[复制链接]
发表于 2020-10-17 00:47:13 来自手机 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
请问大家,跨时钟域或者说是异步时钟之间应该如何约束呢?直接设置async group或者false path可以吗?我总觉得这样不太好,因为有些跨时钟域处理电路(例如DMUX或者FIFO)其两个跨时钟域的信号直间其实是有关系的,拿大家比较熟悉的FIFO为例,wen和data实际上是先将wen从clka同步到clkb(可以理解为打两拍),clkb中收到打拍后的wen后再去clka中采data,如果wen和data从clka到clkb都设置为false path则可能data路径比wen长很多,这样可能在clkb中还没采到data就开始使用了,从而导致错误。
所以,这种跨时钟域的情况到底该如何约束?
发表于 2020-10-17 09:04:02 | 显示全部楼层
"实际上是先将wen从clka同步到clkb(可以理解为打两拍),clkb中收到打拍后的wen后再去clka中采data,如果wen和data从clka到clkb都设置为false path则可能data路径比wen长很多,这样可能在clkb中还没采到data就开始使用了"

data 的延时一般不会超过两个 clkb 周期。 如果想把 data 的 delay 控制得小一点,可以加个 set_max_delay。
一般发送端要用 flop hold data, 直到确定接收端读取了 data, 再换下一个 data。 通常是 tx --> data_valid+data --> rx,  rx --> ack --> tx 这种握手。
FIFO 通常不会同步 WEN。 通常是同步 write pointer 到 read clock domain 或反过来。 通过比较 pointer, 决定是否有数据在 FIFO 里需要读出。 避免 FIFO overflow, underflow, 这些是设计思想的问题,不是单纯的 timing constraint。
好的设计,是好的思想 + 好的实现。

 楼主| 发表于 2020-10-19 12:25:32 | 显示全部楼层


jake 发表于 2020-10-17 09:04
"实际上是先将wen从clka同步到clkb(可以理解为打两拍),clkb中收到打拍后的wen后再去clka中采data,如果w ...


多谢回复!

1.
“data 的延时一般不会超过两个 clkb 周期。”
请问这是需要通过添加约束来实现不会超过两个clkb,还是说在不额外添加约束的情况下、即使PR在最差的情况下也一般不会超过两个clkb?


2.
"如果想把 data 的 delay 控制得小一点,可以加个 set_max_delay。"
请问您是在项目中用过这种方式?我也有看到有说可以通过在CTS阶段通过起点create clock,在各自终点设置stop pin来平衡相关信号的延时差的。不知道业界比较通用的方式是哪一种?


3.
“FIFO 通常不会同步 WEN。 通常是同步 write pointer 到 read clock domain 或反过来。 通过比较 pointer, 决定是否有数据在 FIFO 里需要读出。 避免 FIFO overflow, underflow, 这些是设计思想的问题,不是单纯的 timing constraint。

好的设计,是好的思想 + 好的实现。 “

您说的对。FIFO不同步WEN,而是通过将pointer进行gray码转换->同步到对端时钟域(一般是打2拍或3拍)->对端将gray码转换为pointer->从源时钟域进行数据的读写。设计思想这一块我没有太大疑问,我现在就是不太清除在好的设计思想上的好的实现该如何实现。其实就是我的第1、2点疑问,我想知道业界一般如何来做。



多谢回复!


发表于 2020-10-19 16:21:37 | 显示全部楼层


关于1, 2, 通常不加约束,PR 工具即使在没有约束的情况下,也不会造成延迟超过两个周期。 PR 后 report_timing -unconn 确认一下。
有的设计会要求 balance 两个信号之间的相对延迟,用 set_data_check。 这个约束用的少,工具不一定都能处理好,要仔细查一下。 需要用到 set_data_check 的情况其实非常少。


 楼主| 发表于 2020-10-20 09:44:12 | 显示全部楼层


jake 发表于 2020-10-19 16:21
关于1, 2, 通常不加约束,PR 工具即使在没有约束的情况下,也不会造成延迟超过两个周期。 PR 后 report ...


“ PR 后 report_timing -unconn 确认一下。”
最后有办法确认一下就好,但是report_timing好像没有-unconn选项,是您写错了?如何确认最后的结果麻烦您再指点一下。
非常感谢!

发表于 2020-10-20 09:54:27 | 显示全部楼层


duanwuqqqqqq 发表于 2020-10-19 19:44
“ PR 后 report_timing -unconn 确认一下。”
最后有办法确认一下就好,但是report_timing ...


抱歉,确实是我敲错了,应该是 report_timing -unconstrained ...  半夜发帖有点糊涂。
谢谢您指出错误!

 楼主| 发表于 2020-10-20 17:16:44 | 显示全部楼层


jake 发表于 2020-10-20 09:54
抱歉,确实是我敲错了,应该是 report_timing -unconstrained ...  半夜发帖有点糊涂。
谢谢您指出错误 ...


report_timing好像也没有-unconstrained选项
不过我明白您的意思了,是通过report_timing报出这些unconstraint的CDC路径,可以用最基本的report_timing -from clka -to clkb。如果要报出任意两个时钟域之间的路径则可以用report_timing -from [all_clocks] -to [all_clocks]。这样可以看到任意两个时钟之间的最大的delay,确认其不会大于两个-to的clk就可以了。

最后再次感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-22 21:41 , Processed in 0.040330 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表