FIFO(First in first out 即先入先出),是一种数据缓冲器,用来实现数据先入先出的读写方式。FIFO存储器主要是作为缓存,应用在同步时钟系统和异步时钟系统中,在很多的设计中都会使用;如:多比特数据做跨时钟域处理,前后带宽不同步等都用到了FIFO。FIFO 根据读写时钟是否相同,分为 SCFIFO(同步 FIFO)和 DCFIFO(异步 FIFO)。要完成FIFO的写操作需要三路信号:时钟,请求,数据写入信号。要完成FIFO的读操作需要三路信号:时钟信号,有效读请求信号。
首先是同步FIFO的调用,先进行FIFO IP核的参数配置,然后编写顶层模块的FIFO调用代码:
module fifo
(
input wire sys_clk,
input wire [7:0] pi_data,
input wire rd_req ,
input wire wr_req,
output wire empty,
output wire full,
output wire [7:0] po_data,
output wire [7:0] usedw
);
scfifo_8x256 scfifo_8x256_inst
(
.clock ( sys_clk),
.data ( pi_data),
.rdreq ( rd_req ),
.wrreq ( wr_req ),
.empty ( empty ),
.full ( full ),
.q ( po_data ),
.usedw ( usedw )
);
endmodule
然后编写仿真代码:
`timescale 1ns/1ns
module tb_fifo();
reg sys_clk;
reg [7:0] pi_data;
reg rd_req ;
reg wr_req ;
reg sys_rst_n;
reg [1:0] cnt ;
wire empty;
wire full;
wire [7:0] po_data;
wire [7:0] usedw;
initial
begin
sys_clk =1'b1;
sys_rst_n <= 1'