格雷码属于镜像码
always @(wptr or winc)
begin: Gray_inc
integer i;
for(i=0; i<=ADDRSIZE; i=i+1)
wbin[i]= ^ (wptr>>i); //grey to binary
if (!wfull)
wbnext = wbin+winc; //FIFO
else
wbnext = wbin;
wgnext=(wbnext>>1) ^ wbnext; //binary to grey
end
除最高两位外都相同,前两位的异或值相同(2ndmsb),首位不同。
wfull <= ((wgnext[ADDRSIZE] !==wrptr2[ADDRSIZE])&&(w_2ndmsb== wr_2ndmsb)
&& (wgnext[ADDRSIZE-2:0]== wrptr2[ADDRSIZE-2:0]));
多级寄存器同步,是一种方式,