|
|
@ -17,6 +17,7 @@ architecture psl of psl_abort is |
|
|
|
|
|
|
|
begin |
|
|
|
|
|
|
|
-- Creating an abort signal which is asynchronously set & reset |
|
|
|
d <= '0', '1' after 1100 ps, '0' after 1400 ps; |
|
|
|
|
|
|
|
-- 0123456789 |
|
|
@ -35,11 +36,21 @@ begin |
|
|
|
WITH_ABORT_0_a : assert (always a -> next (b before a)) abort c; |
|
|
|
|
|
|
|
-- In simulation this assertion should also hold, but it does not |
|
|
|
-- GHDL seems to implement abort as sync_abort instead of async_abort |
|
|
|
-- See 1850-2010 6.2.1.5.1 abort, async_abort, and sync_abort |
|
|
|
-- In formal this assertion fails as d is 0 all the time |
|
|
|
-- GHDL seemed to implement abort as sync_abort instead of async_abort |
|
|
|
-- See 1850-2010 6.2.1.5.1 abort, async_abort and sync_abort |
|
|
|
-- In formal this assertion fails at cycle 4 as d is 0 all the time |
|
|
|
-- Is fixed now, see issue ghdl/ghdl#1654 |
|
|
|
WITH_ABORT_1_a : assert (always a -> next (b before a)) abort d; |
|
|
|
|
|
|
|
-- async_abort is similar to abort |
|
|
|
-- In formal this assertion fails at cycle 4 as d is 0 all the time |
|
|
|
WITH_ABORT_2_a : assert (always a -> next (b before a)) async_abort d; |
|
|
|
|
|
|
|
-- sync_abort is working on synchronously events |
|
|
|
-- This assertion holds |
|
|
|
WITH_ABORT_3_a : assert (always a -> next (b before a)) sync_abort c; |
|
|
|
|
|
|
|
|
|
|
|
-- Stop simulation after longest running sequencer is finished |
|
|
|
-- Simulation only code by using pragmas |
|
|
|
-- synthesis translate_off |
|
|
|