引言
异步FIFO在如跨时钟域传输等很多应用场合具有很广泛的应用,前面我们已经对异步FIFO的基本设计思路做了简单的介绍,具体介绍见链接:同步FIFO与异步FIFO的基本原理,下面我们基于如前所述的异步FIFO基本原理,利用Verilog代码对异步FIFO进行了一个简单的代码实现,并进行了简单的仿真测试。
1、实现过程
异步FIFO的设计过程中主要有如下几个注意事项:
- FIFO深度的计算
- FIFO满空标志的产生
- FIFO中读写时钟域地址的传递
解决好如上所述的几个问题后,异步FIFO的实现就非常简单了,下面直接贴代码。
Async_FIFO.v
`timescale 1ns/1ps
module Async_FIFO #(
// FIFO参数定义
parameter data_width = 16,// FIFO宽度
parameter data_depth = 256,// FIFO深度
parameter address_width = 8 // 地址宽度,对于深度为2^n的FIFO,需要的读/写指针位宽为(n+1)位,多的一位作为折返标志位
)
(
input rst_n,
input write_clk,