什么是FIFO:
FIFO(first in first out 先进先出),与C语言中数据结构的队列很相似。FIFO是对存储数据具有先进先出的特性的一个存储器!常被用于数据缓存、高速异步数据交互。
分类:
FIFO模拟图:
配置FIFOIP核:
testbench测试程序:
`timescale 1ns/1ns
`define clock_period 20
module fifo_tb;
reg clock;
reg [15:0] data;
reg rdreq;
reg sclr;
reg wrreq;
wire almost_empty;
wire almost_full;
wire empty;
wire full;
wire [15:0] q;
wire [8:0] usedw;
integer i;
fifo fifo(
.clock(clock),
.data(data),
.rdreq(rdreq),
.sclr(sclr),
.wrreq(wrreq),
.almost_empty(almost_empty),
.almost_full(almost_full),
.empty(empty),
.full(full),
.q(q),
.usedw(usedw)
);
initial clock=1;
always #(`clock_period/2) clock=~clock;
initial begin
data=0;
rdreq=0;
wrreq=0;
sclr=0;
#(`clock_period*20+1);
for(i=0;i<=255;i=i+1) begin
wrreq=1;
data=i;
#(`clock_period);
end
wrreq=0;
#(`clock_period*20);
for(i=0;i<=255;i=i+1) begin
rdreq=1;
#(`clock_period);
end
rdreq=0;
#(`clock_period*20);
$stop;
end
endmodule
很简单的一个程序,就是把FIFOIP核的模块例化到testbench中,然后初始化激励,然后写操作与读操作用两个for循环循环+i。
波形图:
写操作
读操作
最后。混合双时钟FIFO,testbench就是生成两个不同的时钟激励即可。