module IFTEST title 'Alternate Version of Example State Machine' " Input and output pins CLOCK, RESET_L, A, B pin; LASTA, Q1, Q2 pin istype 'reg'; Z pin istype 'com'; " Definitions QSTATE = [Q1,Q2]; " State variables INIT = [ 0, 0]; " State encodings LOOKING = [ 0, 1]; OK = [ 1, 0]; XTRA = [ 1, 1]; RESET = !RESET_L; state_diagram QSTATE state INIT: IF !RESET THEN LOOKING ELSE INIT; state LOOKING: IF !RESET THEN {IF (A == LASTA) THEN OK ELSE LOOKING;} ELSE INIT; state OK: IF !RESET THEN {IF B THEN OK ELSE IF (A == LASTA) THEN OK ELSE LOOKING;} ELSE INIT; state XTRA: GOTO INIT; equations LASTA.CLK = CLOCK; QSTATE.CLK = CLOCK; " QSTATE.OE = 1; LASTA := A; Z = (QSTATE == OK); END IFTEST