forked from tanchou/Verilog
Tb for fifo working fine
This commit is contained in:
@@ -1,3 +1,3 @@
|
|||||||
@echo off
|
@echo off
|
||||||
echo === Lancement de GTKWave ===
|
echo === Lancement de GTKWave ===
|
||||||
gtkwave runs/uart.vcd
|
gtkwave runs/fifo.vcd
|
||||||
|
@@ -6,7 +6,7 @@ setlocal enabledelayedexpansion
|
|||||||
set OUT=runs/sim.vvp
|
set OUT=runs/sim.vvp
|
||||||
|
|
||||||
:: Top-level testbench module
|
:: Top-level testbench module
|
||||||
set TOP=tb_uart
|
set TOP=tb_fifo
|
||||||
|
|
||||||
:: Répertoires contenant des fichiers .v
|
:: Répertoires contenant des fichiers .v
|
||||||
set DIRS=src/verilog tests/verilog IP/verilog
|
set DIRS=src/verilog tests/verilog IP/verilog
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
module uart_tx #(
|
module fifo #(
|
||||||
parameter DETPH = 16,
|
parameter DETPH = 16,
|
||||||
parameter WIDTH = 8
|
parameter WIDTH = 8
|
||||||
)(
|
)(
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
output wire[WIDTH-1:0] rd_data,
|
output wire[WIDTH-1:0] rd_data,
|
||||||
|
|
||||||
output wire full,
|
output wire full,
|
||||||
output wire empty,
|
output wire empty
|
||||||
);
|
);
|
||||||
|
|
||||||
reg [WIDTH-1:0] fifo[0:DETPH-1];
|
reg [WIDTH-1:0] fifo[0:DETPH-1];
|
||||||
@@ -21,6 +21,12 @@
|
|||||||
assign empty = (count == 0);
|
assign empty = (count == 0);
|
||||||
assign rd_data = fifo[rd_ptr];
|
assign rd_data = fifo[rd_ptr];
|
||||||
|
|
||||||
|
initial begin
|
||||||
|
wr_ptr = 0;
|
||||||
|
rd_ptr = 0;
|
||||||
|
count = 0;
|
||||||
|
end
|
||||||
|
|
||||||
always @(posedge clk) begin
|
always @(posedge clk) begin
|
||||||
if (wr_en && !full) begin
|
if (wr_en && !full) begin
|
||||||
fifo[wr_ptr] <= wr_data;
|
fifo[wr_ptr] <= wr_data;
|
||||||
|
@@ -4,15 +4,92 @@ module tb_fifo;
|
|||||||
|
|
||||||
reg clk = 0;
|
reg clk = 0;
|
||||||
|
|
||||||
|
reg wr_en = 0;
|
||||||
|
reg rd_en = 0;
|
||||||
|
reg [7:0] wr_data = 0;
|
||||||
|
wire [7:0] rd_data;
|
||||||
|
wire full;
|
||||||
|
wire empty;
|
||||||
|
|
||||||
always #18.5 clk = ~clk;
|
always #18.5 clk = ~clk;
|
||||||
|
|
||||||
|
fifo #(
|
||||||
|
.DETPH(16),
|
||||||
|
.WIDTH(8)
|
||||||
|
) fifo_inst (
|
||||||
|
.clk(clk),
|
||||||
|
.wr_en(wr_en),
|
||||||
|
.wr_data(wr_data),
|
||||||
|
.rd_en(rd_en),
|
||||||
|
.rd_data(rd_data),
|
||||||
|
.full(full),
|
||||||
|
.empty(empty)
|
||||||
|
);
|
||||||
|
|
||||||
initial begin
|
initial begin
|
||||||
$dumpfile("runs/fifo.vcd");
|
$dumpfile("runs/fifo.vcd");
|
||||||
$dumpvars(0, tb_fifo);
|
$dumpvars(0, tb_fifo);
|
||||||
|
|
||||||
|
wr_en = 1;
|
||||||
|
wr_data = 8'hAA;
|
||||||
|
|
||||||
|
#37.0;
|
||||||
|
|
||||||
|
wr_en = 0;
|
||||||
|
|
||||||
|
#37.0;
|
||||||
|
|
||||||
|
wr_en = 1;
|
||||||
|
wr_data = 8'hBB;
|
||||||
|
|
||||||
|
#37.0;
|
||||||
|
|
||||||
|
wr_en = 0;
|
||||||
|
|
||||||
|
#37.0;
|
||||||
|
|
||||||
|
wr_en = 1;
|
||||||
|
wr_data = 8'hCC;
|
||||||
|
|
||||||
|
#37.0;
|
||||||
|
|
||||||
|
wr_en = 0;
|
||||||
|
|
||||||
|
#37.0;
|
||||||
|
|
||||||
|
$display("rd_data: %h", rd_data);
|
||||||
|
|
||||||
|
rd_en = 1;
|
||||||
|
$display("rd_data: %h", rd_data);
|
||||||
|
#37.0;
|
||||||
|
|
||||||
|
rd_en = 0;
|
||||||
|
|
||||||
|
#37.0;
|
||||||
|
|
||||||
|
rd_en = 1;
|
||||||
|
$display("rd_data: %h", rd_data);
|
||||||
|
#37.0;
|
||||||
|
rd_en = 0;
|
||||||
|
|
||||||
|
#37.0;
|
||||||
|
|
||||||
|
rd_en = 1;
|
||||||
|
$display("rd_data: %h", rd_data);
|
||||||
|
#37.0;
|
||||||
|
rd_en = 0;
|
||||||
|
|
||||||
|
#37.0;
|
||||||
|
|
||||||
|
rd_en = 1;
|
||||||
|
$display("rd_data: %h", rd_data);
|
||||||
|
#19.0;
|
||||||
|
rd_en = 0;
|
||||||
|
|
||||||
|
#37.0;
|
||||||
|
|
||||||
|
|
||||||
|
$finish;
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user