@@ -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 )
208222elif 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 )
227242else:
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