33{ %- block dut_support % }
44 { % sv_line_anchor % }
55
6- external_reg ext_reg_inst (
7- .clk (clk),
8- .rst (rst),
9-
10- .req (hwif_out.er_rw.req),
11- .req_is_wr (hwif_out.er_rw.req_is_wr),
12- .wr_data (hwif_out.er_rw.wr_data),
13- .wr_biten (hwif_out.er_rw.wr_biten),
14- .rd_ack (hwif_in.er_rw.rd_ack),
15- .rd_data (hwif_in.er_rw.rd_data),
16- .wr_ack (hwif_in.er_rw.wr_ack)
17- );
18-
19- external_reg ro_reg_inst (
20- .clk (clk),
21- .rst (rst),
22-
23- .req (hwif_out.er_r.req),
24- .req_is_wr (hwif_out.er_r.req_is_wr),
25- .wr_data (32'b0 ),
26- .wr_biten (32'b0 ),
27- .rd_ack (hwif_in.er_r.rd_ack),
28- .rd_data (hwif_in.er_r.rd_data),
29- .wr_ack ()
30- );
31-
32- external_reg wo_reg_inst (
33- .clk (clk),
34- .rst (rst),
35-
36- .req (hwif_out.er_w.req),
37- .req_is_wr (hwif_out.er_w.req_is_wr),
38- .wr_data (hwif_out.er_w.wr_data),
39- .wr_biten (hwif_out.er_w.wr_biten),
40- .rd_ack (),
41- .rd_data (),
42- .wr_ack (hwif_in.er_w.wr_ack)
43- );
44-
456 external_block # (
467 .ADDR_WIDTH (3 )
478 ) mem_rw_inst (
6425 .clk (clk),
6526 .rst (rst),
6627
67- .req (hwif_out.mem_r .req),
68- .req_is_wr (hwif_out.mem_r .req_is_wr),
69- .addr (hwif_out.mem_r .addr),
28+ .req (hwif_out.mem_ro .req),
29+ .req_is_wr (hwif_out.mem_ro .req_is_wr),
30+ .addr (hwif_out.mem_ro .addr),
7031 .wr_data (32'b0 ),
7132 .wr_biten (32'b0 ),
72- .rd_ack (hwif_in.mem_r .rd_ack),
73- .rd_data (hwif_in.mem_r .rd_data),
74- .wr_ack (hwif_in.mem_r .wr_ack)
33+ .rd_ack (hwif_in.mem_ro .rd_ack),
34+ .rd_data (hwif_in.mem_ro .rd_data),
35+ .wr_ack (hwif_in.mem_ro .wr_ack)
7536 );
7637
7738 external_block # (
8041 .clk (clk),
8142 .rst (rst),
8243
83- .req (hwif_out.mem_w .req),
84- .req_is_wr (hwif_out.mem_w .req_is_wr),
85- .addr (hwif_out.mem_w .addr),
86- .wr_data (hwif_out.mem_w .wr_data),
87- .wr_biten (hwif_out.mem_w .wr_biten),
44+ .req (hwif_out.mem_wo .req),
45+ .req_is_wr (hwif_out.mem_wo .req_is_wr),
46+ .addr (hwif_out.mem_wo .addr),
47+ .wr_data (hwif_out.mem_wo .wr_data),
48+ .wr_biten (hwif_out.mem_wo .wr_biten),
8849 .rd_ack (),
8950 .rd_data (),
90- .wr_ack (hwif_in.mem_w.wr_ack)
51+ .wr_ack (hwif_in.mem_wo.wr_ack)
52+ );
53+ assign hwif_in.mem_wo.rd_ack = '0 ;
54+ assign hwif_in.mem_wo.rd_data = '0 ;
55+
56+ external_block # (
57+ .ADDR_WIDTH (4 )
58+ ) external_rf_inst (
59+ .clk (clk),
60+ .rst (rst),
61+
62+ .req (hwif_out.external_rf.req),
63+ .req_is_wr (hwif_out.external_rf.req_is_wr),
64+ .addr (hwif_out.external_rf.addr),
65+ .wr_data (hwif_out.external_rf.wr_data),
66+ .wr_biten (hwif_out.external_rf.wr_biten),
67+ .rd_ack (hwif_in.external_rf.rd_ack),
68+ .rd_data (hwif_in.external_rf.rd_data),
69+ .wr_ack (hwif_in.external_rf.wr_ack)
9170 );
92- assign hwif_in.mem_w.rd_ack = '0 ;
93- assign hwif_in.mem_w.rd_data = '0 ;
9471
9572{ %- endblock % }
9673
@@ -102,7 +79,7 @@ logic expected_rd_err;
10279logic bad_addr_expected_err;
10380logic bad_rw_expected_wr_err;
10481logic bad_rw_expected_rd_err;
105- logic [5 : 0 ] addr;
82+ logic [7 : 0 ] addr;
10683
10784 { % sv_line_anchor % }
10885 ## 1 ;
@@ -139,53 +116,29 @@ logic [5:0] addr;
139116 cpuif.write (addr, 81 , .expects_err (expected_wr_err));
140117 cpuif.assert_read (addr, 80 , .expects_err (expected_rd_err));
141118
142- // r_w - sw=w; hw=r; // Storage element
119+ // r_wo - sw=w; hw=r; // Storage element
143120 addr = 'h8 ;
144121 expected_rd_err = bad_rw_expected_rd_err;
145122 expected_wr_err = 'h0 ;
146123 cpuif.assert_read (addr, 0 , .expects_err (expected_rd_err));
147- assert (cb.hwif_out.r_w .f.value == 100 );
124+ assert (cb.hwif_out.r_wo .f.value == 100 );
148125
149126 cpuif.write (addr, 101 , .expects_err (expected_wr_err));
150127 cpuif.assert_read (addr, 0 , .expects_err (expected_rd_err));
151- assert (cb.hwif_out.r_w.f.value == 101 );
152-
153- // External registers
154- // er_rw - sw=rw; hw=na; // Storage element
155- addr = 'hC ;
156- expected_rd_err = 'h0 ;
157- expected_wr_err = 'h0 ;
158- ext_reg_inst.value = 'h8C ;
159- cpuif.assert_read (addr, 'h8C , .expects_err (expected_rd_err));
160- cpuif.write (addr, 'h8D , .expects_err (expected_wr_err));
161- cpuif.assert_read (addr, 'h8D , .expects_err (expected_rd_err));
162-
163- // er_r - sw=r; hw=na; // Wire/Bus - constant value
164- addr = 'h10 ;
165- expected_rd_err = 'h0 ;
166- expected_wr_err = bad_rw_expected_wr_err;
167- ro_reg_inst.value = 'hB4 ;
168- cpuif.assert_read (addr, 'hB4 , .expects_err (expected_rd_err));
169- cpuif.write (addr, 'hB5 , .expects_err (expected_wr_err));
170- cpuif.assert_read (addr, 'hB4 , .expects_err (expected_rd_err));
171-
172- // er_w - sw=w; hw=r; // Storage element
173- addr = 'h14 ;
174- expected_rd_err = bad_rw_expected_rd_err;
175- expected_wr_err = 'h0 ;
176- wo_reg_inst.value = 'hC8 ;
177- cpuif.assert_read (addr, 0 , .expects_err (expected_rd_err));
178- assert (wo_reg_inst.value == 'hC8 );
179-
180- cpuif.write (addr, 'hC9 , .expects_err (expected_wr_err));
181- cpuif.assert_read (addr, 0 , .expects_err (expected_rd_err));
182- assert (wo_reg_inst.value == 'hC9 );
128+ assert (cb.hwif_out.r_wo.f.value == 101 );
183129
184130 // Reading/writing from/to non existing register
185131 addr = 'h18 ;
186132 cpuif.assert_read (addr, 0 , .expects_err (bad_addr_expected_err));
187133 cpuif.write (addr, 'h8C , .expects_err (bad_addr_expected_err));
188134
135+ // Reading/writing from/to combined read AND write only register
136+ addr = 'h1C ;
137+ expected_rd_err = 'h0 ;
138+ expected_wr_err = 'h0 ;
139+ cpuif.assert_read (addr, 200 , .expects_err (expected_rd_err));
140+ cpuif.write (addr, 'h8C , .expects_err (expected_wr_err));
141+
189142 // External memories
190143 // mem_rw - sw=rw;
191144 addr = 'h20 ;
@@ -218,4 +171,11 @@ logic [5:0] addr;
218171 cpuif.assert_read (addr, 0 , .expects_err (expected_rd_err));
219172 assert (mem_wo_inst.mem[0 ] == 'hC9 );
220173
174+ // External rf;
175+ addr = 'h40 ;
176+ expected_rd_err = 'h0 ;
177+ expected_wr_err = 'h0 ;
178+ cpuif.assert_read (addr, 'h0 , .expects_err (expected_rd_err));
179+ cpuif.write (addr, 'hD0 , .expects_err (expected_wr_err));
180+ cpuif.assert_read (addr, 'hD0 , .expects_err (expected_rd_err));
221181{ % endblock % }
0 commit comments