Skip to content

Commit 66a82b2

Browse files
committed
add tests, conv files, etc
1 parent f941d7c commit 66a82b2

File tree

10 files changed

+49587
-5
lines changed

10 files changed

+49587
-5
lines changed

apps/guass-pyramid/ready-val/conv/conv2d_1.v

Lines changed: 12720 additions & 0 deletions
Large diffs are not rendered by default.

apps/guass-pyramid/ready-val/conv/conv2d_144.v

Lines changed: 4426 additions & 0 deletions
Large diffs are not rendered by default.

apps/guass-pyramid/ready-val/conv/conv2d_16.v

Lines changed: 4826 additions & 0 deletions
Large diffs are not rendered by default.

apps/guass-pyramid/ready-val/conv/conv2d_2.v

Lines changed: 10565 additions & 0 deletions
Large diffs are not rendered by default.

apps/guass-pyramid/ready-val/conv/conv2d_4.v

Lines changed: 6971 additions & 0 deletions
Large diffs are not rendered by default.

apps/guass-pyramid/ready-val/conv/conv2d_48.v

Lines changed: 4515 additions & 0 deletions
Large diffs are not rendered by default.

apps/guass-pyramid/ready-val/conv/conv2d_8.v

Lines changed: 5362 additions & 0 deletions
Large diffs are not rendered by default.

apps/guass-pyramid/ready-val/justfile

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,20 @@ test-blur D N:
5555

5656
# Quick blur test with default parameters
5757
test-blur-default: (test-blur "8" "4")
58+
59+
# Test Pyramid module with specific N values for each blur stage
60+
test-pyramid blur0_n blur1_n blur_up_n:
61+
@echo "Testing Pyramid with Blur0_N={{blur0_n}}, Blur1_N={{blur1_n}}, BlurUp_N={{blur_up_n}}"
62+
sed 's/parameter Blur0_N = 16;/parameter Blur0_N = {{blur0_n}};/' tests/pyramid_tb.sv > tests/pyramid_tb_{{blur0_n}}_{{blur1_n}}_{{blur_up_n}}.sv
63+
sed -i '' 's/parameter Blur1_N = 16;/parameter Blur1_N = {{blur1_n}};/' tests/pyramid_tb_{{blur0_n}}_{{blur1_n}}_{{blur_up_n}}.sv
64+
sed -i '' 's/parameter BlurUp_N = 16;/parameter BlurUp_N = {{blur_up_n}};/' tests/pyramid_tb_{{blur0_n}}_{{blur1_n}}_{{blur_up_n}}.sv
65+
verilator {{VFLAGS_TRACE}} -o sim_pyramid_{{blur0_n}}_{{blur1_n}}_{{blur_up_n}} tests/pyramid_tb_{{blur0_n}}_{{blur1_n}}_{{blur_up_n}}.sv valid-hold.sv
66+
./obj_dir/sim_pyramid_{{blur0_n}}_{{blur1_n}}_{{blur_up_n}}
67+
@[ -f pyramid_tb.vcd ] && mv pyramid_tb.vcd pyramid_tb_{{blur0_n}}_{{blur1_n}}_{{blur_up_n}}.vcd || true
68+
rm tests/pyramid_tb_{{blur0_n}}_{{blur1_n}}_{{blur_up_n}}.sv
69+
70+
# Quick pyramid test with default parameters
71+
test-pyramid-default: (test-pyramid "16" "16" "16")
72+
73+
# Test pyramid with small N values for faster simulation
74+
test-pyramid-fast: (test-pyramid "4" "4" "4")
Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
/* verilator lint_off DECLFILENAME */
2+
/* verilator lint_off MULTITOP */
3+
4+
module pyramid_tb;
5+
parameter Blur0_N = 16;
6+
parameter Blur1_N = 16;
7+
parameter BlurUp_N = 16;
8+
parameter TIMEOUT = 10000; // Max cycles before timeout
9+
10+
logic clk, reset;
11+
logic valid_i, ready_i, valid_o, ready_o;
12+
logic[7:0][7:0][7:0] in, out;
13+
14+
// Debug signals
15+
logic[3:0] st;
16+
logic[1:0] blur0_st, blur1_st, blur_up_st;
17+
logic[7:0][7:0][7:0] level0_stable;
18+
logic[3:0][3:0][7:0] level1_stable;
19+
logic[7:0][7:0][7:0] upsampled_stable;
20+
21+
// Instantiate the Pyramid module
22+
Pyramid #(
23+
.Blur0_N(Blur0_N),
24+
.Blur1_N(Blur1_N),
25+
.BlurUp_N(BlurUp_N)
26+
) dut (
27+
.clk(clk),
28+
.reset(reset),
29+
.valid_i(valid_i),
30+
.ready_i(ready_i),
31+
.in(in),
32+
.valid_o(valid_o),
33+
.ready_o(ready_o),
34+
.out(out),
35+
.st(st),
36+
.blur0_st(blur0_st),
37+
.blur1_st(blur1_st),
38+
.blur_up_st(blur_up_st),
39+
.level0_stable(level0_stable),
40+
.level1_stable(level1_stable),
41+
.upsampled_stable(upsampled_stable)
42+
);
43+
44+
// Clock generation
45+
always #5 clk = ~clk;
46+
47+
// Simulation control and monitoring
48+
int cycle_count = 0;
49+
50+
initial begin
51+
$dumpfile("pyramid_tb.vcd");
52+
$dumpvars(0, pyramid_tb);
53+
54+
// Initialize signals
55+
clk = 0;
56+
reset = 1;
57+
valid_i = 0;
58+
ready_o = 1; // Always ready to receive output
59+
60+
// Create a simple test pattern for input
61+
for (int i = 0; i < 8; i++) begin
62+
for (int j = 0; j < 8; j++) begin
63+
in[i][j] = 8'(i * 8 + j + 1); // Pattern: 1,2,3...64
64+
end
65+
end
66+
67+
$display("=== Pyramid Testbench ===");
68+
$display("Parameters: Blur0_N=%0d, Blur1_N=%0d, BlurUp_N=%0d", Blur0_N, Blur1_N, BlurUp_N);
69+
$display("Input pattern:");
70+
for (int i = 0; i < 8; i++) begin
71+
$write(" ");
72+
for (int j = 0; j < 8; j++) begin
73+
$write("%3d ", in[i][j]);
74+
end
75+
$display("");
76+
end
77+
$display("");
78+
79+
// Reset sequence
80+
repeat(3) @(posedge clk);
81+
reset = 0;
82+
83+
// Wait for ready_i
84+
while (!ready_i) begin
85+
@(posedge clk);
86+
cycle_count++;
87+
if (cycle_count > TIMEOUT) begin
88+
$error("TIMEOUT: Module never became ready (ready_i)");
89+
$finish;
90+
end
91+
end
92+
93+
$display("Module ready after %0d cycles", cycle_count);
94+
95+
// Assert valid_i for one cycle
96+
valid_i = 1;
97+
@(posedge clk);
98+
cycle_count++;
99+
valid_i = 0;
100+
101+
$display("Input submitted at cycle %0d", cycle_count);
102+
103+
// Wait for output to be valid
104+
while (!valid_o) begin
105+
@(posedge clk);
106+
cycle_count++;
107+
if (cycle_count > TIMEOUT) begin
108+
$error("TIMEOUT: Module never produced output (valid_o) after %0d cycles", TIMEOUT);
109+
$error("Final state: st=%0d, blur0_st=%0d, blur1_st=%0d, blur_up_st=%0d",
110+
st, blur0_st, blur1_st, blur_up_st);
111+
$finish;
112+
end
113+
114+
// Progress indicator every 100 cycles
115+
if (cycle_count % 100 == 0) begin
116+
$display("Cycle %0d: st=%0d, blur0_st=%0d, blur1_st=%0d, blur_up_st=%0d",
117+
cycle_count, st, blur0_st, blur1_st, blur_up_st);
118+
end
119+
end
120+
121+
$display("\n=== RESULTS ===");
122+
$display("Processing completed in %0d cycles", cycle_count);
123+
124+
$display("\nFinal output:");
125+
for (int i = 0; i < 8; i++) begin
126+
$write(" ");
127+
for (int j = 0; j < 8; j++) begin
128+
$write("%3d ", out[i][j]);
129+
end
130+
$display("");
131+
end
132+
133+
$display("\nDebug signals:");
134+
$display("Final state: %0d", st);
135+
$display("Blur states: blur0=%0d, blur1=%0d, blur_up=%0d", blur0_st, blur1_st, blur_up_st);
136+
137+
$display("\nlevel0_stable (8x8):");
138+
for (int i = 0; i < 8; i++) begin
139+
$write(" ");
140+
for (int j = 0; j < 8; j++) begin
141+
$write("%3d ", level0_stable[i][j]);
142+
end
143+
$display("");
144+
end
145+
146+
$display("\nlevel1_stable (4x4):");
147+
for (int i = 0; i < 4; i++) begin
148+
$write(" ");
149+
for (int j = 0; j < 4; j++) begin
150+
$write("%3d ", level1_stable[i][j]);
151+
end
152+
$display("");
153+
end
154+
155+
$display("\nupsampled_stable (8x8):");
156+
for (int i = 0; i < 8; i++) begin
157+
$write(" ");
158+
for (int j = 0; j < 8; j++) begin
159+
$write("%3d ", upsampled_stable[i][j]);
160+
end
161+
$display("");
162+
end
163+
164+
$display("\n=== TEST COMPLETED SUCCESSFULLY ===");
165+
$finish;
166+
end
167+
168+
// Timeout watchdog
169+
initial begin
170+
#(TIMEOUT * 10); // 10ns per cycle
171+
$error("GLOBAL TIMEOUT: Simulation exceeded maximum time");
172+
$finish;
173+
end
174+
175+
endmodule

apps/guass-pyramid/ready-val/valid-hold.sv

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,11 @@ end
511511

512512
endmodule
513513

514-
module Pyramid (
514+
module Pyramid #(
515+
parameter Blur0_N = 16,
516+
parameter Blur1_N = 16,
517+
parameter BlurUp_N = 16
518+
) (
515519
input logic clk,
516520
input logic reset,
517521

@@ -525,6 +529,7 @@ module Pyramid (
525529

526530
/// Debug signals
527531
// Blur states
532+
output logic[3:0] st,
528533
output logic[1:0] blur0_st,
529534
output logic[1:0] blur1_st,
530535
output logic[1:0] blur_up_st,
@@ -544,7 +549,7 @@ localparam bit[3:0]
544549
Blend=7,
545550
Writing=8;
546551

547-
logic[3:0] st, nxt_st;
552+
logic[3:0] nxt_st;
548553
always_comb begin
549554
nxt_st = st;
550555
// All signals are deasserted unless in specific state.
@@ -622,7 +627,7 @@ Pad#(.W(8), .D0(8), .D1(8)) pad0(.in(pad0_in), .out(pad0_out));
622627
logic blur0_valid_i, blur0_valid_o, blur0_ready_i, blur0_ready_o;
623628
logic[7:0][7:0][7:0] blur0_out;
624629

625-
Blur#(.D0(10), .D1(10)) blur0(
630+
Blur#(.N(Blur0_N), .D0(10), .D1(10)) blur0(
626631
.clk, .reset, .state(blur0_st),
627632
.in(pad0_out), .valid_i(blur0_valid_i), .ready_i(blur0_ready_i),
628633
.out(blur0_out), .valid_o(blur0_valid_o), .ready_o(blur0_ready_o)
@@ -660,7 +665,7 @@ Pad#(.W(8), .D0(4), .D1(4)) pad1 (
660665
// Should we expect it to be stable during the execution of the module?
661666
logic blur1_valid_i, blur1_valid_o, blur1_ready_i, blur1_ready_o;
662667
logic[3:0][3:0][7:0] blur1_out;
663-
Blur#(.D0(6), .D1(6)) blur1(
668+
Blur#(.N(Blur1_N), .D0(6), .D1(6)) blur1(
664669
.clk, .reset, .state(blur1_st),
665670
.in(pad1_out), .valid_i(blur1_valid_i), .ready_i(blur1_ready_i),
666671
.out(blur1_out), .valid_o(blur1_valid_o), .ready_o(blur1_ready_o)
@@ -693,7 +698,7 @@ Pad#(.W(8), .D0(8), .D1(8)) pad_up(
693698

694699
logic blur_up_valid_i, blur_up_valid_o, blur_up_ready_i, blur_up_ready_o;
695700
logic[7:0][7:0][7:0] blur_up_out;
696-
Blur#(.D0(10), .D1(10)) blur_up(
701+
Blur#(.N(BlurUp_N), .D0(10), .D1(10)) blur_up(
697702
.clk, .reset, .state(blur_up_st),
698703
.in(pad_up_out), .valid_i(blur_up_valid_i), .ready_i(blur_up_ready_i),
699704
.out(blur_up_out), .valid_o(blur_up_valid_o), .ready_o(blur_up_ready_o)

0 commit comments

Comments
 (0)