在异步FIFO中同时使用rd_usedw和wr_usedw,需要关注一下这两个信号的区别,首先rd_usedw是在rd_clk时钟下,wr_usedw是在wr_clk下,前者输出当前FIFO内可读数据数量,后者是输出已写入FIFO的数量。
在不同读写时钟情况下:
可以看出rd_usedw要滞后wr_usedw两个rd_clk时钟周期。
一般而言两者需要加以区分,只有当输入数据wr_data和读出数据rd_data位数相同,且在写入特点数据量后读出该数据量的数据,此时rd_usedw和wr_usedw区别影响不大,只是要注意FIFO时钟和你调用该FIFO模块的上层模块时钟。
另外还有FIFO读复位和写复位信号的使用,在学习火哥的uart_sdram模块时,这里wr_rst和rd_rst并没有传入信号,在仿真中wr_rst和rd_rst也显示为1’hz或1’hx,此时FIFO模块读写通道关闭,无法写入数据,但是在上板验证功能时并没有影响到FIFO的使用。这里笔者猜测是Quartus软件在综合布局布线的时候在没有复位FIFO信号的情况下会给复位端口一个低电平,让FIFO模块处于可用状态,但是modelsim仿真则不会给一个低电平而是按照代码逻辑进行仿真。