***********************************************************
Simulation Log - A N S W E R S
***********************************************************
/* +define+no_implication

run -all
KERNEL:         10  clk=1 req=0 gnt=0
KERNEL:         10               test_implication FAIL
KERNEL:         30  clk=1 req=1 gnt=0
KERNEL:         50  clk=1 req=0 gnt=0
KERNEL:         50               test_implication FAIL
KERNEL:         70  clk=1 req=0 gnt=1
KERNEL:         70               test_implication FAIL
KERNEL:         70               test_implication PASS

		Q: WHY IS THERE A FAIL -AND- A PASS AT TIME (70) ??
		A: The FAIL is for the thread starting at time 70.
At 70, req==0 and since there is no implication, the property fails because without an implication there is no antecedent to match before the check begins. Whenever at posedge clk, 'req' detected low,the property will fail.
	
		   The PASS is for the thread that starts at 30.
		   At 30, req==1, so property eval proceeds.
		   At 70 (i.e. 2 clocks later) gnt==1 as required by the property and the
		   property PASSes.

KERNEL:         90  clk=1 req=1 gnt=0
KERNEL:        110  clk=1 req=0 gnt=0
KERNEL:        110               test_implication FAIL
KERNEL:        130  clk=1 req=0 gnt=0
KERNEL:        130               test_implication FAIL
KERNEL:        130               test_implication FAIL

		Q: WHY ARE THERE 2 FAILs AT TIME (130) ??
		A: The first failures is for the thread starting at time 90
		   At 90, req==1, so property eval proceeds.
		   At 130 (i.e. 2 clocks later) gnt==0 which violates the property and the 
		   property FAILs.

		   The second failure is for the thread starting at time 130.
		   At 130, req==0 and since there is no implication, the property fails
		   because without an implication there is no antecedent to match before
		   the check begins. Whenever at posedge clk, 'req' detected low, 
                   the property will fail.
*/

/* +define+implication

run -all
KERNEL:         10  clk=1 req=0 gnt=0
KERNEL:         10               test_implication PASS
KERNEL:         30  clk=1 req=1 gnt=0
KERNEL:         50  clk=1 req=0 gnt=0
KERNEL:         50               test_implication PASS
KERNEL:         70  clk=1 req=0 gnt=1
KERNEL:         70               test_implication PASS
KERNEL:         70               test_implication PASS

		Q: WHY ARE THERE 2 PASSes AT TIME 70 ??
		A: The first pass is for the thread starting at time 30.
		   At 30, req==1, so property eval proceeds.
		   At 70 (i.e. 2 clocks later) gnt==1 as required by the property and the
		   property PASSes.

		   The second pass is for the thread starting at time 70.
		   At 70, req==0 and since there is implication, the consequent eval won't 
		   start. However, there is a PASS action_block associated with the property
		   which triggers because of the vacuous pass phenomenon. In other words, 
		   whenever 'req' is low, the antecedent won't match and the property will 
                   pass vacuosly.

KERNEL:         90  clk=1 req=1 gnt=0
KERNEL:        110  clk=1 req=0 gnt=0
KERNEL:        110               test_implication PASS
KERNEL:        130  clk=1 req=0 gnt=0
KERNEL:        130               test_implication FAIL
KERNEL:        130               test_implication PASS

		Q: WHY IS THERE A PASS -and- a FAIL AT TIME 130 ??
		A: The failure is for the thread starting at time 90.
		   At 90, req==1, so property eval proceeds.
		   At 130 (i.e. 2 clocks later) gnt==0 which violates the property and the 
		   property FAILs.

		   The pass is for the property stating at 130.
		   At 130, req==0 and since there is implication, the consequent eval won't 
		   start. However, there is a PASS action_block associated with the property
		   which triggers because of the vacuous pass phenomenon. In other words, 
		   whenever 'req' is low, the antecedent won't match and the property will 
                   pass vacuosly.
*/

/* +define+implication_novac

run -all
KERNEL:         10  clk=1 req=0 gnt=0
KERNEL:         30  clk=1 req=1 gnt=0
KERNEL:         50  clk=1 req=0 gnt=0
KERNEL:         70  clk=1 req=0 gnt=1
KERNEL:         70               test_implication PASS
KERNEL:         90  clk=1 req=1 gnt=0
KERNEL:        110  clk=1 req=0 gnt=0
KERNEL:        130  clk=1 req=0 gnt=0
KERNEL:        130               test_implication FAIL

*/
