aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2017-06-09 06:09:23 +0200
committerTristan Gingold <tgingold@free.fr>2017-06-09 06:09:23 +0200
commit6d21f84aeb96107be1405d57a6d93e6155fb1fd6 (patch)
tree631d8a93da16b35e9395fcadd4a4be461f0afbb7 /src
parent8ec8bb9835e4d895048678d2854381419c1a3175 (diff)
downloadghdl-6d21f84aeb96107be1405d57a6d93e6155fb1fd6.tar.gz
ghdl-6d21f84aeb96107be1405d57a6d93e6155fb1fd6.tar.bz2
ghdl-6d21f84aeb96107be1405d57a6d93e6155fb1fd6.zip
vpi: CbNextSimTime is one-shot.
Fix #281
Diffstat (limited to 'src')
-rw-r--r--src/grt/grt-vpi.adb78
1 files changed, 42 insertions, 36 deletions
diff --git a/src/grt/grt-vpi.adb b/src/grt/grt-vpi.adb
index 5cb72f768..52a06c6d2 100644
--- a/src/grt/grt-vpi.adb
+++ b/src/grt/grt-vpi.adb
@@ -1315,7 +1315,7 @@ package body Grt.Vpi is
Call_Callback'Access, To_Address (Res));
when cbNextSimTime =>
Register_Callback
- (Cb_Next_Time_Step, Res.Cb_Handle, Repeat,
+ (Cb_Next_Time_Step, Res.Cb_Handle, Oneshot,
Call_Callback'Access, To_Address (Res));
when others =>
dbgPut_Line ("vpi_register_cb: unknown reason");
@@ -1330,6 +1330,46 @@ package body Grt.Vpi is
return Res;
end vpi_register_cb;
+ -- int vpi_remove_cb(vpiHandle ref)
+ function vpi_remove_cb (Ref : vpiHandle) return Integer
+ is
+ Ref_Copy : vpiHandle;
+ Res : Integer;
+ begin
+ if Flag_Trace then
+ Trace_Start ("vpi_remove_cb (");
+ Trace (Ref);
+ Trace (") = ");
+ end if;
+
+ Res := 1;
+ Ref_Copy := Ref;
+ case Ref.Cb.Reason is
+ when cbValueChange =>
+ Delete_Callback (Ref.Cb_Handle);
+ when cbReadWriteSynch
+ | cbReadOnlySynch =>
+ Delete_Callback (Ref.Cb_Handle);
+ when others =>
+ Res := 0;
+ Ref_Copy := null;
+ end case;
+
+ if Flag_Trace then
+ if Ref_Copy = null then
+ Trace ("[not free] ");
+ else
+ Trace ("[free] ");
+ end if;
+ Trace (Res);
+ Trace_Newline;
+ end if;
+
+ Free (Ref_Copy);
+
+ return Res;
+ end vpi_remove_cb;
+
-- int vpi_free_object(vpiHandle ref)
function vpi_free_object (aRef: vpiHandle) return integer
is
@@ -1342,7 +1382,7 @@ package body Grt.Vpi is
Trace_Newline;
end if;
Ref_Copy := aRef;
- Free(Ref_Copy);
+ Free (Ref_Copy);
return 1;
end vpi_free_object;
@@ -1551,40 +1591,6 @@ package body Grt.Vpi is
return null;
end vpi_register_systf;
- -- int vpi_remove_cb(vpiHandle ref)
- function vpi_remove_cb (Ref : vpiHandle) return Integer
- is
- Ref_Copy : vpiHandle;
- Res : Integer;
- begin
- if Flag_Trace then
- Trace_Start ("vpi_remove_cb (");
- Trace (Ref);
- Trace (") = ");
- end if;
-
- Res := 1;
- Ref_Copy := Ref;
- case Ref.Cb.Reason is
- when cbValueChange =>
- Delete_Callback (Ref.Cb_Handle);
- when cbReadWriteSynch
- | cbReadOnlySynch =>
- Delete_Callback (Ref.Cb_Handle);
- when others =>
- Res := 0;
- Ref_Copy := null;
- end case;
- Free (Ref_Copy);
-
- if Flag_Trace then
- Trace (Res);
- Trace_Newline;
- end if;
-
- return Res;
- end vpi_remove_cb;
-
-- missing here, see grt-cvpi.c:
-- vpi_mcd_open_x
-- vpi_mcd_vprintf