微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 格雷码对比会有毛刺吗?

格雷码对比会有毛刺吗?

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

000;001
011
010
110
111
101
100;分别对应0-7的格雷码,在异步fifo设计中,如果直接用两个时钟域的格雷码比较(不经过同步),假设读指针一直在000,然后写指针在变,那直接对比是否相等,会有毛刺吗?

好东西,收藏了

不同步就直接比较,肯定会存在亚稳态的啊。毛刺应该是两个通过相同组合逻辑的信号同时发生变化产生的,如果读指针始终为000,那么不会产生毛刺。



    是不是只要读指针不变,不管是不是000,写指针递增,都不会有毛刺,因为只有一比特在变。

不同步,会有亚稳态的


是的,但是异步FIFO不同步会读错指针的。

有没有毛刺,主要是看:
1.组合逻辑中是不是会有竞争冒险;
2.这几个bit的路径是不是等长,路径延迟不一样可能产生毛刺;



    如果说比特之间的延迟很大,确实会有问题。


如果在read_point clock domain,我認為會有glitch
如果在write_point clock domain,我認為不會有glitch


如果在write_point clock domain,我認為不會有glitch
最后一句话可能让人误解哦,如前几个回帖,假设了一个前提:read指针不变,write指针变化,直接比较。
逻辑比较的结果会有glitch(极有可能有,竞争冒险之类的),
只不过,
对于read_point clock ,有可能采到这个glitch(致命的);
而对于write_point clock ,不会采到这个glitch,因为read指针是静态值,write指针是本clock domain的,没有异步问题
不较真这个了,
楼上这句话还是很赞同的:
不同步,轉不轉gray code意義已經不大了

绝对会有啊,只是这个概率会比较小



    读指针不变,写指针只有一比特变化(假设写指针的各比特之间没有很大的delay),直接对比读指针和写指针,
是不是可以认为一个不变的比特和一个跳边的比特对比,为什么会有毛刺?


是不是可以认为一个不变的比特和一个跳边的比特对比,为什么会有毛刺?

这么说吧:
一般来说,一段组合逻辑,即便输入只有一个bit变化,输出也是无法保证没有glitch的 !
举个容易说明的例子:
assign c = sel ? a : b;
电路的实现大致是:
c = (sel1 &  a) | (~sel2 & b)
sel1、sel2是sel信号的两支路,
假设,a =1, b=1, sel 0 -> 1,按理c是1->1不变,
但是有可能,sel2先0->1,导致c变为0,然后sel1才0->1,c又变为1,
这就是一个glitch。

总之,(一般来说),组合逻辑是无法保证没有glitch的!


那我觉得针对我举的那个例子,应该要看实际的电路了。

毛刺(亚稳态)是不能消除,但是能够通过设计避免。使用同步器是使得一个时钟域的地址过到另外一个时钟域,发生亚稳态的概率降低。
这里使用格雷码的原因在于: 亚稳态只会发生在bit变化时,通过格雷编码,使得地址的前后变化只有一个bit发生,就算发生了亚稳态,也只只是相邻前后一个地址导致的,可以用于判断满或者空(也可能是虚满,但至多相差前后一个地址)

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

网站地图

Top