Previous: Linking with Ada, Up: Interfacing to other languages
Warning: This topic is only for advanced users knowing how to useAdaandGNAT. This is provided only for reference, I have tested this once before releasingGHDL0.19 but this is not checked at each release.
The simulator kernel of GHDL named GRT is written in
Ada95 and contains a very light and slightly adapted version
of VHPI. Since it is an Ada implementation it is
called AVHPI. Although being tough, you may interface to AVHPI.
For using AVHPI, you need the sources of GHDL and to recompile
them (at least the GRT library). This library is usually compiled with
a No_Run_Time pragma, so that the user does not need to install the
GNAT runtime library. However, you certainly want to use the usual
runtime library and want to avoid this pragma. For this, reset the
GRT_PRAGMA_FLAG variable.
$ make GRT_PRAGMA_FLAG= grt-all
Since GRT is a self-contained library, you don't want
gnatlink to fetch individual object files (furthermore this
doesn't always work due to tricks used in GRT). For this,
remove all the object files and make the .ali files read-only.
$ rm *.o
$ chmod -w *.ali
You may then install the sources files and the .ali files. I have never tested this step.
You are now ready to use it.
For example, here is an example, test_grt.adb which displays the top level design name.
with System; use System;
with Grt.Avhpi; use Grt.Avhpi;
with Ada.Text_IO; use Ada.Text_IO;
with Ghdl_Main;
procedure Test_Grt is
-- VHPI handle.
H : VhpiHandleT;
Status : Integer;
-- Name.
Name : String (1 .. 64);
Name_Len : Integer;
begin
-- Elaborate and run the design.
Status := Ghdl_Main (0, Null_Address);
-- Display the status of the simulation.
Put_Line ("Status is " & Integer'Image (Status));
-- Get the root instance.
Get_Root_Inst(H);
-- Disp its name using vhpi API.
Vhpi_Get_Str (VhpiNameP, H, Name, Name_Len);
Put_Line ("Root instance name: " & Name (1 .. Name_Len));
end Test_Grt;
First, analyze and bind your design:
$ ghdl -a counter.vhdl
$ ghdl --bind counter
Then build the whole:
$ gnatmake test_grt -aLgrt_ali_path -aIgrt_src_path -largs
`ghdl --list-link counter`
Finally, run your design:
$ ./test_grt
Status is 0
Root instance name: counter