1 FIFO
FIFO是First Input First Output的缩写,先入先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。是一种先进先出的数据缓存器,它与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序读出数据,其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。
2 单时钟FIFO
单时钟FIFO常用于片内数据交互,例如FPGA从外部传感器读取到一连串的数据,由于传感器采集数据的速度很快,但并不是时时刻刻都需要采集数据,这时就需要一个单时钟的FIFO先把读取的数据缓存进来,需要使用的时候在拿出来使用。
3 配置FIFO
4 获取端口列表
module fifoip (
clock,
data,
rdreq,
sclr,
wrreq,
almost_empty,
almost_full,
empty,
full,
q,
usedw);
input clock;
input [15:0] data;
input rdreq;
input sclr;
input wrreq;
output almost_empty;
output almost_full;
output empty;
output full;
output [15:0] q;
output [7:0] usedw;
5 testbench
`timescale 1ns/1ns
module fifo_tb;
reg clk;
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[7:0] usedw;
fifoip u1(
.clock(clk),
.data(data),
.rdreq(rdreq),
.sclr(sclr),
.wrreq(wrreq),
.almost_empty(almost_empty),
.almost_full(almost_full),
.empty(empty),
.full(full),
.q(q),
.usedw(usedw)
);
integer i;
initial clk = 1'b1;
always #10 clk = ~clk;
initial begin
wrreq = 0;
data = 0;
rdreq = 0;
sclr = 0;
#21;
for(i=0;i<255;i=i+1)
begin
wrreq = 1;
data = i;
#20;
end
wrreq = 0;
#20;
for(i=0;i<255;i=i+1)
begin
rdreq = 1;
#20;
end
rdreq = 0;
$stop;
end
endmodule
6 前仿真