-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathloop_add_4_copy_tb.v
120 lines (91 loc) · 2.83 KB
/
loop_add_4_copy_tb.v
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
`define assert(signal, value) if ((signal) !== (value)) begin $display("ASSERTION FAILED in %m: signal != value"); $finish(1); end
module test();
reg clk;
reg rst;
wire valid;
wire [31:0] global_state_dbg;
wire [31:0] wdata_temp_reg_dbg;
// Depth 16, width 32 RAM
reg [4:0] dbg_addr;
wire [31:0] dbg_data;
reg [4:0] dbg_wr_addr;
reg [31:0] dbg_wr_data;
reg dbg_wr_en;
wire [4:0] waddr;
wire [31:0] wdata;
wire [0:0] wen;
wire [4:0] raddr0;
wire [4:0] raddr1;
wire [31:0] rdata0;
wire [31:0] rdata1;
reg [31:0] clocks;
reg [31:0] max_clocks;
reg in_start;
reg [31:0] mem_val;
initial begin
#1 clk = 0;
clocks = 0;
max_clocks = 50;
rst = 1;
in_start = 1;
mem_val = 1;
end // initial begin
always @(posedge clk) begin
$display("-- In tb, waddr_0 = %d", waddr);
$display("-- In tb, wdata_0 = %d", wdata);
$display("-- In tb, raddr_0 = %d", raddr0);
$display("-- In tb, rdata_0 = %d", rdata0);
$display("-- dbg_data = %d", dbg_data);
$display("-- dbg_addr = %d", dbg_addr);
$display("-- clocks = %d", clocks);
$display("-- wdata_temp_reg_dbg = %d", wdata_temp_reg_dbg);
clocks <= clocks + 1;
if (in_start) begin
dbg_wr_addr <= mem_val - 1;
dbg_wr_data <= mem_val;
dbg_wr_en <= 1;
mem_val <= mem_val + 1;
end else begin
dbg_wr_en <= 0;
end
if (clocks == 10) begin
mem_val <= mem_val + 1;
rst <= 0;
in_start <= 0;
dbg_addr <= 10;
end
if (clocks >= max_clocks) begin
$display("debug data at end = %d", dbg_data);
`assert(dbg_data, 1 + 4 + 6)
// 0 -> 1 + 4 + 6
// 1 -> 2 + 4 + 6
// 2 -> 3 + 4 + 6
// 3 -> 1 + 4 + 12 + 6
$display("Passed");
$finish();
end
end
always #3 clk = !clk;
RAM2 mem(.clk(clk),
.rst(rst),
.raddr_0(raddr0),
.rdata_0(rdata0),
.raddr_1(raddr1),
.rdata_1(rdata1),
.debug_write_addr(dbg_wr_addr),
.debug_write_data(dbg_wr_data),
.debug_write_en(dbg_wr_en),
.debug_addr(dbg_addr),
.debug_data(dbg_data),
.wen(wen),
.wdata(wdata),
.waddr(waddr));
loop_add_4_copy ss(.clk(clk),
.rst(rst),
.valid(valid),
.ram_waddr_0(waddr), .ram_wdata_0(wdata), .ram_wen_0(wen),
.ram_raddr_0(raddr0), .ram_rdata_0(rdata0),
.global_state_dbg(global_state_dbg));
//,
// .wdata_temp_reg_dbg(wdata_temp_reg_dbg));
endmodule