微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于异步clock的约束问题

关于异步clock的约束问题

时间:10-02 整理:3721RD 点击:

异步clock之间的path (见二楼)

有点乱
现在有clk1和clk2两个异步时钟,两时钟之间有有效的路径(如果set false path,后仿中就会出现违反引起的不定态)。
(1)clk1和clk2都是一个固定的频率,这种情况下,理论上要消除setup和hold是有可能的,频率一定,那相位关系一定,就可以找到最坏情况下建立和保持时间。但是在实际情况下clk1和clk2的频率可能会有理论频率有误差。那还是会可能有违反导致不定态。不知我想法是否正确,遇到这种情况该如何处理。
(2)clk1和clk2都是一定范围内的不定的频率,相位关系无法确定,那是否就无法消除违反了?遇到这种情况该如何处理。
谢谢各位了。

跨时钟域做个握手信号比较稳当?

能具体解释一下 “握手信号”吗?
谢谢了
还有就是代码不能改了。

实际中clk1和clk2几乎不可能做到固定的相位关系,不知道两个不同时钟域之间的有效路径是什么,如果是数据传输就用异步FIFO吧,如果是控制信号,有很多借鉴的方法,这根clk1和cllk2的两个时钟具体的时钟频率有关系。

1.电平信号
如果是高频率到低频率时钟域,直接寄存器打两拍。
如果低频率到高频率,若电平信号宽度有两个高频率时钟周期宽,则打两拍;如果没有,则需要将电平信号展宽(延迟+或门,或者计数器展宽都可以),然后打两拍。
2.数据信号
如果数据信号要保持每个值都不变,且时序关系不变。则使用FIFO来同步
如果数据是很长时间才变化,可以直接打两拍。
P.S.异步处理时如果使用计数器,则通常考虑使用gray码计数器,可以很大程度上避免亚稳态。

小编 你这个问题的解决方式不应该是约束时钟,而是在后仿真时进行设置,
同步器的2个寄存器不能检查setup hold,
nc 里面可以写一个tfile,排除那些不需要检查setup hold的单元,
实在不行可以改网表,把同步器的单元的setup hold检查的语句注释掉

RE:shuke
后仿中屏蔽了同步寄存器的setup和hold后,那在实际流片后不会因为这两个寄存器而出现问题吗?

"频率一定,那相位关系一定" 太晕

有电晕,不明白

异步时钟之间的信号传输要靠设计来确保的,

二个时钟独立约束,在代码中要做跨时钟域处理

putton的方法就很可靠了。这是属于设计者的工作,仿真的时候,象modelsim,nc这些工具是基于库的仿真模型的,他们识别不了“同步器”的功能,所以需要做“忽略检查”的设置。如果你需要确认“同步器”是否能避免x传播出去,需要用spice之类的工具,这不是RTL级仿真的工作了。同步器的原理可以参考相关的理论书籍。

(1) 频率一定,相位肯定不一定相同。除非频率值有精确的倍数关系。
(2) 如果你们后端做的NB,可以让后端做两个时钟在最小公倍数的时钟沿上同步。

先检查一下同步机制有没有问题。如果没有问题,sync的FF可以屏蔽setup/hold check。所以跨时钟域的问题还是要设计规则来保证。亚稳态是不可避免的。现在的FF设计比以前强,恢复时间不会太长,只要时钟质量不要太差。

设false path

Use fifo to synchronize

不同源的同频clock是无法保证同相滴,(比如两个同频晶振),所以两者间简单的传输数据一定会违反建立保持时间

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top