FPGA21 单时钟FIFO

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 前仿真

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/helloworld573/article/details/105356274