微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 什么样的时钟应该被认为是两个不同的时钟域?

什么样的时钟应该被认为是两个不同的时钟域?

时间:10-02 整理:3721RD 点击:
若是两个完全不同的时钟输入,肯定属于两个不同的时钟域,但是若在以下的这些情况中,应该被认为是两个不同的时钟域吗?
(1) “clk_in”是FPGA输入,“clk_in”经过DCM,输出一个反相(180度)时钟“clk1”,那么“clk_in”和“clk1”应该要作为两个不同的时钟域进行处理吗?
(2) 把“clk1”和“clk_in”经过一个BUFGMUX进行选择,选择输出叫做“clk2”, 那么"clk_in"和"clk2"应该算作是两个时钟域吗?

若要我说的话 算是了 感觉没必要纠结这个问题吧



  如果要作为两个不同时钟域,那么这两者间若存在数据交换的化就必须要按照跨时钟域处理了(同步什么的),若不是两个不同的时钟域就可以直接用其数据。

可能本人学的不精 平常应用中不同频率时钟才考虑跨时钟处理 数据加FIFO神马的
相同频率时钟一般取反之类的多是为了读写数据时在数据中间采样,直接用就好了吧
当然特殊情况特殊考虑啦



  其实我描述中的第一种情况只是举个例子啦,在实际情况中我遇到的是类似情况(2):就是说clk1是clk_in的移相(90度),然后clk2是在clk_in和clk1之间做个选择,不同模式下用不同的时钟,然后我就不确定这个clk2在用从clk_in domain过来的数据时,是否应该按照跨时钟域进行处理。

感觉两者都不是,都可以被cotraint

clk1 clkin 和clk2三个时钟都是异步时钟源。
同步异步的区分方法看时钟驱动就好了,clkin是外部晶振驱动、clk1是DCM驱动、clk2是BUFGMUX驱动



   谢谢。还有个疑问哈:给"clk_in"添加约束,可以自动生成"clk1"的约束,那么"clk2"是遵照clk_in的约束还是clk1的约束呢?

学习了!

这个问题要回答清楚,需要从两个方面谈:
1.异步时钟. 由不同的PLL产生的是异步时钟,有1个时钟分频得到其他时钟,仍是同步时钟。
2.是同步时钟就具备同步设计/分析的基础,当然时钟数的skew需要关注,特别是hold。对于异步时钟,则必须考虑cross domain,当然同步不同频得时钟之间也可以直接按异步设计。



  不好意思,没有特别明白您的意思。您第一句说的异步时钟,是指我问题中的clk_in和clk1是异步时钟吗?可是按照您说的clk1是由clk_in分频得到,那么又应该算作是同步的吗?学艺不精,还望再给我解释一下哈。



    我的理解是这样子的,这个三个时钟其实相位偏差是固定的,所以是同一个时钟域。那不同时钟域是两个时钟的相位在不同时间点是不一样的,这个叫做异步。



   感觉您的回答和前面的不太一样,我有点儿晕了。是不是说这三个时钟之间如果有数据交换,我可以不按照跨时钟域的方式去交换数据。



   从同一个时钟源(PLL)分频的到连个时钟,即使频率不同都可以认为是同步时钟,因为其相位关系固定,具备时序分析的基础,但基于这一点进行同步设计,需要特别关注接口实现和时序分析。如果是异步时钟,则必须考虑跨时钟域的异步交接,当然前面说的情况也可以按照异步交接设计。



    是的

都是同步时钟,这种设计在低功耗设计中也常见,同源不同频,但具有固定的相位关系
设置约束时,需要知道各个路径的准确地传播延迟

所谓的异步时钟是两个不同源的时钟,这种情况下由于频率和相位不可预测,自然没法进行约束,所以需要进行跨时钟域的处理,你的两种情况不算异步时钟,依然是同源的,可以进行时序的约束,保证采到信号的稳定性,不用做跨时钟域。

可参考这个:
同步逻辑:电路中的时钟间有着固定的因果关系
异步逻辑:时钟间没有固定的因果关系



   我明白了,十分感谢!

挺同意LS诸位的说法的,记得在Ateral的某一篇官方教程里看到过说有过存在固定相位差的同源时钟也是同步的

学习了。

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

网站地图

Top