Skip to content

Commit 8e7dd98

Browse files
authored
Merge pull request #2761 from jbeaurivage/cocotb-uses-verilator-args
Cocotb runner inherits the Verilator build and simulate args
2 parents 4e7732d + 0fda832 commit 8e7dd98

1 file changed

Lines changed: 31 additions & 6 deletions

File tree

crates/veryl/src/runner/cocotb.rs

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,11 +168,24 @@ impl Runner for Cocotb {
168168

169169
let module = format!("{}_{}", metadata.project.name, top.unwrap());
170170

171-
let (py_waves, args) = match wave.then_some(metadata.test.waveform_format) {
172-
Some(WaveFormFormat::Vcd) => ("True", "['--trace']"),
173-
Some(WaveFormFormat::Fst) => ("True", "['--trace-fst', '--trace-structs']"),
174-
None => ("False", "[]"),
171+
let (py_waves, wave_args) = match wave.then_some(metadata.test.waveform_format) {
172+
Some(WaveFormFormat::Vcd) => ("True", ["--trace"].as_slice()),
173+
Some(WaveFormFormat::Fst) => ("True", ["--trace-fst", "--trace-structs"].as_slice()),
174+
None => ("False", [].as_slice()),
175175
};
176+
177+
let build_args = format_py_str_array(
178+
metadata
179+
.test
180+
.verilator
181+
.compile_args
182+
.iter()
183+
.map(|s| s.as_str())
184+
.chain(wave_args.iter().copied()),
185+
);
186+
187+
let test_args = format_py_str_array(metadata.test.verilator.simulate_args.iter());
188+
176189
let runner_path = temp_dir.path().join("runner.py");
177190
let runner_text = format!(
178191
r#"
@@ -197,13 +210,14 @@ if cocotb_version.startswith("2."):
197210
hdl_toplevel="{module}",
198211
always=True,
199212
waves={py_waves},
200-
build_args={args},
213+
build_args={build_args},
201214
)
202215
203216
runner.test(
204217
hdl_toplevel="{module}",
205218
test_module="{test},",
206219
waves={py_waves},
220+
test_args={test_args},
207221
)
208222
elif cocotb_version.startswith("1.9."):
209223
import cocotb.runner
@@ -216,13 +230,14 @@ elif cocotb_version.startswith("1.9."):
216230
hdl_toplevel="{module}",
217231
always=True,
218232
waves={py_waves},
219-
build_args={args},
233+
build_args={build_args},
220234
)
221235
222236
runner.test(
223237
hdl_toplevel="{module}",
224238
test_module="{test},",
225239
waves={py_waves},
240+
test_args={test_args},
226241
)
227242
else:
228243
raise RuntimeError("unsupported cocotb version")
@@ -309,3 +324,13 @@ fn process_embed_item(embed_item: &syntax_tree::EmbedItem) -> String {
309324
_ => unreachable!(),
310325
}
311326
}
327+
328+
fn format_py_str_array<S: AsRef<str>>(items: impl Iterator<Item = S>) -> String {
329+
format!(
330+
"[{}]",
331+
items
332+
.map(|arg| format!("'{}'", arg.as_ref()))
333+
.collect::<Vec<_>>()
334+
.join(",")
335+
)
336+
}

0 commit comments

Comments
 (0)