module SMEX1 title 'PLD Version of Example State Machine' " Input and output pins CLOCK, RESET_L, A, B pin; Q1..Q3 pin istype 'reg'; Z pin istype 'com'; " Definitions QSTATE = [Q1,Q2,Q3]; " State variables INIT = [ 0, 0, 0]; A0 = [ 1, 0, 0]; A1 = [ 1, 0, 1]; OK0 = [ 1, 1, 0]; OK1 = [ 1, 1, 1]; XTRA1 = [ 0, 0, 1]; XTRA2 = [ 0, 1, 0]; XTRA3 = [ 0, 1, 1]; RESET = !RESET_L; state_diagram QSTATE state INIT: IF RESET THEN INIT ELSE IF (A==0) THEN A0 ELSE A1; state A0: IF RESET THEN INIT ELSE IF (A==0) THEN OK0 ELSE A1; state A1: IF RESET THEN INIT ELSE IF (A==0) THEN A0 ELSE OK1; state OK0: IF RESET THEN INIT ELSE IF (B==1)&(A==0) THEN OK0 ELSE IF (B==1)&(A==1) THEN OK1 ELSE IF (A==0) THEN OK0 ELSE IF (A==1) THEN A1; state OK1: IF RESET THEN INIT ELSE IF (B==1)&(A==0) THEN OK0 ELSE IF (B==1)&(A==1) THEN OK1 ELSE IF (A==0) THEN A0 ELSE IF (A==1) THEN OK1; state XTRA1: GOTO INIT; state XTRA2: GOTO INIT; state XTRA3: GOTO INIT; equations QSTATE.CLK = CLOCK; " QSTATE.OE = 1; Z = (QSTATE == OK0) # (QSTATE == OK1); END SMEX1