module fifo( input clk, // 时钟信号 input rst_n, // 复位信号,低电平有效 input we, // 写使能信号 input [7:0] din, // 写数据信号 input re, // 读使能信号 output reg [7:0] dout,// 读数据信号 output reg full, // 写满指示信号 output reg empty // 读空指示信号 ); parameter DEPTH = 32; // FIFO深度 parameter WIDTH = 8; // 数据位宽 reg [7:0] mem [0:DEPTH-1]; // 存储FIFO数据的RAM reg [4:0] wr_ptr; // 写指针 reg [4:0] rd_ptr; // 读指针 reg [4:0] count; // FIFO中当前存储的数据数量 always @(posedge clk or negedge rst_n) begin if(!rst_n) begin wr_ptr <= 0; rd_ptr <= 0; count <= 0; full <= 0; empty <= 1; end else begin if(we && !full) begin // 写操作 mem[wr_ptr] <= din; wr_ptr <= wr_ptr + 1; count <= count + 1; if(wr_ptr == rd_ptr) // FIFO已满 full <= 1; empty <= 0; end else if(re && !empty) begin // 读操作 dout <= mem[rd_ptr]; rd_ptr <= rd_ptr + 1; count <= count - 1; if(rd_ptr == wr_ptr) // FIFO为空 empty <= 1; full <= 0; end end end endmodule编写测试激励
时间: 2024-02-14 15:03:33 浏览: 77
ALTERA FPGA IP FIFO 8bitX8 FIFO读写测试Verilog源码工程文件.zip
5星 · 资源好评率100%
下面是一个简单的测试激励代码,可以测试FIFO的基本读写功能:
```
module fifo_tb;
reg clk, rst_n, we, re;
reg [7:0] din;
wire [7:0] dout;
wire full, empty;
// 实例化FIFO模块
fifo dut (
.clk(clk),
.rst_n(rst_n),
.we(we),
.din(din),
.re(re),
.dout(dout),
.full(full),
.empty(empty)
);
// 时钟信号
always #5 clk = ~clk;
// 初始化信号
initial begin
clk = 0;
rst_n = 0;
we = 0;
din = 0;
re = 0;
#10 rst_n = 1;
end
// 写入数据
initial begin
din = 8'h01;
#20 we = 1;
#20 we = 0;
din = 8'h02;
#20 we = 1;
#20 we = 0;
din = 8'h03;
#20 we = 1;
#20 we = 0;
end
// 读出数据
initial begin
#100 re = 1;
#20 re = 0;
#20 re = 1;
#20 re = 0;
#20 re = 1;
#20 re = 0;
end
endmodule
```
在这个测试激励中,我们首先将FIFO的复位信号rst_n置为低电平,然后等待一段时间后将其置为高电平,开始测试。接着我们在时钟上升沿时依次写入数据,等待一定时间后再依次读出这些数据。可以通过观察FIFO的读出数据dout是否与写入数据din相等来判断测试结果是否正确。
阅读全文