aboutsummaryrefslogtreecommitdiffstats
path: root/src/grt/grt-signals.adb
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2018-02-25 08:28:01 +0100
committerTristan Gingold <tgingold@free.fr>2018-02-25 08:28:01 +0100
commit39d357cdff5f78e3727db50b40b259d033670d7f (patch)
treed97b4e58cf3d21a3f32db7d0cfa989a6ea432064 /src/grt/grt-signals.adb
parentcd3ab2472302454d6c9a63ed8aef05d2a966ebb9 (diff)
downloadghdl-39d357cdff5f78e3727db50b40b259d033670d7f.tar.gz
ghdl-39d357cdff5f78e3727db50b40b259d033670d7f.tar.bz2
ghdl-39d357cdff5f78e3727db50b40b259d033670d7f.zip
vpi/force signals: ensure value propagation.
Fix #531
Diffstat (limited to 'src/grt/grt-signals.adb')
-rw-r--r--src/grt/grt-signals.adb14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/grt/grt-signals.adb b/src/grt/grt-signals.adb
index 363e7977e..4cdc8c424 100644
--- a/src/grt/grt-signals.adb
+++ b/src/grt/grt-signals.adb
@@ -3324,15 +3324,21 @@ package body Grt.Signals is
Sig := Fv.Sig;
-- FIXME: Implement the full semantic of force: really force,
-- only set driving/effective value, release...
+ Mark_Active (Sig);
case Fv.Kind is
when Force_Driving =>
- Mark_Active (Sig);
Sig.Driving_Value := Fv.Val;
- Set_Effective_Value (Sig, Sig.Driving_Value'Access);
when Force_Effective =>
- Mark_Active (Sig);
- Set_Effective_Value (Sig, Fv.Val'Access);
+ null;
end case;
+ Set_Effective_Value (Sig, Fv.Val'Access);
+
+ if Sig.Net in Signal_Net_Defined then
+ -- HACK: mark SIG as active so that propagation will execute
+ -- just below.
+ Add_Active_Chain (Sig);
+ end if;
+
Next_Fv := Fv.Next;
Free (Fv);
Fv := Next_Fv;