aboutsummaryrefslogtreecommitdiffstats
path: root/src/grt/grt-vpi.adb
diff options
context:
space:
mode:
Diffstat (limited to 'src/grt/grt-vpi.adb')
-rw-r--r--src/grt/grt-vpi.adb114
1 files changed, 84 insertions, 30 deletions
diff --git a/src/grt/grt-vpi.adb b/src/grt/grt-vpi.adb
index 90c75ef93..d7a62330f 100644
--- a/src/grt/grt-vpi.adb
+++ b/src/grt/grt-vpi.adb
@@ -45,6 +45,7 @@ with Grt.Stdio; use Grt.Stdio;
with Grt.C; use Grt.C;
with Grt.Signals; use Grt.Signals;
with Grt.Astdio; use Grt.Astdio;
+with Grt.Strings; use Grt.Strings;
with Grt.Hooks; use Grt.Hooks;
with Grt.Options;
with Grt.Vcd; use Grt.Vcd;
@@ -131,13 +132,6 @@ package body Grt.Vpi is
-- Clear error status.
procedure Reset_Error;
- procedure Vpi_Trace (Msg : String) is
- begin
- if Flag_Trace then
- Put_Line (Trace_File, Msg);
- end if;
- end Vpi_Trace;
-
procedure Trace_Start (Msg : String) is
begin
for I in 1 .. Trace_Indent loop
@@ -213,11 +207,53 @@ package body Grt.Vpi is
when vpiRightRange =>
Trace ("vpiRightRange");
+ when vpiStop =>
+ Trace ("vpiStop");
+ when vpiFinish =>
+ Trace ("vpiFinish");
+ when vpiReset =>
+ Trace ("vpiReset");
+
when others =>
Trace (V);
end case;
end Trace_Property;
+ procedure Trace_Format (F : Integer) is
+ begin
+ case F is
+ when vpiBinStrVal =>
+ Trace ("BinStr");
+ when vpiOctStrVal =>
+ Trace ("OctStr");
+ when vpiDecStrVal =>
+ Trace ("DecStr");
+ when vpiHexStrVal =>
+ Trace ("HexStr");
+ when vpiScalarVal =>
+ Trace ("Scalar");
+ when vpiIntVal =>
+ Trace ("Int");
+ when vpiRealVal =>
+ Trace ("Real");
+ when vpiStringVal =>
+ Trace ("String");
+ when vpiVectorVal =>
+ Trace ("Vector");
+ when vpiStrengthVal =>
+ Trace ("Strength");
+ when vpiTimeVal =>
+ Trace ("Time");
+ when vpiObjTypeVal =>
+ Trace ("ObjType");
+ when vpiSuppressVal =>
+ Trace ("Suppress");
+
+ when others =>
+ Trace (F);
+ end case;
+ end Trace_Format;
+
procedure Trace_Time_Tag (V : Integer) is
begin
case V is
@@ -796,7 +832,7 @@ package body Grt.Vpi is
Trace_Start ("vpi_get_value (");
Trace (Expr);
Trace (", {format=");
- Trace (Value.Format);
+ Trace_Format (Value.Format);
Trace ("}) = ");
end if;
@@ -1130,7 +1166,21 @@ package body Grt.Vpi is
Res : Integer;
pragma Unreferenced (Res);
begin
+ if Flag_Trace then
+ Trace_Start ("vpi call callback ");
+ Trace_Cb_Reason (Hand.Cb.Reason);
+ Trace (" ");
+ Trace (Hand);
+ Trace_Newline;
+ Trace_Indent := Trace_Indent + 1;
+ end if;
Res := Hand.Cb.Cb_Rtn (Hand.Cb'Access);
+ if Flag_Trace then
+ Trace_Indent := Trace_Indent - 1;
+ Trace_Start ("vpi end callback ");
+ Trace (Hand);
+ Trace_Newline;
+ end if;
end Execute_Callback;
procedure Execute_Callback_List (List : Callback_List)
@@ -1157,25 +1207,12 @@ package body Grt.Vpi is
function To_vpiHandle is new Ada.Unchecked_Conversion
(System.Address, vpiHandle);
+ -- Wrapper
procedure Call_Callback (Arg : System.Address)
is
Hand : constant vpiHandle := To_vpiHandle (Arg);
begin
- if Flag_Trace then
- Trace_Start ("vpi call callback ");
- Trace_Cb_Reason (Hand.Cb.Reason);
- Trace (" ");
- Trace (Hand);
- Trace_Newline;
- Trace_Indent := Trace_Indent + 1;
- end if;
Execute_Callback (Hand);
- if Flag_Trace then
- Trace_Indent := Trace_Indent - 1;
- Trace_Start ("vpi end callback ");
- Trace (Hand);
- Trace_Newline;
- end if;
end Call_Callback;
procedure Call_Valuechange_Callback (Arg : System.Address)
@@ -1290,7 +1327,10 @@ package body Grt.Vpi is
-- int vpi_get_vlog_info(p_vpi_vlog_info vlog_info_p)
function vpi_get_vlog_info (info : p_vpi_vlog_info) return integer is
begin
- Vpi_Trace ("vpi_get_vlog_info");
+ if Flag_Trace then
+ Trace_Start ("vpi_get_vlog_info");
+ Trace_Newline;
+ end if;
info.all := (Argc => 0,
Argv => Null_Address,
@@ -1306,6 +1346,11 @@ package body Grt.Vpi is
pragma Unreferenced (aRef);
pragma Unreferenced (aIndex);
begin
+ if Flag_Trace then
+ Trace_Start ("vpi_handle_by_index UNIMPLEMENTED!");
+ Trace_Newline;
+ end if;
+
return null;
end vpi_handle_by_index;
@@ -1323,7 +1368,7 @@ package body Grt.Vpi is
-- NUL not allowed in L.
return False;
end if;
- if L (I) /= R (I - L'First + 1) then
+ if To_Lower (L (I)) /= R (I - L'First + 1) then
return False;
end if;
end loop;
@@ -1353,7 +1398,7 @@ package body Grt.Vpi is
exit when Err /= AvhpiErrorOk;
El_Name := Avhpi_Get_Base_Name (Res);
- exit when Strcmp (Name , El_Name);
+ exit when Strcmp (Name, El_Name);
end loop;
end Find_By_Name;
@@ -1474,7 +1519,10 @@ package body Grt.Vpi is
is
pragma Unreferenced (aSs);
begin
- Vpi_Trace ("vpi_register_systf");
+ if Flag_Trace then
+ Trace_Start ("vpi_register_systf");
+ Trace_Newline;
+ end if;
end vpi_register_systf;
-- int vpi_remove_cb(vpiHandle ref)
@@ -1561,11 +1609,17 @@ package body Grt.Vpi is
return Err_Status;
end vpi_chk_error;
- function vpi_control (Op : Integer; Status : Integer) return Integer
- is
- pragma Unreferenced (Status);
+ function vpi_control (Op : Integer; Status : Integer) return Integer is
begin
- Vpi_Trace ("vpi_control");
+ if Flag_Trace then
+ Trace_Start ("vpi_control (");
+ Trace_Property (Op);
+ Trace (", ");
+ Trace (Status);
+ Trace (")");
+ Trace_Newline;
+ end if;
+
case Op is
when vpiFinish
| vpiStop =>