Wrapping a simulation (ghdl_main)¶
You may run your design from an external program. You just have to call
the ghdl_main
function which can be defined:
in C:
extern int ghdl_main (int argc, char **argv);
in Ada:
with System;
...
function Ghdl_Main (Argc : Integer; Argv : System.Address)
return Integer;
pragma import (C, Ghdl_Main, "ghdl_main");
Tip
Don’t forget to list the object file(s) of this entry point and other foreign sources, as per Linking foreign object files to GHDL.
Attention
The ghdl_main
function must be called once, since reseting/restarting the simulation runtime is not supported yet. A workaround is to build the simulation as a shared object and load the ghdl_main
symbol from it (see shghdl).
Hint
Immitating the run time flags, such as -gDEPTH=12
from -gGENERIC
, requires the argv
to have the executable’s path at index 0, effectively shifting all other indicies along by 1. This can be taken from the 0 index of the argv
passed to main()
, or (not suggested, despite a lack of consequences) left empty/null.
Since ghdl_main
is the entrypoint to the design (GRT runtime), the supported CLI options are the ones shown in Simulation (runtime). Options for analysis/elaboration are not required and will NOT work. See -r
.