异步fifo设计,仿真
前面研究了同步fifo,并进行了仿真验证,有关同步fifo问题可以参考本人上一篇博客,本次主要对异步fifo进行设计仿真验证。
与同步fifo相比,异步fifo主要不同之处在于读写时钟不同,因此异步fifo需要处理的问题较为复杂,通常需要处理注意的问题点有以下几点:
-
- 不同时钟域之间信号的同步化处理。
-
- 异步fifo的空状态与满状态的判断。
fifo主要有两个目的,速度匹配或者数据宽度匹配。需要进行满状态,空状态的判断,实现复杂。
异步fifo框图
不同时钟域之间信号的同步化处理。
针对读写时钟域的不同采用寄存器打两拍来实现同步化处理。另外由于二进制在两个时钟域之间传递,考虑到这个问题将二进制转换为gray(格雷码),由于gray
相邻两位之间只有一位不同,因此在不同域之间传递减小了出错的概率。(两种方式结合都是为了较小亚稳态)
二进制转换为gray方法
verilog 实现二进制转gray
//---------------gray----------
assign r_gray = (r_reg2 >> 1) ^r_reg2;
assign w_gray = (w_reg2 >> 1) ^w_reg2;
判断fifo的空满状态
判断fifo