经过前两期的内容铺垫,我们可以看出来,异步FIFO的“异步”主要体现在空满状态的判定阶段。因为要根据读写地址指针的关系来判断full和empty。而不同时钟域的地址指针如果不经过“同步化”处理,则状态会判断出错。与同步FIFO的另一个差异就是异步FIFO的读写操作的驱动时钟是相互独立的。
简单回顾一下整个的结构模块:
输入——读时钟,写时钟,读使能,写使能,写数据
输出——读数据,满状态,空状态
操作——二进制转格雷码;延迟打拍(同步时钟域);读空&写满状态判断;
向ram中写数据&从ram中读数据
四、异步FIFO TB实现
1)验证思路:更改驱动时钟即可(和同步FIFO设计相比)
//声明端口数据类型
module test;
reg rstn;
reg wr_clk;
reg wr_en;
reg[DW-1:0] wr_data;
reg rd_clk;
r