FSMTest.mesa
Copyright © 1987 by Xerox Corporation. All rights reserved.
Barth, June 15, 1987 5:01:36 pm PDT
Last Edited by: Don Curry July 20, 1987 10:28:58 am PDT
DIRECTORY Core, Ports, Rosemary, RosemaryUser;
FSMTest: CEDAR PROGRAM
IMPORTS Ports, Rosemary, RosemaryUser
= BEGIN
Binding
Vdd, Gnd, Reset, Clock, CountRowAdr, DriveCharMatch, LoadMatchAddress, ForceMatchLoad, SetReady, WriteMatchEnable, WriteCharEnable, LoadRowAdr, ReadStateEnable, RowAdrEqual, MatchChar, ReadCharMatch, WriteChar, WriteCharMatch: NATLAST[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"]};
Test
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[]};
Start Code
RosemaryUser.RegisterTestProc["FSMExample", FSMExampleTestProc]; 
END.