名称:通用FIFO设计深度8宽度64,verilog仿真
软件:Quartus
语言:verilog
本代码为FIFO通用代码,其他深度和位宽可简单修改以下参数得到
reg [63:0] ram [7:0];//RAM。深度8,宽度64
代码功能:
使用verilog编写FIFO
要求
FIFO为先入先出队列
FIFO深度为8,数据宽度为64
FIFO具有clk,rst_n(异步复位),wr_en,rd_en,data_in[63:0], data_out[63:0], empty, full信号
写数据下拍生效,读数据当拍生效
空满信号下拍生效
用verilog编写简单Testbench对实验1的FIFO进行验证,随机生成读写信号(满足空满要求),写数据等,通过看波形以及打印判断读数据正确性
演示视频:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=207
FPGA代码资源下载网:hdlcode.com
代码下载:
部分代码展示
//FIFO深度为8,数据宽度为64 module a_fifo ( input clk,//时钟 input rst_n,//复位 input [63:0] data_in,//fifo写数据 input wr_en,//写使能 input rd_en,//读使能 output [63:0] data_out,//读数据 output empty,//空信号 output full//满信号 ); reg [63:0] ram [7:0];//RAM。深度8,宽度64 reg [3:0] count=4'd0; reg [3:0] rp=4'd0; reg [3:0] wp=4'd0; integer i; always@(posedge clk or negedge rst_n) if(!rst_n)begin//复位 wp<=4'd0; rp<=4'd0; count<=4'd0; for(i=0;i<8;i=i+1) ram[i]<=64'b0;//清零 end else case({rd_en,wr_en}) 2'b00:count<=count; 2'b01://单写FIFO if(~full)begin//未满 ram[wp]<=data_in;//存入fifo if(wp>=4'd7) wp<=4'd0;//写地址循环累加 else wp<=wp+4'd1; count<=count+4'd1; rp<=rp; end 2'b10://单读FIFO if(~empty)begin//未空 if(rp>=4'd7) rp<=4'd0;//读地址循环累加 else rp<=rp+4'd1; count<=count-4'd1; end 2'b11://同时读写FIFO if(empty)begin//FIFO为空,只能写 ram[wp]<=data_in; if(wp>=4'd7) wp<=4'd0;
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. Testebnch
5. 仿真图
仿真图依次仿真了如下功能:
具体功能1/2/3对应如下:
1.写FIFO 4次,再读4次,FIFO读空
2.写FIFO 5次,然后同时读写5次,最后读5次,FIFO读空
3.连续写FIFO 8次,FIFO写满
打印信息: