【FPGA面试题(八)】—— 实现简单的FIFO
在FPGA的数字电路中,FIFO(First-In-First-Out)是一个非常基础且重要的模块,它可以像一个队列一样存储数据并按照先进先出的顺序进行读取。实现FIFO是FPGA工程师面试过程中经常会涉及到的内容之一。
对于本题,我们需要实现一个简单的FIFO模块,支持数据的写入和读出,并且具备以下特点:
- FIFO的深度为16(可以修改);
- 支持异步写入;
- 支持同步读出。
下面是FIFO的代码实现。
module fifo (
input wire clock,
input wire reset,
input wire write_en,
input wire [7:0] data_in,
output wire read_en,
output wire [7:0] data_out,
output wire almost_full
);
parameter DEPTH = 16;
reg [7:0] mem [0:DEPTH-1];
reg [3:0] write_ptr = 0;
reg [3:0] read_ptr = 0;
wire full = (write_ptr == ((read_ptr+DEPTH-1) & (DEPTH-1))) ? 1 : 0;
wire empty = (read_ptr