<> <> <> <<>> DIRECTORY Core, Boole, CoreCreate, CoreOps, FiniteStateAutomata; RequestArbiterFSM: CEDAR PROGRAM IMPORTS Boole, CoreCreate, CoreOps, FiniteStateAutomata = BEGIN OPEN Boole, CoreCreate, FiniteStateAutomata; Create: PROC RETURNS [ct: CellType] = { fsa: StateMachine; AReq: Wire _ CoreOps.CreateWire[name: "AReq"]; BReq: Wire _ CoreOps.CreateWire[name: "BReq"]; PopReq: Wire _ CoreOps.CreateWire[name: "PopReq"]; PriorityA: Wire _ CoreOps.CreateWire[name: "PriorityA"]; PriorityB: Wire _ CoreOps.CreateWire[name: "PriorityB"]; public: Wire _ WireList[LIST["Vdd", "Gnd", "Clock", "Reset", AReq, BReq, PopReq, PriorityA, PriorityB]]; states: LIST OF ATOM _ LIST[$Idle]; states _ StateSeq[states, "PA", 2]; states _ StateSeq[states, "PB", 2]; fsa _ NewMachine[states]; Mealy[fsa, $Idle, NIL, LIST [ [$Idle, And[Not[AReq], Not[BReq]]], [$PA0, AReq], [$PB0, BReq] ]]; Mealy[fsa, $PA0, LIST[PriorityA], LIST[ [$Idle, And[PopReq, Not[BReq]]], [$PA0, And[Not[PopReq], Not[BReq]]], [$PA1, And[Not[PopReq], BReq]], [$PB0, And[PopReq, BReq]] ]]; Mealy[fsa, $PA1, LIST[PriorityA], LIST[ [$PA1, Not[PopReq]], [$PB0, PopReq] ]]; Mealy[fsa, $PB0, LIST[PriorityB], LIST[ [$Idle, And[PopReq, Not[AReq]]], [$PA0, And[PopReq, AReq]], [$PB0, And[Not[PopReq], Not[AReq]]], [$PB1, And[Not[PopReq], AReq]] ]]; Mealy[fsa, $PB1, LIST[PriorityB], LIST[ [$PA0, PopReq], [$PB1, Not[PopReq]] ]]; fsa.initialState _ FindState[fsa, $Idle]; ct _ StateMachineCell[public, fsa]; }; END.