使用同步链处理亚稳态后,仍然可能会出现输入逻辑与输出逻辑不一致的情况吧?
这样的话,后一级输入仍然是错误的逻辑状态,那避免不避免亚稳态还有什么意义呢?
困扰中!
自己顶。
没有人有同感吗?
亚稳态经过组合逻辑会大大延长进入稳定前的时间,导致亚稳态的传播。
多打两级FF,是为了防止其传播,并不是说不出现亚稳态。
目的是为抑制亚稳态的传播,而不是解决信息错误问题,后者是要在你的逻辑设计中去解决的
我以前也是这样理解的,你仔细想想就会明白,无非就是变化的信号来的迟一个cycle或者早一个cycle的区别,对吧?
会发生这种情况的唯一可能也就是时钟采样点正好在边沿的时候,如果是错误,无非在下一个cycle会采到正确的值,所以异步通常是需要握手的,也就是说知道对方收到了信号,这边才会准备下一次的信号。
同步链就是确保电路中不会有亚稳态的值导致整个系统崩溃。
前面几位说的很正确,主要是防止亚稳态传播,但还是会某一时刻采错数据的
没错,降低亚稳态出现的可能性,防止传播,有没有采错不重要
要考虑 +/- 一个CLK的误差。
对异步信号来说,本来就不知道什么时候翻转,因此没必要保证在翻转的时候立即被采样;只要保证翻转这一行为能够被判断正确。
多级寄存器同步是为了保证用于判决的信号在任何周期都是一个确定的逻辑信号(0/1)。
任何设计都有出错的可能?只要出错概率极低,就可以了。
比如出错概率1次/30年
用FF打两拍只是为了防止亚稳态的扩散。但这有前提,也就是你的异步输入信号的脉冲宽度应大于同步域clk的两倍。这样就既可以防止亚稳态传播,又可以提高正锁存确的几率(有的可以到百年一遇哦)。如果异步输入信号的脉冲宽度过小(小于clk),那么很抱歉,即使多打两拍后,更后面的FF无法获得这个异步信号,数据接收必然出错。
谢谢各位,受益匪浅!
请教一下一般纠正偶然采错数据有哪些简单方法呢?滤波?
解决问题的思路是采用更快的同步域时钟,但有时这会牵一发而动全身,所以还是要具体问题具体分析。
受教了,谢谢!
分析的好.
亚稳态顾名思义就是说数据不稳定会一直在变化中,如果把这个不稳定的值不经过同步链的稳定过程,那么将会引起后面很多DFF的发生setup和 hold违例,DFF的行为都会乱掉。所以在数据传送到后面的DFF之前一定保证它是稳定的,这个就加入了同步链。
同步链的作用就是使数据稳定而不是保证数据正确。
