yxm433 发表于 2012-12-16 17:59:21

异步时钟域,用2级触发器打2次,能否保证数据的正确性?

请教个异步时钟域的问题:
例如:一个spi总线,有cs、mosi,clk_spi就三个信号,如果clk_spi没有接到fpga的专用时钟引脚,这个时候是否考虑用fpga的内部时钟来采集spi总线的三个信号来处理比较合适呢?

这个时候就有个问题了,2个不同的时钟域的信号,看网上的资料说用2级触发器打一下来解决亚稳态的传播,我想问,这是不是仅仅阻止了亚稳态的传播而已,信号的取值正确与否不能保证??

qq302011 发表于 2012-12-16 18:26:14

先用时钟1打一拍,再用时钟二打1-2拍

gnep 发表于 2012-12-16 18:39:17

不接到专用时钟引脚没有关系的,可以用fifo。

yxm433 发表于 2012-12-16 18:48:14

qq302011 发表于 2012-12-16 18:26 static/image/common/back.gif
先用时钟1打一拍,再用时钟二打1-2拍

为什么时钟1也要打1拍,时钟2打了2拍后,数据是能保证正确的吗?还是说仅仅不会亚稳态?

ab8780000 发表于 2012-12-16 19:41:55

本帖最后由 ab8780000 于 2012-12-16 19:45 编辑

你就用clk_sp啊,即使不接专用时钟没关系的,把它走上全局时钟网络就好
打两拍可以降低亚稳态发生的概率,但不能保证数据的正确性

yxm433 发表于 2012-12-16 22:08:36

ab8780000 发表于 2012-12-16 19:41 static/image/common/back.gif
你就用clk_sp啊,即使不接专用时钟没关系的,把它走上全局时钟网络就好
打两拍可以降低亚稳态发生的概率, ...

不接专用时钟,怎么把它走上全局时钟网络??

还有个问题:如果打2次,不能确保数据的正确性的,在实际工程中还会使用吗?
不明白:既然数据不能确保正确,我看很多书上都是这样做的?

NJ8888 发表于 2012-12-16 22:38:42

你应当用SPI自己时钟来接收,至于接收后的数据与系统其他部分的同步,可以利用同步CS信号打出去或是FIFO来跨时钟域

ab8780000 发表于 2012-12-17 09:27:09

本帖最后由 ab8780000 于 2012-12-17 09:45 编辑

yxm433 发表于 2012-12-16 22:08 static/image/common/back.gif
不接专用时钟,怎么把它走上全局时钟网络??

还有个问题:如果打2次,不能确保数据的正确性的,在实际 ...

不管是什么信号,管脚或者内部节点,只要其扇出很大,综合器会自动让这个信号走上全局时钟网络,你不放心的话,自己进入QuartusII的
Assignment Editor设置或者ISE加入BUFG原语让这个信号走上全局时钟。
我们打两拍只用来采控制信号,从不采数据。
你要理解打两拍的原理,它相当于是一个延时器,延时两拍,即使发生了亚稳态(数据不定态),那么延时两拍后数据就恢复稳定了,
因为亚稳态它恢复有个时间,从数据不定态到数据稳定。
只是数据稳定,不是数据正确。控制信号对采集错误不是很敏感不会对系统造成什么影响,但是数据对错误很敏感。

yxm433 发表于 2012-12-17 22:46:15

谢谢各位的指点

health 发表于 2012-12-17 23:56:24

数据当然是正确的,只是会有滞后。
页: [1]
查看完整版本: 异步时钟域,用2级触发器打2次,能否保证数据的正确性?