Skip to content

Commit 4950935

Browse files
committed
Start to populate unit test suites
1 parent 044d2ea commit 4950935

File tree

6 files changed

+189
-337
lines changed

6 files changed

+189
-337
lines changed

sim/test/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
UT="*unit_test.sv"
22

33
test:
4-
@svutRun.py
4+
@svutRun.py -f files.f
55

66
gui:
77
@svutRun.py -gui

sim/test/async_fifo_unit_test.sv

Lines changed: 109 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,96 +1,148 @@
11
`include "svut_h.sv"
2-
`include "../../src/vlog/async_fifo.v"
32
`timescale 1 ns / 1 ps
43

54
module async_fifo_unit_test;
65

76
`SVUT_SETUP
87

9-
parameter WIDTH = 8;
10-
parameter POINTER = 4;
8+
integer i;
119

12-
reg wr_clk;
13-
reg wr_arstn;
14-
reg wr_en;
15-
reg [WIDTH-1:0] wr_data;
16-
wire wr_full;
17-
reg rd_clk;
18-
reg rd_arstn;
19-
reg rd_en;
20-
wire [WIDTH-1:0] rd_data;
21-
wire rd_empty;
10+
parameter DSIZE = 32;
11+
parameter ASIZE = 4;
12+
13+
reg wclk;
14+
reg wrst_n;
15+
reg winc;
16+
reg [DSIZE-1:0] wdata;
17+
wire wfull;
18+
reg rclk;
19+
reg rrst_n;
20+
reg rinc;
21+
wire [DSIZE-1:0] rdata;
22+
wire rempty;
2223

2324
async_fifo
2425
#(
25-
.WIDTH (WIDTH),
26-
.POINTER (POINTER)
26+
DSIZE,
27+
ASIZE
2728
)
2829
dut
2930
(
30-
wr_clk,
31-
wr_arstn,
32-
wr_en,
33-
wr_data,
34-
wr_full,
35-
rd_clk,
36-
rd_arstn,
37-
rd_en,
38-
rd_data,
39-
rd_empty
31+
wclk,
32+
wrst_n,
33+
winc,
34+
wdata,
35+
wfull,
36+
rclk,
37+
rrst_n,
38+
rinc,
39+
rdata,
40+
rempty
4041
);
4142

4243
// An example to create a clock
43-
initial wr_clk = 0;
44-
initial rd_clk = 0;
45-
always #2 wr_clk = ~wr_clk;
46-
always #2 rd_clk = ~rd_clk;
44+
initial wclk = 1'b0;
45+
always #2 wclk <= ~wclk;
46+
initial rclk = 1'b0;
47+
always #3 rclk <= ~rclk;
4748

4849
// An example to dump data for visualization
4950
initial $dumpvars(0,async_fifo_unit_test);
5051

5152
task setup();
5253
begin
53-
#0;
54-
wr_arstn = 1;
55-
rd_arstn = 1;
56-
init_write();
57-
init_read();
58-
#50;
59-
wr_arstn = 1;
60-
rd_arstn = 1;
54+
wrst_n = 1'b0;
55+
winc = 1'b0;
56+
wdata = 0;
57+
rrst_n = 1'b0;
58+
rinc = 1'b0;
59+
#100;
6160
end
6261
endtask
6362

6463
task teardown();
6564
begin
66-
#100;
67-
@(posedge wr_clk);
68-
@(posedge rd_clk);
65+
// teardown() runs when a test ends
6966
end
7067
endtask
7168

72-
task init_write();
73-
begin
74-
wr_arstn = 0;
75-
wr_en = 1'b0;
76-
wr_data = 0;
77-
end
78-
endtask
69+
`UNIT_TESTS
7970

80-
task init_read();
81-
begin
82-
rd_arstn = 0;
83-
rd_en = 1'b0;
84-
end
85-
endtask
71+
`UNIT_TEST(IDLE)
72+
`INFO("Start IDLE test");
73+
wrst_n = 1;
74+
rrst_n = 1;
75+
#200;
76+
`FAIL_IF(wfull);
77+
`FAIL_IF(!rempty);
78+
`UNIT_TEST_END
8679

87-
`UNIT_TESTS
80+
`UNIT_TEST(SIMPLE_WRITE_AND_READ)
81+
`INFO("Simple write then read");
82+
wrst_n = 1;
83+
rrst_n = 1;
84+
#200;
85+
@(posedge wclk)
86+
winc = 1;
87+
wdata = 32'hA;
88+
@(posedge wclk)
89+
winc = 0;
90+
91+
@(posedge rclk)
92+
wait (rempty == 0);
93+
`FAIL_IF_NOT_EQUAL(rdata, 32'hA);
94+
95+
`UNIT_TEST_END
8896

89-
`UNIT_TEST(INIT_FIFO)
90-
wait (wr_full == 1'b0);
91-
wait (rd_empty == 1'b0);
97+
`UNIT_TEST(MULTIPLE_WRITE_AND_READ)
98+
`INFO("Multiple write then read");
99+
wrst_n = 1;
100+
rrst_n = 1;
101+
#200;
102+
for (i=0; i<20; i = i+1) begin
103+
@(posedge wclk)
104+
winc = 1;
105+
wdata = i;
106+
@(posedge wclk)
107+
winc = 0;
108+
109+
@(posedge rclk)
110+
wait (rempty == 0);
111+
`FAIL_IF_NOT_EQUAL(rdata, i);
112+
end
92113
`UNIT_TEST_END
93114

115+
`UNIT_TEST(TEST_FULL_FLAG)
116+
`INFO("Test full flag test");
117+
wrst_n = 1;
118+
rrst_n = 1;
119+
#200;
120+
@(posedge wclk)
121+
for (i=0; i<2**ASIZE; i = i+1) begin
122+
@(posedge wclk)
123+
winc = 1;
124+
wdata = i;
125+
`FAIL_IF_NOT_EQUAL(wfull, 1);
126+
end
127+
@(posedge wclk)
128+
#50;
129+
`UNIT_TEST_END
130+
131+
`UNIT_TEST(TEST_EMPTY_FLAG)
132+
`INFO("Test empty flag test");
133+
wrst_n = 1;
134+
rrst_n = 1;
135+
#200;
136+
@(posedge wclk)
137+
for (i=0; i<2**ASIZE; i = i+1) begin
138+
@(posedge wclk)
139+
winc = 1;
140+
wdata = i;
141+
`FAIL_IF_NOT_EQUAL(wfull, 1);
142+
end
143+
@(posedge wclk)
144+
#50;
145+
`UNIT_TEST_END
94146
`UNIT_TESTS_END
95147

96148
endmodule

sim/test/fifo_unit_test.sv

Lines changed: 0 additions & 69 deletions
This file was deleted.

sim/test/files.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
../../src/vlog/fifo.v
1+
../../src/vlog/async_fifo.v
22
../../src/vlog/fifo_2mem.v
33
../../src/vlog/rptr_empty.v
44
../../src/vlog/sync_r2w.v

0 commit comments

Comments
 (0)