diff options
author | Tristan Gingold <tgingold@free.fr> | 2015-06-20 14:24:56 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2015-06-20 14:24:56 +0200 |
commit | c823d41669c55d6c0bdb8de5ef45a407ac4f25bd (patch) | |
tree | d38d297789deb9eaeaecfbda9965010fb66a27e4 | |
parent | d08386567e47854722e2b3a92720737837ca0bbd (diff) | |
download | ghdl-c823d41669c55d6c0bdb8de5ef45a407ac4f25bd.tar.gz ghdl-c823d41669c55d6c0bdb8de5ef45a407ac4f25bd.tar.bz2 ghdl-c823d41669c55d6c0bdb8de5ef45a407ac4f25bd.zip |
Adjust previous patch.
-rw-r--r-- | src/grt/grt-signals.adb | 28 | ||||
-rw-r--r-- | testsuite/gna/ticket89/repro2.vhdl | 24 | ||||
-rwxr-xr-x | testsuite/gna/ticket89/testsuite.sh | 4 |
3 files changed, 46 insertions, 10 deletions
diff --git a/src/grt/grt-signals.adb b/src/grt/grt-signals.adb index 96e2b9838..fc97729c7 100644 --- a/src/grt/grt-signals.adb +++ b/src/grt/grt-signals.adb @@ -2774,6 +2774,7 @@ package body Grt.Signals is procedure Delayed_Implicit_Process (Sig : Ghdl_Signal_Ptr) is Pfx : constant Ghdl_Signal_Ptr := Sig.Ports (0); + Ntime : Std_Time; Trans : Transaction_Acc; Last : Transaction_Acc; Prev : Transaction_Acc; @@ -2785,12 +2786,7 @@ package body Grt.Signals is -- R <= transport S after T; -- end process; - -- Create the transaction. - Trans := new Transaction'(Kind => Trans_Value, - Line => 0, - Time => Current_Time + Sig.S.Time, - Next => null, - Val => Pfx.Value); + Ntime := Current_Time + Sig.S.Time; -- Find the last transaction. Last := Sig.S.Attr_Trans; @@ -2801,11 +2797,23 @@ package body Grt.Signals is end loop; -- The transaction are scheduled after the last one. - pragma Assert (Last.Time <= Trans.Time); - pragma Assert (Last.Time /= Trans.Time or else Prev = Last); + pragma Assert (Last.Time <= Ntime); + + if Last.Time = Ntime then + -- Change the projected value. + Last.Val := Pfx.Value; + else + -- Create the transaction. + Trans := new Transaction'(Kind => Trans_Value, + Line => 0, + Time => Ntime, + Next => null, + Val => Pfx.Value); + + -- Append the transaction. + Prev.Next := Trans; + end if; - -- Append the transaction. - Prev.Next := Trans; if Sig.S.Time = 0 then Add_Active_Chain (Sig); end if; diff --git a/testsuite/gna/ticket89/repro2.vhdl b/testsuite/gna/ticket89/repro2.vhdl new file mode 100644 index 000000000..173fdcc2d --- /dev/null +++ b/testsuite/gna/ticket89/repro2.vhdl @@ -0,0 +1,24 @@ +entity repro2 is +end repro2; + +architecture behav of repro2 is + signal s : natural; +begin -- behav + process (s) is + variable v : natural; + begin + v := s'delayed (10 ns); + end process; + + process + begin + s <= 3; + wait for 0 ns; + s <= 4; + wait for 0 ns; + s <= 5; + wait for 0 ns; + s <= 5; + wait; + end process; +end behav; diff --git a/testsuite/gna/ticket89/testsuite.sh b/testsuite/gna/ticket89/testsuite.sh index e383bbc32..519bbe142 100755 --- a/testsuite/gna/ticket89/testsuite.sh +++ b/testsuite/gna/ticket89/testsuite.sh @@ -4,6 +4,10 @@ analyze repro.vhdl elab_simulate repro + +analyze repro2.vhdl +elab_simulate repro2 + clean GHDL_FLAGS=--work=ieee_proposed |