module ggame Title 'Guessing-Game State Machine' "GGAME device 'P16V8R'; " Inputs and outputs CLOCK, RESET, G1..G4 pin 1, 2, 3..6; L1..L4, ERR pin 12..15, 19 istype 'com'; Q2..Q0 pin 16..18 istype 'reg'; " Sets G = [G1..G4]; L = [L1..L4]; " States QSTATE = [Q2,Q1,Q0]; S1 = [ 0, 0, 0]; S2 = [ 0, 0, 1]; S3 = [ 0, 1, 1]; S4 = [ 0, 1, 0]; SOK = [ 1, 0, 0]; SERR = [ 1, 0, 0]; EXTRA1 = [ 1, 1, 0]; EXTRA2 = [ 1, 1, 1]; state_diagram QSTATE state S1: IF RESET THEN SOK ELSE IF G2 # G3 # G4 THEN SERR ELSE IF G1 THEN SOK ELSE S2; state S2: IF RESET THEN SOK ELSE IF G1 # G3 # G4 THEN SERR ELSE IF G2 THEN SOK ELSE S3; state S3: IF RESET THEN SOK ELSE IF G1 # G2 # G4 THEN SERR ELSE IF G3 THEN SOK ELSE S4; state S4: IF RESET THEN SOK ELSE IF G1 # G2 # G3 THEN SERR ELSE IF G4 THEN SOK ELSE S1; state SOK: IF RESET THEN SOK ELSE IF G1 # G2 # G3 # G4 THEN SOK ELSE S1; state SERR: IF RESET THEN SOK ELSE IF G1 # G2 # G3 # G4 THEN SERR ELSE S1; state EXTRA1: GOTO SOK; state EXTRA2: GOTO SOK; equations QSTATE.CLK = CLOCK; L1 = (QSTATE == S1); L2 = (QSTATE == S2); L3 = (QSTATE == S3); L4 = (QSTATE == S4); ERR = (QSTATE == SERR); end ggame