<> <> DIRECTORY RoseTypes, RoseCreate, Dragon, SwitchTypes, NumTypes, EnumTypes, CachePInterfacePCAMDriver, CachePInterfacePCtl, CachePInterfacePRAMDriver, CachePInterfacePPads; CachePInterface: CEDAR PROGRAM IMPORTS RoseCreate, NumTypes, EnumTypes, CachePInterfacePCAMDriver, CachePInterfacePCtl, CachePInterfacePRAMDriver, CachePInterfacePPads = BEGIN OPEN RoseTypes; <> PBusCommands: TYPE = Dragon.PBusCommands; PBusFaults: TYPE = Dragon.PBusFaults; RegisterCells: PROC = BEGIN [] _ RoseCreate.RegisterCellType[name: "PInterface", expandProc: PInterfaceExpand, ioCreator: CreatePInterfaceIO, initializer: NIL, evals: [], blackBox: NIL, stateToo: NIL, ports: CreatePInterfacePorts[], drivePrototype: NEW [PInterfaceDrive]]; END; otherss: SymbolTable _ RoseCreate.GetOtherss["CachePInterface.pass"]; CreatePInterfacePorts: PROC RETURNS [ports: Ports] = {ports _ RoseCreate.PortsFromFile["CachePInterface.PInterface.rosePorts"]}; PInterfaceIORef: TYPE = REF PInterfaceIORec; PInterfaceIORec: TYPE = MACHINE DEPENDENT RECORD [ fill0(0:0..14): [0..32767], Vdd(0:15..15): BOOLEAN, fill1(1:0..14): [0..32767], Gnd(1:15..15): BOOLEAN, fill2(2:0..14): [0..32767], PadVdd(2:15..15): BOOLEAN, fill3(3:0..14): [0..32767], PadGnd(3:15..15): BOOLEAN, PData(4:0..31): ARRAY [0..2) OF CARDINAL, fill5(6:0..14): [0..32767], PParityB(6:15..15): BOOLEAN, fill6(7:0..11): [0..4095], PCmdA(7:12..15): PBusCommands, fill7(8:0..14): [0..32767], PRejectB(8:15..15): BOOLEAN, fill8(9:0..11): [0..4095], PFaultB(9:12..15): PBusFaults, fill9(10:0..14): [0..32767], PNPError(10:15..15): BOOLEAN, fill10(11:0..14): [0..32767], PhAb(11:15..15): BOOLEAN, fill11(12:0..14): [0..32767], nPhAb(12:15..15): BOOLEAN, fill12(13:0..14): [0..32767], PhBb(13:15..15): BOOLEAN, fill13(14:0..14): [0..32767], Resetb(14:15..15): BOOLEAN, CAMPage(15:0..383): PACKED ARRAY [0 .. 23] OF SwitchTypes.SwitchVal, nCAMPage(39:0..383): PACKED ARRAY [0 .. 23] OF SwitchTypes.SwitchVal, CAMBlock(63:0..63): PACKED ARRAY [0 .. 3] OF SwitchTypes.SwitchVal, nCAMBlock(67:0..63): PACKED ARRAY [0 .. 3] OF SwitchTypes.SwitchVal, PBitsB(71:0..2111): PACKED ARRAY [0 .. 131] OF SwitchTypes.SwitchVal, nPBitsB(203:0..2111): PACKED ARRAY [0 .. 131] OF SwitchTypes.SwitchVal, fill20(335:0..14): [0..32767], nVQMatchB(335:15..15): BOOLEAN, fill21(336:0..14): [0..32767], nQuadSharedB(336:15..15): BOOLEAN, fill22(337:0..14): [0..32767], PStoreAB(337:15..15): BOOLEAN, fill23(338:0..14): [0..32767], nPStoreAB(338:15..15): BOOLEAN, fill24(339:0..11): [0..4095], PQSelAB(339:12..15): [0..15], fill25(340:0..14): [0..32767], nPageDirtyB(340:15..15): BOOLEAN, fill26(341:0..14): [0..32767], SenseVMatchA(341:15..15): BOOLEAN, fill27(342:0..14): [0..32767], MDoneAB(342:15..15): BOOLEAN, fill28(343:0..14): [0..32767], MHeldAB(343:15..15): BOOLEAN, fill29(344:0..11): [0..4095], MFaultAB(344:12..15): PBusFaults, fill30(345:0..11): [0..4095], PCmdToMAB(345:12..15): PBusCommands, fill31(346:0..11): [0..4095], PAdr2831AB(346:12..15): [0..15], fill32(347:0..14): [0..32767], DriveVirtualPageAdrBA(347:15..15): BOOLEAN, fill33(348:0..14): [0..32767], DriveVirtualBlockAdrBA(348:15..15): BOOLEAN, fill34(349:0..14): [0..32767], StartWordMachineBA(349:15..15): BOOLEAN]; <> PInterfaceCAMPagePortIndex: CARDINAL = 14; PInterfaceNCAMPagePortIndex: CARDINAL = 15; PInterfaceCAMBlockPortIndex: CARDINAL = 16; PInterfaceNCAMBlockPortIndex: CARDINAL = 17; PInterfacePBitsBPortIndex: CARDINAL = 18; PInterfaceNPBitsBPortIndex: CARDINAL = 19; PInterfaceDrive: TYPE = MACHINE DEPENDENT RECORD [ fill0(0:0..14): [0 .. 32768), Vdd(0:15..15): BOOLEAN, fill1(1:0..14): [0 .. 32768), Gnd(1:15..15): BOOLEAN, fill2(2:0..14): [0 .. 32768), PadVdd(2:15..15): BOOLEAN, fill3(3:0..14): [0 .. 32768), PadGnd(3:15..15): BOOLEAN, fill4(4:0..14): [0 .. 32768), PData(4:15..15): BOOLEAN, fill5(5:0..14): [0 .. 32768), PParityB(5:15..15): BOOLEAN, fill6(6:0..14): [0 .. 32768), PCmdA(6:15..15): BOOLEAN, fill7(7:0..14): [0 .. 32768), PRejectB(7:15..15): BOOLEAN, fill8(8:0..14): [0 .. 32768), PFaultB(8:15..15): BOOLEAN, fill9(9:0..14): [0 .. 32768), PNPError(9:15..15): BOOLEAN, fill10(10:0..14): [0 .. 32768), PhAb(10:15..15): BOOLEAN, fill11(11:0..14): [0 .. 32768), nPhAb(11:15..15): BOOLEAN, fill12(12:0..14): [0 .. 32768), PhBb(12:15..15): BOOLEAN, fill13(13:0..14): [0 .. 32768), Resetb(13:15..15): BOOLEAN, fill14(14:0..14): [0 .. 32768), CAMPage(14:15..15): BOOLEAN, fill15(15:0..14): [0 .. 32768), nCAMPage(15:15..15): BOOLEAN, fill16(16:0..14): [0 .. 32768), CAMBlock(16:15..15): BOOLEAN, fill17(17:0..14): [0 .. 32768), nCAMBlock(17:15..15): BOOLEAN, fill18(18:0..14): [0 .. 32768), PBitsB(18:15..15): BOOLEAN, fill19(19:0..14): [0 .. 32768), nPBitsB(19:15..15): BOOLEAN, fill20(20:0..14): [0 .. 32768), nVQMatchB(20:15..15): BOOLEAN, fill21(21:0..14): [0 .. 32768), nQuadSharedB(21:15..15): BOOLEAN, fill22(22:0..14): [0 .. 32768), PStoreAB(22:15..15): BOOLEAN, fill23(23:0..14): [0 .. 32768), nPStoreAB(23:15..15): BOOLEAN, fill24(24:0..14): [0 .. 32768), PQSelAB(24:15..15): BOOLEAN, fill25(25:0..14): [0 .. 32768), nPageDirtyB(25:15..15): BOOLEAN, fill26(26:0..14): [0 .. 32768), SenseVMatchA(26:15..15): BOOLEAN, fill27(27:0..14): [0 .. 32768), MDoneAB(27:15..15): BOOLEAN, fill28(28:0..14): [0 .. 32768), MHeldAB(28:15..15): BOOLEAN, fill29(29:0..14): [0 .. 32768), MFaultAB(29:15..15): BOOLEAN, fill30(30:0..14): [0 .. 32768), PCmdToMAB(30:15..15): BOOLEAN, fill31(31:0..14): [0 .. 32768), PAdr2831AB(31:15..15): BOOLEAN, fill32(32:0..14): [0 .. 32768), DriveVirtualPageAdrBA(32:15..15): BOOLEAN, fill33(33:0..14): [0 .. 32768), DriveVirtualBlockAdrBA(33:15..15): BOOLEAN, fill34(34:0..14): [0 .. 32768), StartWordMachineBA(34:15..15): BOOLEAN]; CreatePInterfaceIO: PROC [cell: Cell] --IOCreator-- = { cell.realCellStuff.switchIO _ NEW [PInterfaceIORec]; cell.realCellStuff.newIO _ NEW [PInterfaceIORec]; cell.realCellStuff.oldIO _ NEW [PInterfaceIORec]; }; PInterfaceExpand: PROC [thisCell: Cell, to: ExpansionReceiver] --ExpandProc-- = { PrivateLookupNode: PROC [name: ROPE] RETURNS [node: Node] = {node _ RoseCreate.LookupNode[from: thisCell, path: LIST[name]]}; Vdd: Node _ PrivateLookupNode["Vdd"]; Gnd: Node _ PrivateLookupNode["Gnd"]; PadVdd: Node _ PrivateLookupNode["PadVdd"]; PadGnd: Node _ PrivateLookupNode["PadGnd"]; PData: Node _ PrivateLookupNode["PData"]; PParityB: Node _ PrivateLookupNode["PParityB"]; PCmdA: Node _ PrivateLookupNode["PCmdA"]; PRejectB: Node _ PrivateLookupNode["PRejectB"]; PFaultB: Node _ PrivateLookupNode["PFaultB"]; PNPError: Node _ PrivateLookupNode["PNPError"]; PhAb: Node _ PrivateLookupNode["PhAb"]; nPhAb: Node _ PrivateLookupNode["nPhAb"]; PhBb: Node _ PrivateLookupNode["PhBb"]; Resetb: Node _ PrivateLookupNode["Resetb"]; CAMPage: Node _ PrivateLookupNode["CAMPage"]; nCAMPage: Node _ PrivateLookupNode["nCAMPage"]; CAMBlock: Node _ PrivateLookupNode["CAMBlock"]; nCAMBlock: Node _ PrivateLookupNode["nCAMBlock"]; PBitsB: Node _ PrivateLookupNode["PBitsB"]; nPBitsB: Node _ PrivateLookupNode["nPBitsB"]; nVQMatchB: Node _ PrivateLookupNode["nVQMatchB"]; nQuadSharedB: Node _ PrivateLookupNode["nQuadSharedB"]; PStoreAB: Node _ PrivateLookupNode["PStoreAB"]; nPStoreAB: Node _ PrivateLookupNode["nPStoreAB"]; PQSelAB: Node _ PrivateLookupNode["PQSelAB"]; nPageDirtyB: Node _ PrivateLookupNode["nPageDirtyB"]; SenseVMatchA: Node _ PrivateLookupNode["SenseVMatchA"]; MDoneAB: Node _ PrivateLookupNode["MDoneAB"]; MHeldAB: Node _ PrivateLookupNode["MHeldAB"]; MFaultAB: Node _ PrivateLookupNode["MFaultAB"]; PCmdToMAB: Node _ PrivateLookupNode["PCmdToMAB"]; PAdr2831AB: Node _ PrivateLookupNode["PAdr2831AB"]; DriveVirtualPageAdrBA: Node _ PrivateLookupNode["DriveVirtualPageAdrBA"]; DriveVirtualBlockAdrBA: Node _ PrivateLookupNode["DriveVirtualBlockAdrBA"]; StartWordMachineBA: Node _ PrivateLookupNode["StartWordMachineBA"]; others: SymbolTable _ RoseCreate.GetOthers[otherss, "PInterface"]; PDataI: Node _ to.class.NodeInstance[erInstance: to.instance, name: "PDataI", type: NumTypes.NumType[32], other: RoseCreate.GetOther[others, "PDataI"]]; NodeCreateHack1: PROC [name: ROPE] RETURNS [node: Node] = {node _ to.class.NodeInstance[erInstance: to.instance, name: name, type: NumTypes.boolType, other: RoseCreate.GetOther[others, name]]}; PParityI: Node _ NodeCreateHack1["PParityI"]; DrivePDataB: Node _ NodeCreateHack1["DrivePDataB"]; DrivePDataI: Node _ NodeCreateHack1["DrivePDataI"]; PCmdI: Node _ to.class.NodeInstance[erInstance: to.instance, name: "PCmdI", type: EnumTypes.EnumType["Dragon.PBusCommands"], other: RoseCreate.GetOther[others, "PCmdI"]]; PRejectDriveHigh: Node _ NodeCreateHack1["PRejectDriveHigh"]; PRejectDriveLow: Node _ NodeCreateHack1["PRejectDriveLow"]; PFaultDrive: Node _ NodeCreateHack1["PFaultDrive"]; PFaultI: Node _ to.class.NodeInstance[erInstance: to.instance, name: "PFaultI", type: EnumTypes.EnumType["Dragon.PBusFaults"], other: RoseCreate.GetOther[others, "PFaultI"]]; PNPErrorDriveLow: Node _ NodeCreateHack1["PNPErrorDriveLow"]; VARegSensePDataIA: Node _ NodeCreateHack1["VARegSensePDataIA"]; LastRefRegSenseVARegB: Node _ NodeCreateHack1["LastRefRegSenseVARegB"]; PageDriveCAMBitsA: Node _ NodeCreateHack1["PageDriveCAMBitsA"]; BlockDriveCAMBitsA: Node _ NodeCreateHack1["BlockDriveCAMBitsA"]; RefMatchesLastRefReg: Node _ NodeCreateHack1["RefMatchesLastRefReg"]; PRamRegSensePDataIB: Node _ NodeCreateHack1["PRamRegSensePDataIB"]; PRamRegDrivePDataIB: Node _ NodeCreateHack1["PRamRegDrivePDataIB"]; PRamRegSensePBitsB: Node _ NodeCreateHack1["PRamRegSensePBitsB"]; PRamRegDrivePBitsB: Node _ NodeCreateHack1["PRamRegDrivePBitsB"]; PRamRegParityOut: Node _ NodeCreateHack1["PRamRegParityOut"]; PAdr3031AB: Node _ to.class.NodeInstance[erInstance: to.instance, name: "PAdr3031AB", type: NumTypes.NumType[2], other: RoseCreate.GetOther[others, "PAdr3031AB"]]; [] _ to.class.CellInstance[erInstance: to.instance, instanceName: "pCAMDriver", typeName: "PCAMDriver", other: RoseCreate.GetOther[others, "pCAMDriver"], interfaceNodes: ""]; [] _ to.class.CellInstance[erInstance: to.instance, instanceName: "pCtl", typeName: "PCtl", other: RoseCreate.GetOther[others, "pCtl"], interfaceNodes: ""]; [] _ to.class.CellInstance[erInstance: to.instance, instanceName: "pRAMDriver", typeName: "PRAMDriver", other: RoseCreate.GetOther[others, "pRAMDriver"], interfaceNodes: ""]; [] _ to.class.CellInstance[erInstance: to.instance, instanceName: "pPads", typeName: "PPads", other: RoseCreate.GetOther[others, "pPads"], interfaceNodes: ""]; }; RegisterCells[]; END.