I’ve been looking at various open-source RISC-V cores to hook up to the 2D sprite renderer I’ve been working on, and it looks like Rocket Chip is the way to go, since it’s so highly-configurable. That’s perfect for me, because game system cores have always been highly custom.
Let’s see what it takes to build some RTL on a stock Ubuntu 18.04 LTS install:
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
|
# Install dependencies sudo tee -a /etc/apt/sources .list.d /sbt .list sudo apt-key adv --keyserver hkp: //keyserver .ubuntu.com:80 \ --recv 642AC823 sudo apt-get update sudo apt-get install git autoconf automake autotools-dev \ curl libmpc-dev libmpfr-dev libgmp-dev libusb-1.0-0-dev \ gawk build-essential bison flex texinfo gperf libtool \ patchutils bc zlib1g-dev device-tree-compiler pkg-config \ libexpat-dev g++ flex bison python default-jdk sbt git clone /rocket-chip cd rocket-chip git submodule update --init git clone https: //github .com /freechipsproject/rocket-tools cd rocket-tools git submodule update --init --recursive export RISCV=` pwd ` export MAKEFLAGS= "$MAKEFLAGS -j2" . /build .sh . /build-rv32ima .sh cd .. /vsim # According to the README, we now need to run "make". make # You will likely get an "IO Error While decoding" error. # Just run "make" a second time. # This will still appear to fail due to # "vcs: command not found". VCS is a RTL simulator # like Icarus Verilog, but I think it's a paid product. # This leads me to believe that this "make" command # might be optional. make # Now (finally) build the verilog output! make verilog CONFIG=DefaultFPGAConfig # Let's see the output... ls -laSh generated-src |
Okay, if all goes well, in generated-src you should have the conveniently-named “freechips.rocketchip.system.DefaultFPGAConfig.v”
At this point I think I’ve added enough value to this post to publish it.
Next steps:
- Delete the TestHarness module from the file (“freechips.rocketchip.system.DefaultFPGAConfig.v”, which I’ve renamed “freechips.rocketchip.system.DefaultFPGAConfig_TestHarness_removed.v”)
- Add my own SystemVerilog testbench file, which will instantiate “ExampleRocketSystem” from the file (“Rocket” is the actual top-level module, but that only exposes a TileLink interface, and might be missing some default configuration).
- Copy some necessary verilog files into the generated-src directory (just because it seems more convenient to me, you can leave them where they are.
- Run it through Icarus Verilog
let me dump a BASH snippet here:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# Let's try to simulate things in icarus verilog cd generated-src # Let's copy some other verilog files we need into this subdirectory cp -r ../.. /src/main/resources/vsrc/ ./ iverilog '-Wall' '-g2012' \ freechips.rocketchip.system.DefaultFPGAConfig_TestHarness_removed. v \ freechips.rocketchip.system.DefaultFPGAConfig.behav_srams. v \ . /vsrc/AsyncResetReg . v \ . /vsrc/EICG_wrapper . v \ . /vsrc/plusarg_reader . v \ testbench.sv \ && vvp a.out |
TODO: Finish up the test bench and get it to run some assembly code (I’ll probably have to add the “SimAXIMem” from TestHarness…)
Here’s my testbench.sv file:
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
|
`default_nettype none `timescale 1ns/1ps module main_testbench; reg clock = 0; reg reset = 0; wire dut_debug_clockeddmi_dmi_req_ready; // wire dut_debug_clockeddmi_dmi_req_valid; reg dut_debug_clockeddmi_dmi_req_valid = 0; wire [6:0] dut_debug_clockeddmi_dmi_req_bits_addr; wire [31:0] dut_debug_clockeddmi_dmi_req_bits_data; wire [1:0] dut_debug_clockeddmi_dmi_req_bits_op; // wire dut_debug_clockeddmi_dmi_resp_ready; reg dut_debug_clockeddmi_dmi_resp_ready = 0; wire dut_debug_clockeddmi_dmi_resp_valid; wire [31:0] dut_debug_clockeddmi_dmi_resp_bits_data; wire [1:0] dut_debug_clockeddmi_dmi_resp_bits_resp; wire dut_debug_clockeddmi_dmiClock; wire dut_debug_clockeddmi_dmiReset; wire dut_debug_ndreset; wire dut_debug_dmactive; // wire [1:0] dut_interrupts; reg [1:0] dut_interrupts = 0; // wire dut_mem_axi4_0_aw_ready; reg dut_mem_axi4_0_aw_ready = 1; wire dut_mem_axi4_0_aw_valid; wire [3:0] dut_mem_axi4_0_aw_bits_id; wire [31:0] dut_mem_axi4_0_aw_bits_addr; wire [7:0] dut_mem_axi4_0_aw_bits_len; wire [2:0] dut_mem_axi4_0_aw_bits_size; wire [1:0] dut_mem_axi4_0_aw_bits_burst; wire dut_mem_axi4_0_aw_bits_lock; wire [3:0] dut_mem_axi4_0_aw_bits_cache; wire [2:0] dut_mem_axi4_0_aw_bits_prot; wire [3:0] dut_mem_axi4_0_aw_bits_qos; wire dut_mem_axi4_0_w_ready; wire dut_mem_axi4_0_w_valid; wire [63:0] dut_mem_axi4_0_w_bits_data; wire [7:0] dut_mem_axi4_0_w_bits_strb; wire dut_mem_axi4_0_w_bits_last; wire dut_mem_axi4_0_b_ready; wire dut_mem_axi4_0_b_valid; wire [3:0] dut_mem_axi4_0_b_bits_id; wire [1:0] dut_mem_axi4_0_b_bits_resp; wire dut_mem_axi4_0_ar_ready; wire dut_mem_axi4_0_ar_valid; wire [3:0] dut_mem_axi4_0_ar_bits_id; wire [31:0] dut_mem_axi4_0_ar_bits_addr; wire [7:0] dut_mem_axi4_0_ar_bits_len; wire [2:0] dut_mem_axi4_0_ar_bits_size; wire [1:0] dut_mem_axi4_0_ar_bits_burst; wire dut_mem_axi4_0_ar_bits_lock; wire [3:0] dut_mem_axi4_0_ar_bits_cache; wire [2:0] dut_mem_axi4_0_ar_bits_prot; wire [3:0] dut_mem_axi4_0_ar_bits_qos; wire dut_mem_axi4_0_r_ready; wire dut_mem_axi4_0_r_valid; wire [3:0] dut_mem_axi4_0_r_bits_id; wire [63:0] dut_mem_axi4_0_r_bits_data; wire [1:0] dut_mem_axi4_0_r_bits_resp; wire dut_mem_axi4_0_r_bits_last; wire dut_mmio_axi4_0_aw_ready; wire dut_mmio_axi4_0_aw_valid; wire [3:0] dut_mmio_axi4_0_aw_bits_id; wire [30:0] dut_mmio_axi4_0_aw_bits_addr; wire [7:0] dut_mmio_axi4_0_aw_bits_len; wire [2:0] dut_mmio_axi4_0_aw_bits_size; wire [1:0] dut_mmio_axi4_0_aw_bits_burst; wire dut_mmio_axi4_0_aw_bits_lock; wire [3:0] dut_mmio_axi4_0_aw_bits_cache; wire [2:0] dut_mmio_axi4_0_aw_bits_prot; wire [3:0] dut_mmio_axi4_0_aw_bits_qos; wire dut_mmio_axi4_0_w_ready; wire dut_mmio_axi4_0_w_valid; wire [63:0] dut_mmio_axi4_0_w_bits_data; wire [7:0] dut_mmio_axi4_0_w_bits_strb; wire dut_mmio_axi4_0_w_bits_last; wire dut_mmio_axi4_0_b_ready; wire dut_mmio_axi4_0_b_valid; wire [3:0] dut_mmio_axi4_0_b_bits_id; wire [1:0] dut_mmio_axi4_0_b_bits_resp; wire dut_mmio_axi4_0_ar_ready; wire dut_mmio_axi4_0_ar_valid; wire [3:0] dut_mmio_axi4_0_ar_bits_id; wire [30:0] dut_mmio_axi4_0_ar_bits_addr; wire [7:0] dut_mmio_axi4_0_ar_bits_len; wire [2:0] dut_mmio_axi4_0_ar_bits_size; wire [1:0] dut_mmio_axi4_0_ar_bits_burst; wire dut_mmio_axi4_0_ar_bits_lock; wire [3:0] dut_mmio_axi4_0_ar_bits_cache; wire [2:0] dut_mmio_axi4_0_ar_bits_prot; wire [3:0] dut_mmio_axi4_0_ar_bits_qos; wire dut_mmio_axi4_0_r_ready; wire dut_mmio_axi4_0_r_valid; wire [3:0] dut_mmio_axi4_0_r_bits_id; wire [63:0] dut_mmio_axi4_0_r_bits_data; wire [1:0] dut_mmio_axi4_0_r_bits_resp; wire dut_mmio_axi4_0_r_bits_last; wire dut_l2_frontend_bus_axi4_0_aw_ready; wire dut_l2_frontend_bus_axi4_0_aw_valid; wire [7:0] dut_l2_frontend_bus_axi4_0_aw_bits_id; wire [31:0] dut_l2_frontend_bus_axi4_0_aw_bits_addr; wire [7:0] dut_l2_frontend_bus_axi4_0_aw_bits_len; wire [2:0] dut_l2_frontend_bus_axi4_0_aw_bits_size; wire [1:0] dut_l2_frontend_bus_axi4_0_aw_bits_burst; wire dut_l2_frontend_bus_axi4_0_aw_bits_lock; wire [3:0] dut_l2_frontend_bus_axi4_0_aw_bits_cache; wire [2:0] dut_l2_frontend_bus_axi4_0_aw_bits_prot; wire [3:0] dut_l2_frontend_bus_axi4_0_aw_bits_qos; wire dut_l2_frontend_bus_axi4_0_w_ready; wire dut_l2_frontend_bus_axi4_0_w_valid; wire [63:0] dut_l2_frontend_bus_axi4_0_w_bits_data; wire [7:0] dut_l2_frontend_bus_axi4_0_w_bits_strb; wire dut_l2_frontend_bus_axi4_0_w_bits_last; wire dut_l2_frontend_bus_axi4_0_b_ready; wire dut_l2_frontend_bus_axi4_0_b_valid; wire [7:0] dut_l2_frontend_bus_axi4_0_b_bits_id; wire [1:0] dut_l2_frontend_bus_axi4_0_b_bits_resp; wire dut_l2_frontend_bus_axi4_0_ar_ready; wire dut_l2_frontend_bus_axi4_0_ar_valid; wire [7:0] dut_l2_frontend_bus_axi4_0_ar_bits_id; wire [31:0] dut_l2_frontend_bus_axi4_0_ar_bits_addr; wire [7:0] dut_l2_frontend_bus_axi4_0_ar_bits_len; wire [2:0] dut_l2_frontend_bus_axi4_0_ar_bits_size; wire [1:0] dut_l2_frontend_bus_axi4_0_ar_bits_burst; wire dut_l2_frontend_bus_axi4_0_ar_bits_lock; wire [3:0] dut_l2_frontend_bus_axi4_0_ar_bits_cache; wire [2:0] dut_l2_frontend_bus_axi4_0_ar_bits_prot; wire [3:0] dut_l2_frontend_bus_axi4_0_ar_bits_qos; wire dut_l2_frontend_bus_axi4_0_r_ready; wire dut_l2_frontend_bus_axi4_0_r_valid; wire [7:0] dut_l2_frontend_bus_axi4_0_r_bits_id; wire [63:0] dut_l2_frontend_bus_axi4_0_r_bits_data; wire [1:0] dut_l2_frontend_bus_axi4_0_r_bits_resp; wire dut_l2_frontend_bus_axi4_0_r_bits_last; wire mem_clock; wire mem_reset; wire mem_io_axi4_0_aw_ready; wire mem_io_axi4_0_aw_valid; wire [3:0] mem_io_axi4_0_aw_bits_id; wire [27:0] mem_io_axi4_0_aw_bits_addr; wire [7:0] mem_io_axi4_0_aw_bits_len; wire [2:0] mem_io_axi4_0_aw_bits_size; wire [1:0] mem_io_axi4_0_aw_bits_burst; wire mem_io_axi4_0_w_ready; wire mem_io_axi4_0_w_valid; wire [63:0] mem_io_axi4_0_w_bits_data; wire [7:0] mem_io_axi4_0_w_bits_strb; wire mem_io_axi4_0_w_bits_last; wire mem_io_axi4_0_b_ready; wire mem_io_axi4_0_b_valid; wire [3:0] mem_io_axi4_0_b_bits_id; wire [1:0] mem_io_axi4_0_b_bits_resp; wire mem_io_axi4_0_ar_ready; wire mem_io_axi4_0_ar_valid; wire [3:0] mem_io_axi4_0_ar_bits_id; wire [27:0] mem_io_axi4_0_ar_bits_addr; wire [7:0] mem_io_axi4_0_ar_bits_len; wire [2:0] mem_io_axi4_0_ar_bits_size; wire [1:0] mem_io_axi4_0_ar_bits_burst; wire mem_io_axi4_0_r_ready; wire mem_io_axi4_0_r_valid; wire [3:0] mem_io_axi4_0_r_bits_id; wire [63:0] mem_io_axi4_0_r_bits_data; wire [1:0] mem_io_axi4_0_r_bits_resp; wire mem_io_axi4_0_r_bits_last; wire mmio_mem_clock; wire mmio_mem_reset; wire mmio_mem_io_axi4_0_aw_ready; wire mmio_mem_io_axi4_0_aw_valid; wire [3:0] mmio_mem_io_axi4_0_aw_bits_id; wire [11:0] mmio_mem_io_axi4_0_aw_bits_addr; wire [7:0] mmio_mem_io_axi4_0_aw_bits_len; wire [2:0] mmio_mem_io_axi4_0_aw_bits_size; wire [1:0] mmio_mem_io_axi4_0_aw_bits_burst; wire mmio_mem_io_axi4_0_w_ready; wire mmio_mem_io_axi4_0_w_valid; wire [63:0] mmio_mem_io_axi4_0_w_bits_data; wire [7:0] mmio_mem_io_axi4_0_w_bits_strb; wire mmio_mem_io_axi4_0_w_bits_last; wire mmio_mem_io_axi4_0_b_ready; wire mmio_mem_io_axi4_0_b_valid; wire [3:0] mmio_mem_io_axi4_0_b_bits_id; wire [1:0] mmio_mem_io_axi4_0_b_bits_resp; wire mmio_mem_io_axi4_0_ar_ready; wire mmio_mem_io_axi4_0_ar_valid; wire [3:0] mmio_mem_io_axi4_0_ar_bits_id; wire [11:0] mmio_mem_io_axi4_0_ar_bits_addr; wire [7:0] mmio_mem_io_axi4_0_ar_bits_len; wire [2:0] mmio_mem_io_axi4_0_ar_bits_size; wire [1:0] mmio_mem_io_axi4_0_ar_bits_burst; wire mmio_mem_io_axi4_0_r_ready; wire mmio_mem_io_axi4_0_r_valid; wire [3:0] mmio_mem_io_axi4_0_r_bits_id; wire [63:0] mmio_mem_io_axi4_0_r_bits_data; wire [1:0] mmio_mem_io_axi4_0_r_bits_resp; wire mmio_mem_io_axi4_0_r_bits_last; wire SimDTM_clk; wire SimDTM_reset; wire SimDTM_debug_req_ready; wire SimDTM_debug_req_valid; wire [6:0] SimDTM_debug_req_bits_addr; wire [31:0] SimDTM_debug_req_bits_data; wire [1:0] SimDTM_debug_req_bits_op; wire SimDTM_debug_resp_ready; wire SimDTM_debug_resp_valid; wire [31:0] SimDTM_debug_resp_bits_data; wire [1:0] SimDTM_debug_resp_bits_resp; wire [31:0] SimDTM_exit; wire _T_8; wire [30:0] _GEN_0; wire [31:0] _T_9; wire _T_11; ExampleRocketSystem dut ( .clock(clock), .reset(reset), .debug_clockeddmi_dmi_req_ready(dut_debug_clockeddmi_dmi_req_ready), .debug_clockeddmi_dmi_req_valid(dut_debug_clockeddmi_dmi_req_valid), .debug_clockeddmi_dmi_req_bits_addr(dut_debug_clockeddmi_dmi_req_bits_addr), .debug_clockeddmi_dmi_req_bits_data(dut_debug_clockeddmi_dmi_req_bits_data), .debug_clockeddmi_dmi_req_bits_op(dut_debug_clockeddmi_dmi_req_bits_op), .debug_clockeddmi_dmi_resp_ready(dut_debug_clockeddmi_dmi_resp_ready), .debug_clockeddmi_dmi_resp_valid(dut_debug_clockeddmi_dmi_resp_valid), .debug_clockeddmi_dmi_resp_bits_data(dut_debug_clockeddmi_dmi_resp_bits_data), .debug_clockeddmi_dmi_resp_bits_resp(dut_debug_clockeddmi_dmi_resp_bits_resp), .debug_clockeddmi_dmiClock(clock), .debug_clockeddmi_dmiReset(reset), .debug_ndreset(dut_debug_ndreset), .debug_dmactive(dut_debug_dmactive), .interrupts(dut_interrupts), .mem_axi4_0_aw_ready(dut_mem_axi4_0_aw_ready), .mem_axi4_0_aw_valid(dut_mem_axi4_0_aw_valid), .mem_axi4_0_aw_bits_id(dut_mem_axi4_0_aw_bits_id), .mem_axi4_0_aw_bits_addr(dut_mem_axi4_0_aw_bits_addr), .mem_axi4_0_aw_bits_len(dut_mem_axi4_0_aw_bits_len), .mem_axi4_0_aw_bits_size(dut_mem_axi4_0_aw_bits_size), .mem_axi4_0_aw_bits_burst(dut_mem_axi4_0_aw_bits_burst), .mem_axi4_0_aw_bits_lock(dut_mem_axi4_0_aw_bits_lock), .mem_axi4_0_aw_bits_cache(dut_mem_axi4_0_aw_bits_cache), .mem_axi4_0_aw_bits_prot(dut_mem_axi4_0_aw_bits_prot), .mem_axi4_0_aw_bits_qos(dut_mem_axi4_0_aw_bits_qos), .mem_axi4_0_w_ready(dut_mem_axi4_0_w_ready), .mem_axi4_0_w_valid(dut_mem_axi4_0_w_valid), .mem_axi4_0_w_bits_data(dut_mem_axi4_0_w_bits_data), .mem_axi4_0_w_bits_strb(dut_mem_axi4_0_w_bits_strb), .mem_axi4_0_w_bits_last(dut_mem_axi4_0_w_bits_last), .mem_axi4_0_b_ready(dut_mem_axi4_0_b_ready), .mem_axi4_0_b_valid(dut_mem_axi4_0_b_valid), .mem_axi4_0_b_bits_id(dut_mem_axi4_0_b_bits_id), .mem_axi4_0_b_bits_resp(dut_mem_axi4_0_b_bits_resp), .mem_axi4_0_ar_ready(dut_mem_axi4_0_ar_ready), .mem_axi4_0_ar_valid(dut_mem_axi4_0_ar_valid), .mem_axi4_0_ar_bits_id(dut_mem_axi4_0_ar_bits_id), .mem_axi4_0_ar_bits_addr(dut_mem_axi4_0_ar_bits_addr), .mem_axi4_0_ar_bits_len(dut_mem_axi4_0_ar_bits_len), .mem_axi4_0_ar_bits_size(dut_mem_axi4_0_ar_bits_size), .mem_axi4_0_ar_bits_burst(dut_mem_axi4_0_ar_bits_burst), .mem_axi4_0_ar_bits_lock(dut_mem_axi4_0_ar_bits_lock), .mem_axi4_0_ar_bits_cache(dut_mem_axi4_0_ar_bits_cache), .mem_axi4_0_ar_bits_prot(dut_mem_axi4_0_ar_bits_prot), .mem_axi4_0_ar_bits_qos(dut_mem_axi4_0_ar_bits_qos), .mem_axi4_0_r_ready(dut_mem_axi4_0_r_ready), .mem_axi4_0_r_valid(dut_mem_axi4_0_r_valid), .mem_axi4_0_r_bits_id(dut_mem_axi4_0_r_bits_id), .mem_axi4_0_r_bits_data(dut_mem_axi4_0_r_bits_data), .mem_axi4_0_r_bits_resp(dut_mem_axi4_0_r_bits_resp), .mem_axi4_0_r_bits_last(dut_mem_axi4_0_r_bits_last), .mmio_axi4_0_aw_ready(dut_mmio_axi4_0_aw_ready), .mmio_axi4_0_aw_valid(dut_mmio_axi4_0_aw_valid), .mmio_axi4_0_aw_bits_id(dut_mmio_axi4_0_aw_bits_id), .mmio_axi4_0_aw_bits_addr(dut_mmio_axi4_0_aw_bits_addr), .mmio_axi4_0_aw_bits_len(dut_mmio_axi4_0_aw_bits_len), .mmio_axi4_0_aw_bits_size(dut_mmio_axi4_0_aw_bits_size), .mmio_axi4_0_aw_bits_burst(dut_mmio_axi4_0_aw_bits_burst), .mmio_axi4_0_aw_bits_lock(dut_mmio_axi4_0_aw_bits_lock), .mmio_axi4_0_aw_bits_cache(dut_mmio_axi4_0_aw_bits_cache), .mmio_axi4_0_aw_bits_prot(dut_mmio_axi4_0_aw_bits_prot), .mmio_axi4_0_aw_bits_qos(dut_mmio_axi4_0_aw_bits_qos), .mmio_axi4_0_w_ready(dut_mmio_axi4_0_w_ready), .mmio_axi4_0_w_valid(dut_mmio_axi4_0_w_valid), .mmio_axi4_0_w_bits_data(dut_mmio_axi4_0_w_bits_data), .mmio_axi4_0_w_bits_strb(dut_mmio_axi4_0_w_bits_strb), .mmio_axi4_0_w_bits_last(dut_mmio_axi4_0_w_bits_last), .mmio_axi4_0_b_ready(dut_mmio_axi4_0_b_ready), .mmio_axi4_0_b_valid(dut_mmio_axi4_0_b_valid), .mmio_axi4_0_b_bits_id(dut_mmio_axi4_0_b_bits_id), .mmio_axi4_0_b_bits_resp(dut_mmio_axi4_0_b_bits_resp), .mmio_axi4_0_ar_ready(dut_mmio_axi4_0_ar_ready), .mmio_axi4_0_ar_valid(dut_mmio_axi4_0_ar_valid), .mmio_axi4_0_ar_bits_id(dut_mmio_axi4_0_ar_bits_id), .mmio_axi4_0_ar_bits_addr(dut_mmio_axi4_0_ar_bits_addr), .mmio_axi4_0_ar_bits_len(dut_mmio_axi4_0_ar_bits_len), .mmio_axi4_0_ar_bits_size(dut_mmio_axi4_0_ar_bits_size), .mmio_axi4_0_ar_bits_burst(dut_mmio_axi4_0_ar_bits_burst), .mmio_axi4_0_ar_bits_lock(dut_mmio_axi4_0_ar_bits_lock), .mmio_axi4_0_ar_bits_cache(dut_mmio_axi4_0_ar_bits_cache), .mmio_axi4_0_ar_bits_prot(dut_mmio_axi4_0_ar_bits_prot), .mmio_axi4_0_ar_bits_qos(dut_mmio_axi4_0_ar_bits_qos), .mmio_axi4_0_r_ready(dut_mmio_axi4_0_r_ready), .mmio_axi4_0_r_valid(dut_mmio_axi4_0_r_valid), .mmio_axi4_0_r_bits_id(dut_mmio_axi4_0_r_bits_id), .mmio_axi4_0_r_bits_data(dut_mmio_axi4_0_r_bits_data), .mmio_axi4_0_r_bits_resp(dut_mmio_axi4_0_r_bits_resp), .mmio_axi4_0_r_bits_last(dut_mmio_axi4_0_r_bits_last), .l2_frontend_bus_axi4_0_aw_ready(dut_l2_frontend_bus_axi4_0_aw_ready), .l2_frontend_bus_axi4_0_aw_valid(dut_l2_frontend_bus_axi4_0_aw_valid), .l2_frontend_bus_axi4_0_aw_bits_id(dut_l2_frontend_bus_axi4_0_aw_bits_id), .l2_frontend_bus_axi4_0_aw_bits_addr(dut_l2_frontend_bus_axi4_0_aw_bits_addr), .l2_frontend_bus_axi4_0_aw_bits_len(dut_l2_frontend_bus_axi4_0_aw_bits_len), .l2_frontend_bus_axi4_0_aw_bits_size(dut_l2_frontend_bus_axi4_0_aw_bits_size), .l2_frontend_bus_axi4_0_aw_bits_burst(dut_l2_frontend_bus_axi4_0_aw_bits_burst), .l2_frontend_bus_axi4_0_aw_bits_lock(dut_l2_frontend_bus_axi4_0_aw_bits_lock), .l2_frontend_bus_axi4_0_aw_bits_cache(dut_l2_frontend_bus_axi4_0_aw_bits_cache), .l2_frontend_bus_axi4_0_aw_bits_prot(dut_l2_frontend_bus_axi4_0_aw_bits_prot), .l2_frontend_bus_axi4_0_aw_bits_qos(dut_l2_frontend_bus_axi4_0_aw_bits_qos), .l2_frontend_bus_axi4_0_w_ready(dut_l2_frontend_bus_axi4_0_w_ready), .l2_frontend_bus_axi4_0_w_valid(dut_l2_frontend_bus_axi4_0_w_valid), .l2_frontend_bus_axi4_0_w_bits_data(dut_l2_frontend_bus_axi4_0_w_bits_data), .l2_frontend_bus_axi4_0_w_bits_strb(dut_l2_frontend_bus_axi4_0_w_bits_strb), .l2_frontend_bus_axi4_0_w_bits_last(dut_l2_frontend_bus_axi4_0_w_bits_last), .l2_frontend_bus_axi4_0_b_ready(dut_l2_frontend_bus_axi4_0_b_ready), .l2_frontend_bus_axi4_0_b_valid(dut_l2_frontend_bus_axi4_0_b_valid), .l2_frontend_bus_axi4_0_b_bits_id(dut_l2_frontend_bus_axi4_0_b_bits_id), .l2_frontend_bus_axi4_0_b_bits_resp(dut_l2_frontend_bus_axi4_0_b_bits_resp), .l2_frontend_bus_axi4_0_ar_ready(dut_l2_frontend_bus_axi4_0_ar_ready), .l2_frontend_bus_axi4_0_ar_valid(dut_l2_frontend_bus_axi4_0_ar_valid), .l2_frontend_bus_axi4_0_ar_bits_id(dut_l2_frontend_bus_axi4_0_ar_bits_id), .l2_frontend_bus_axi4_0_ar_bits_addr(dut_l2_frontend_bus_axi4_0_ar_bits_addr), .l2_frontend_bus_axi4_0_ar_bits_len(dut_l2_frontend_bus_axi4_0_ar_bits_len), .l2_frontend_bus_axi4_0_ar_bits_size(dut_l2_frontend_bus_axi4_0_ar_bits_size), .l2_frontend_bus_axi4_0_ar_bits_burst(dut_l2_frontend_bus_axi4_0_ar_bits_burst), .l2_frontend_bus_axi4_0_ar_bits_lock(dut_l2_frontend_bus_axi4_0_ar_bits_lock), .l2_frontend_bus_axi4_0_ar_bits_cache(dut_l2_frontend_bus_axi4_0_ar_bits_cache), .l2_frontend_bus_axi4_0_ar_bits_prot(dut_l2_frontend_bus_axi4_0_ar_bits_prot), .l2_frontend_bus_axi4_0_ar_bits_qos(dut_l2_frontend_bus_axi4_0_ar_bits_qos), .l2_frontend_bus_axi4_0_r_ready(dut_l2_frontend_bus_axi4_0_r_ready), .l2_frontend_bus_axi4_0_r_valid(dut_l2_frontend_bus_axi4_0_r_valid), .l2_frontend_bus_axi4_0_r_bits_id(dut_l2_frontend_bus_axi4_0_r_bits_id), .l2_frontend_bus_axi4_0_r_bits_data(dut_l2_frontend_bus_axi4_0_r_bits_data), .l2_frontend_bus_axi4_0_r_bits_resp(dut_l2_frontend_bus_axi4_0_r_bits_resp), .l2_frontend_bus_axi4_0_r_bits_last(dut_l2_frontend_bus_axi4_0_r_bits_last) ); initial begin $dumpfile("dump.vcd"); $dumpvars(1); end always #4 clock = ~clock; initial begin reset = 1; #16 reset = 0; #500 $finish(); end endmodule |
When I run this, it doesn’t actually do anything, and by that I mean, not a single signal changes state after reset, presumably it’s waiting for some AXI handshaking to take place, or maybe I’m holding it in some reset state somehow. I’ll have to look at TestHarness more closely…