TB Fifo
TB Fifo
//----------------------------------------------------------------
// WR TX
//
// +-------+ +--------+
//__________| |______| |______ clk_i
//
// +--------------+
//__________| |______________ wr_fifo
//
//
// +------------------------------
//_________|data xxxxxxxxxxxxxx wr_fifo_data
// +------------------------------
//
// RD TX
// +-------+ +--------+ +--------+
//__________| |______| |______| |_________ clk_i
//
// +--------------+
//__________| |__________________________________ rd_fifo
//
// +---------------+-------------------
//_________________________|wait 1clk | rd_data xxxxx rd_fifo_data
// +---------------+-------------------
//
//------------------------------------------------------------------
module tb_fifo;
localparam WIDTH=8, DEPTH=16;
reg clk_i=0 ;
reg rst_n=0 ;
// wr port
reg wr_fifo =1'b0 ;
reg [WIDTH-1:0] wr_fifo_data = 'd0 ;
// rd port
reg rd_fifo = 1'b0 ;
wire [WIDTH-1:0]rd_fifo_data ;
// flags
wire empty ;
wire full ;
localparam T=10;
// fifo inst
fifo FIFO_INST (
.clk_i (clk_i ),
.rst_n (rst_n ),
.wr_fifo (wr_fifo),
.wr_fifo_data (wr_fifo_data),
.rd_fifo (rd_fifo),
.rd_fifo_data (rd_fifo_data),
.empty (empty),
.full (full)
);
reg [WIDTH-1:0] sample_read_data;
integer i=0;
//clock gen
always #(T/2) clk_i = ~ clk_i;
// reset gen
initial begin
@(negedge clk_i);
rst_n = 1'b1;
end
task fifo_write(
input [WIDTH-1:0] wr_data
);
begin
@(negedge clk_i);
wr_fifo = 1'b1;
wr_fifo_data = wr_data;
@(negedge clk_i);
wr_fifo = 1'b0;
endtask
task fifo_read(
output [WIDTH-1:0] rd_data
);
begin
@(negedge clk_i);
rd_fifo = 1'b1;
task wr_blast;
begin
for (i=0;i<16;i=i+1) begin
fifo_write ((i%255)+1);
end
end
endtask
task rd_balst;
begin
for (i=0;i<16;i=i+1) begin
fifo_read (sample_read_data);
end
end
endtask
task single_write_read;
begin
fifo_write (8'h01);
fifo_read (sample_read_data);
end
endtask
initial begin
$dumpfile ("tb_fifo.vcd");
$dumpvars (0, tb_fifo);
end
endmodule