格雷码是一种相邻两个码字之间只有一位不同的编码方式。也叫反射二进制码(Reflected Binary Code, RBC)

assign gray[3] = binary[3];
assign gray[2] = binary[3] ^ binary[2];
assign gray[1] = binary[2] ^ binary[1];
assign gray[0] = binary[1] ^ binary[0];

为什么普通二进制会产生毛刺?

多位同步数据(如地址指针)跨时钟域传输时:

异步 FIFO 的指针同步

在异步 FIFO 中,写指针 wptr 和读指针 rptr 处于不同的时钟域。