aboutsummaryrefslogtreecommitdiffstats
path: root/src/grt/grt-avhpi_utils.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/grt/grt-avhpi_utils.adb')
-rw-r--r--src/grt/grt-avhpi_utils.adb65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/grt/grt-avhpi_utils.adb b/src/grt/grt-avhpi_utils.adb
new file mode 100644
index 000000000..6fedf1b4c
--- /dev/null
+++ b/src/grt/grt-avhpi_utils.adb
@@ -0,0 +1,65 @@
+-- GHDL Run Time (GRT) - Utility functions for AVHPI.
+-- Copyright (C) 2015 Tristan Gingold
+--
+-- GHDL is free software; you can redistribute it and/or modify it under
+-- the terms of the GNU General Public License as published by the Free
+-- Software Foundation; either version 2, or (at your option) any later
+-- version.
+--
+-- GHDL is distributed in the hope that it will be useful, but WITHOUT ANY
+-- WARRANTY; without even the implied warranty of MERCHANTABILITY or
+-- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+-- for more details.
+--
+-- You should have received a copy of the GNU General Public License
+-- along with GCC; see the file COPYING. If not, write to the Free
+-- Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+-- 02111-1307, USA.
+--
+-- As a special exception, if other files instantiate generics from this
+-- unit, or you link this unit with other files to produce an executable,
+-- this unit does not by itself cause the resulting executable to be
+-- covered by the GNU General Public License. This exception does not
+-- however invalidate any other reasons why the executable file might be
+-- covered by the GNU Public License.
+
+with Grt.Errors; use Grt.Errors;
+
+package body Grt.Avhpi_Utils is
+ function Get_Root_Entity (Root : VhpiHandleT) return VhpiHandleT
+ is
+ Hdl : VhpiHandleT;
+ Error : AvhpiErrorT;
+ begin
+ Vhpi_Handle (VhpiDesignUnit, Root, Hdl, Error);
+ if Error /= AvhpiErrorOk then
+ Internal_Error ("VhpiDesignUnit");
+ end if;
+
+ case Vhpi_Get_Kind (Hdl) is
+ when VhpiArchBodyK =>
+ Vhpi_Handle (VhpiPrimaryUnit, Hdl, Hdl, Error);
+ if Error /= AvhpiErrorOk then
+ Internal_Error ("VhpiPrimaryUnit");
+ end if;
+ when others =>
+ Internal_Error ("get_root_entity");
+ end case;
+ return Hdl;
+ end Get_Root_Entity;
+
+ function Name_Compare (Handle : VhpiHandleT;
+ Name : String;
+ Property : VhpiStrPropertyT := VhpiNameP)
+ return Boolean
+ is
+ Obj_Name : String (1 .. Name'Length);
+ Len : Natural;
+ begin
+ Vhpi_Get_Str (Property, Handle, Obj_Name, Len);
+ return Len = Name'Length and then Obj_Name = Name;
+ end Name_Compare;
+
+end Grt.Avhpi_Utils;
+
+