build/sim/core: Initialize Verilator commandArgs
authorGabriel L. Somlo <gsomlo@gmail.com>
Wed, 17 Apr 2019 14:39:35 +0000 (10:39 -0400)
committerGabriel L. Somlo <gsomlo@gmail.com>
Wed, 17 Apr 2019 14:39:35 +0000 (10:39 -0400)
Required when DUT is using plusargs. Prevents Verilator simulation
from crashing with "Verilog called $test$plusargs or $value$plusargs
without testbench C first calling Verilated::commandArgs(argc,argv)".

litex/build/sim/core/sim.c
litex/build/sim/core/veril.cpp
litex/build/sim/core/veril.h

index 32124ee19b9613c963efe58971777eadad5bea96..3f7ad648988cb9616ac1437e8e2394eabfaea495 100644 (file)
@@ -203,7 +203,7 @@ static void cb(int sock, short which, void *arg)
   }
 }
 
-int main()
+int main(int argc, char *argv[])
 {
   void *vdut=NULL;
   struct timeval tv;
@@ -224,6 +224,7 @@ int main()
     goto out;
   }
 
+  litex_sim_init_cmdargs(argc, argv);
   if(RC_OK != (ret = litex_sim_initialize_all(&vdut, base)))
   {
     goto out;
index ef43fb1df9bb58f95420f834bb0ff77f072f59cf..6821e20780e4424c339038a98641c36d1b5138c2 100644 (file)
@@ -17,6 +17,11 @@ extern "C" void litex_sim_eval(void *vdut)
   dut->eval();
 }
 
+extern "C" void litex_sim_init_cmdargs(int argc, char *argv[])
+{
+  Verilated::commandArgs(argc, argv);
+}
+
 extern "C" void litex_sim_init_tracer(void *vdut)
 {
   Vdut *dut = (Vdut*)vdut;
index 35326ade6c407a7f15927662ccb3d02e829b9558..b8c5f16512631562b272a360f960d5561d2e8290 100644 (file)
@@ -4,6 +4,7 @@
 #define __VERIL_H_
 
 #ifdef __cplusplus
+extern "C" void litex_sim_init_cmdargs(int argc, char *argv[]);
 extern "C" void litex_sim_eval(void *vdut);
 extern "C" void litex_sim_init_tracer(void *vdut);
 extern "C" void litex_sim_tracer_dump();