MODULE dummy TITLE 'ABEL file for Dummy Shaft Encoder Interface PLD' DECLARATIONS "These pin declarations are for the ispGAL22V10 CLOCK PIN 2; "Clock input nRESET PIN 3; "Active low asyncronous reset A PIN 4; B PIN 5; nBUTTin PIN 6; ACK PIN 7; BUTTout PIN 17 ISTYPE `REG`; BUTTreq PIN 18 ISTYPE `COM`; C2, C1, C0 PIN 19,20,21 ISTYPE `REG`; MOVEreq PIN 23 ISTYPE `COM`; lastA PIN 24 ISTYPE `REG`; Aretime PIN 25 ISTYPE `REG`; Bretime PIN 26 ISTYPE `REG`; lastBUTT PIN 27 ISTYPE `REG`; COUNT = [C2..C0]; EQUATIONS [BUTTout, COUNT, lastA, Aretime, Bretime, lastBUTT].CLK = CLOCK; [BUTTout, COUNT, lastA, Aretime, Bretime, lastBUTT].ACLR = !nRESET; Aretime := A; Bretime := B; lastA := Aretime; BUTTout := !nBUTTin; WHEN (ACK) THEN lastBUTT := BUTTout; ELSE lastBUTT := lastBUTT; BUTTreq = ((BUTTout & !lastBUTT) # (!BUTTout & lastBUTT)); WHEN (ACK) THEN { WHEN ( lastA == Aretime ) THEN COUNT := 0; ELSE WHEN ( Aretime == Bretime ) THEN "A is following B -> count down COUNT := -1; ELSE " count up COUNT := 1; } ELSE { WHEN ( lastA == Aretime ) THEN COUNT := COUNT; ELSE WHEN ( Aretime == Bretime ) THEN "A is following B -> count down { WHEN ( COUNT == -4 ) THEN COUNT := -4; "count at min ELSE COUNT := COUNT - 1; } ELSE " count up { WHEN ( COUNT == 3 ) THEN COUNT := 3; "count at max ELSE COUNT := COUNT + 1; } } MOVEreq = (COUNT != 0); END