|  |  | @ -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 | 
			
		
	
	
		
			
				
					|  |  | 
 |