DIRECTORY BitOps, CoreCreate, Ports, RosemaryUser; Arbiter: CEDAR DEFINITIONS = BEGIN maxArbiters: NAT = 8; Arbiters: TYPE = [0..maxArbiters); OtherArbiters: TYPE = [0..maxArbiters-1); maxDevices: NAT = 8; Devices: TYPE = [0..maxDevices); Priority: TYPE = [0..8) _ 7; HoldPriority: Priority = 2; NoRequestPriority: Priority = 7; PacketLength: TYPE = MACHINE DEPENDENT {short2(0), long5(1)} _ short2; DevPortParams: TYPE = RECORD [ priority: Priority _ 7, length: PacketLength _ short2 ]; DevReqType: TYPE = MACHINE DEPENDENT {L(0), H(1)} _ L; DevReqCode: TYPE = MACHINE DEPENDENT {release(0), seize(1), reqL(2), reqH(3)} _ release; ReqCount: TYPE = [0..6] _ 0; ArbParams: TYPE = REF ArbParamsRec _ NIL; ArbParamsRec: TYPE = RECORD [ whoAmI: Arbiters _ 0, ports: ARRAY Devices OF ARRAY DevReqType OF DevPortParams ]; RequesterStateRec: TYPE = RECORD [ probs: REF ProbabilitiesRec _ NIL, state: REF _ NIL ]; ProbabilitiesRec: TYPE = RECORD [ -- one in x request: ARRAY DevReqType OF INT _ ALL[100], hold: INT _ 1000 ]; DSerialOut: NAT = 0; -- DBus wire indexes DSerialIn: NAT = 1; nDReset: NAT = 2; nDFreeze: NAT = 3; DExecute: NAT = 4; DAddress: NAT = 5; DShiftCK: NAT = 6; PriorityRecLen: NAT = 9; PriorityRec: TYPE = MACHINE DEPENDENT RECORD [ unused (0: 0..6): [0..128) _ 0, hiP (0: 7..9): [0..8) _ 0, hiLong (0: 10..10): BOOL _ FALSE, loP (0: 11..13): [0..8) _ 0, loLong (0: 14..14): BOOL _ FALSE, nFIFOEna (0: 15..15): BOOL _ FALSE ]; DBusInitList: TYPE = LIST OF REF ANY _ NIL; DBusInitItem: TYPE = RECORD [ addr: BitOps.BitWord _ 0, offset: NAT _ 0, containerWidth: NAT _ BitOps.bitsPerDWord, container: BitOps.BitDWord ]; ArbExceptDBusCodeCT: PROC RETURNS [ ct: CoreCreate.CellType ]; ArbDBusCodeCT: PROC RETURNS [ ct: CoreCreate.CellType ]; SchematicCT: PROC [ cellName, designName: CoreCreate.ROPE ] RETURNS [ ct: CoreCreate.CellType ]; ResetSchematicCT: PROC [ cellName: CoreCreate.ROPE ]; SimplestArbCT: PROC RETURNS [ ct: CoreCreate.CellType ]; SimplestArbInit: PROC [cellType: CoreCreate.CellType, p: Ports.Port, Eval: PROC [memory: BOOL _ TRUE], dBusInit: DBusInitList _ NIL ]; CreateSanity: PROC RETURNS [ ct: CoreCreate.CellType ]; ArbRandReq: PROC RETURNS [ ct: CoreCreate.CellType ]; END. ðArbiter.mesa Copyright c 1987 by Xerox Corporation. All rights reserved. McCreight May 13, 1987 3:32:57 pm PDT There are up to eight arbiters in a Dragon system. And each arbiter connects to up to eight requesting devices. 0 is best-priority If 2 is the best-priority request, then no grant is made. Returns a single arbiter with two random request ports and the rest free This will be used by other folks trying to simulate their stuff. sanity check for not more than one grant, etc. ÊÙ˜šœ ™ Jšœ<™Jšž œœœ˜8J˜šž œœ$œœ˜`Jšžœœœ˜5J˜—šž œœœ˜8JšœH™HJ™@Jšžœœ0žœœ œœœ˜†J˜—šž œœœ˜7J™.J˜—Jšž œœœ˜5J˜Jšœ˜—J˜—…—°y