<> <> <> <> <<>> DIRECTORY Core, Ports, Rosemary, RosemaryUser; FSMTest: CEDAR PROGRAM IMPORTS Ports, Rosemary, RosemaryUser = BEGIN <> Vdd, Gnd, Reset, Clock, CountRowAdr, DriveCharMatch, LoadMatchAddress, ForceMatchLoad, SetReady, WriteMatchEnable, WriteCharEnable, LoadRowAdr, ReadStateEnable, RowAdrEqual, MatchChar, ReadCharMatch, WriteChar, WriteCharMatch: NAT _ LAST[NAT]; InitPortIndicies: PROC [p: Core.Wire] ~ { [Vdd, Gnd, Reset, Clock, CountRowAdr, DriveCharMatch, LoadMatchAddress, ForceMatchLoad, SetReady] _ Ports.PortIndexes[p, "Vdd", "Gnd", "Reset", "Clock", "CountRowAdr", "DriveCharMatch", "LoadMatchAddress", "ForceMatchLoad", "SetReady"]; [WriteMatchEnable, WriteCharEnable, LoadRowAdr, ReadStateEnable, RowAdrEqual, MatchChar, ReadCharMatch, WriteChar, WriteCharMatch] _ Ports.PortIndexes[p, "WriteMatchEnable", "WriteCharEnable", "LoadRowAdr", "ReadStateEnable", "RowAdrEqual", "MatchChar", "ReadCharMatch", "WriteChar", "WriteCharMatch"]}; <> FSMExampleTestProc: RosemaryUser.TestProc ~ { MyEval: RosemaryUser.TestEvalProc ~ { Eval[memory: TRUE, clockEval: TRUE]; Eval[memory: TRUE, clockEval: FALSE]}; Init: PROC = { p[Reset].b _ TRUE; p[Clock].b _ FALSE; MyEval[]; p[SetReady].b _ TRUE; p[Clock].b _ TRUE; MyEval[]}; InitPortIndicies[cellType.public]; Init[! Rosemary.Stop => IF reason = $BoolWireHasX THEN RESUME ELSE REJECT]; p[Reset].b _ FALSE; p[Clock].b _ FALSE; MyEval[]; p[SetReady].b _ FALSE; p[LoadRowAdr].b _ TRUE; p[Clock].b _ TRUE; MyEval[]; p[Clock].b _ FALSE; MyEval[]; p[Clock].b _ TRUE; MyEval[]; p[MatchChar].b _ TRUE; p[Clock].b _ FALSE; MyEval[]; -- M1 p[LoadRowAdr].b _ FALSE; p[CountRowAdr].b _ TRUE; p[DriveCharMatch].b _ TRUE; p[Clock].b _ TRUE; MyEval[]; p[MatchChar].b _ FALSE; p[Clock].b _ FALSE; MyEval[]; -- M11 p[ForceMatchLoad].b _ TRUE; p[LoadMatchAddress].b _ TRUE; p[Clock].b _ TRUE; MyEval[]; p[Clock].b _ FALSE; MyEval[]; -- M2 p[ForceMatchLoad].b _ FALSE; p[Clock].b _ TRUE; MyEval[]; p[Clock].b _ FALSE; MyEval[]; -- M2 p[Clock].b _ TRUE; MyEval[]; p[RowAdrEqual].b _ TRUE; p[Clock].b _ FALSE; MyEval[]; -- M3 p[CountRowAdr].b _ FALSE; p[Clock].b _ TRUE; MyEval[]; p[RowAdrEqual].b _ FALSE; p[Clock].b _ FALSE; MyEval[]; -- M4 p[DriveCharMatch].b _ FALSE; p[SetReady].b _ TRUE; p[Clock].b _ TRUE; MyEval[]; p[RowAdrEqual].b _ FALSE; p[Clock].b _ FALSE; MyEval[]; -- Idle p[LoadMatchAddress].b _ FALSE; p[SetReady].b _ FALSE; p[LoadRowAdr].b _ TRUE; p[Clock].b _ TRUE; MyEval[]}; <> RosemaryUser.RegisterTestProc["FSMExample", FSMExampleTestProc]; END. <<>>