格雷码转换
格雷码属于镜像码
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
FIFO满状态判断
除最高两位外都相同,前两位的异或值相同(2ndmsb),首位不同。
wfull <= ((wgnext[ADDRSIZE] !==wrptr2[ADDRSIZE])&&(w_2ndmsb== wr_2ndmsb) && (wgnext[ADDRSIZE-2:0]== wrptr2[ADDRSIZE-2:0]));
亚稳态处理
多级寄存器同步,是一种方式,
https://www.cnblogs.com/xiaoxie2014/p/4149565.html
于斌,《Verilog HDL 数字系统设计及仿真》,电子工业,2018