--CacheMCtlCAMCtl.Mesa
--created by RoseTranslate from CacheMCtlCAMCtl.Rose of May 1, 1984 7:50:04 pm PDT for Barth.pa at May 3, 1984 9:25:51 pm PDT
DIRECTORY
RoseTypes, RoseCreate;
CacheMCtlCAMCtl: CEDAR PROGRAM
IMPORTS RoseCreate =
BEGIN OPEN
RoseTypes;
--Signal Type decls
GetAddressCommands: TYPE = {VictimReal, RefRealMap, RefRealAssemble, RefVirtual};
RegisterCells: PROC =
BEGIN
CreateMCtlCAMCtlPorts[];
[] ← RoseCreate.RegisterCellClass[className: "MCtlCAMCtl",
expandProc: NIL,
ioCreator: CreateMCtlCAMCtlIO, initializer: NIL,
evals: [EvalSimple: MCtlCAMCtlEvalSimple],
blackBox: NIL, stateToo: NIL,
ports: MCtlCAMCtlPorts,
drivePrototype: NEW [MCtlCAMCtlDrive]];
END;
CreateMCtlCAMCtlPorts: PROC = {MCtlCAMCtlPorts ← RoseCreate.PortsFromFile["CacheMCtlCAMCtl.MCtlCAMCtl.rosePorts"]};
MCtlCAMCtlIORef: TYPE = REF MCtlCAMCtlIORec;
MCtlCAMCtlIORec: 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],
LatchBias(2:15..15): BOOLEAN,
fill3(3:0..14): [0..32767],
PhBb(3:15..15): BOOLEAN,
fill4(4:0..14): [0..32767],
ShiftDataToMCAM(4:15..15): BOOLEAN,
fill5(5:0..14): [0..32767],
PageAccessToAccess(5:15..15): BOOLEAN,
fill6(6:0..14): [0..32767],
BlockAccessToAccess(6:15..15): BOOLEAN,
fill7(7:0..14): [0..32767],
PageVirtualToAccess(7:15..15): BOOLEAN,
fill8(8:0..14): [0..32767],
BlockVirtualToAccess(8:15..15): BOOLEAN,
fill9(9:0..14): [0..32767],
MatchToAccess(9:15..15): BOOLEAN,
fill10(10:0..14): [0..32767],
MDataToMatch(10:15..15): BOOLEAN,
fill11(11:0..14): [0..32767],
AccessToMatch(11:15..15): BOOLEAN,
fill12(12:0..14): [0..32767],
PageAccessToMData(12:15..15): BOOLEAN,
fill13(13:0..14): [0..32767],
nPageAccessToMData(13:15..15): BOOLEAN,
fill14(14:0..14): [0..32767],
BlockAccessToMData(14:15..15): BOOLEAN,
fill15(15:0..14): [0..32767],
nBlockAccessToMData(15:15..15): BOOLEAN,
fill16(16:0..14): [0..32767],
AccessToPageBlockAccess(16:15..15): BOOLEAN,
fill17(17:0..14): [0..32767],
nAccessToPageBlockAccess(17:15..15): BOOLEAN,
fill18(18:0..14): [0..32767],
ShiftToPageBlockAccess(18:15..15): BOOLEAN,
fill19(19:0..14): [0..32767],
nShiftToPageBlockAccess(19:15..15): BOOLEAN,
fill20(20:0..14): [0..32767],
AccessDrive(20:15..15): BOOLEAN,
fill21(21:0..14): [0..32767],
nAccessDrive(21:15..15): BOOLEAN,
fill22(22:0..14): [0..32767],
PageBlockAccessToShift(22:15..15): BOOLEAN,
fill23(23:0..14): [0..32767],
nPageBlockAccessToShift(23:15..15): BOOLEAN,
fill24(24:0..14): [0..32767],
nCAMAccessPrecharge(24:15..15): BOOLEAN,
fill25(25:0..14): [0..32767],
ShiftDataToCAMCtl(25:15..15): BOOLEAN,
fill26(26:0..14): [0..32767],
ReadEntry(26:15..15): BOOLEAN,
fill27(27:0..14): [0..32767],
WriteEntry(27:15..15): BOOLEAN,
fill28(28:0..14): [0..32767],
ShiftExecute(28:15..15): BOOLEAN,
fill29(29:0..14): [0..32767],
nShiftExecute(29:15..15): BOOLEAN,
fill30(30:0..14): [0..32767],
CAMMDataIToMatchReg(30:15..15): BOOLEAN,
fill31(31:0..14): [0..32767],
CAMGetAdrRefresh(31:15..15): BOOLEAN,
fill32(32:0..14): [0..32767],
CAMGetAddress(32:15..15): BOOLEAN,
fill33(33:0..14): [0..32767],
CAMPageAccessToMDataI(33:15..15): BOOLEAN,
fill34(34:0..14): [0..32767],
CAMLowBitsAccessToMDataI(34:15..15): BOOLEAN,
fill35(35:0..14): [0..32767],
CAMAccessToMatch(35:15..15): BOOLEAN,
fill36(36:0..14): [0..32767],
CAMMatchToAccess(36:15..15): BOOLEAN,
fill37(37:0..14): [0..32767],
CAMVirtualAddressToAccess(37:15..15): BOOLEAN,
fill38(38:0..14): [0..32767],
CAMDriveCAMAccess(38:15..15): BOOLEAN,
fill39(39:0..13): [0..16383],
GetAdrCmdBA(39:14..15): GetAddressCommands];
-- port indices:
MCtlCAMCtlDrive: 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),
LatchBias(2:15..15): BOOLEAN,
fill3(3:0..14): [0 .. 32768),
PhBb(3:15..15): BOOLEAN,
fill4(4:0..14): [0 .. 32768),
ShiftDataToMCAM(4:15..15): BOOLEAN,
fill5(5:0..14): [0 .. 32768),
PageAccessToAccess(5:15..15): BOOLEAN,
fill6(6:0..14): [0 .. 32768),
BlockAccessToAccess(6:15..15): BOOLEAN,
fill7(7:0..14): [0 .. 32768),
PageVirtualToAccess(7:15..15): BOOLEAN,
fill8(8:0..14): [0 .. 32768),
BlockVirtualToAccess(8:15..15): BOOLEAN,
fill9(9:0..14): [0 .. 32768),
MatchToAccess(9:15..15): BOOLEAN,
fill10(10:0..14): [0 .. 32768),
MDataToMatch(10:15..15): BOOLEAN,
fill11(11:0..14): [0 .. 32768),
AccessToMatch(11:15..15): BOOLEAN,
fill12(12:0..14): [0 .. 32768),
PageAccessToMData(12:15..15): BOOLEAN,
fill13(13:0..14): [0 .. 32768),
nPageAccessToMData(13:15..15): BOOLEAN,
fill14(14:0..14): [0 .. 32768),
BlockAccessToMData(14:15..15): BOOLEAN,
fill15(15:0..14): [0 .. 32768),
nBlockAccessToMData(15:15..15): BOOLEAN,
fill16(16:0..14): [0 .. 32768),
AccessToPageBlockAccess(16:15..15): BOOLEAN,
fill17(17:0..14): [0 .. 32768),
nAccessToPageBlockAccess(17:15..15): BOOLEAN,
fill18(18:0..14): [0 .. 32768),
ShiftToPageBlockAccess(18:15..15): BOOLEAN,
fill19(19:0..14): [0 .. 32768),
nShiftToPageBlockAccess(19:15..15): BOOLEAN,
fill20(20:0..14): [0 .. 32768),
AccessDrive(20:15..15): BOOLEAN,
fill21(21:0..14): [0 .. 32768),
nAccessDrive(21:15..15): BOOLEAN,
fill22(22:0..14): [0 .. 32768),
PageBlockAccessToShift(22:15..15): BOOLEAN,
fill23(23:0..14): [0 .. 32768),
nPageBlockAccessToShift(23:15..15): BOOLEAN,
fill24(24:0..14): [0 .. 32768),
nCAMAccessPrecharge(24:15..15): BOOLEAN,
fill25(25:0..14): [0 .. 32768),
ShiftDataToCAMCtl(25:15..15): BOOLEAN,
fill26(26:0..14): [0 .. 32768),
ReadEntry(26:15..15): BOOLEAN,
fill27(27:0..14): [0 .. 32768),
WriteEntry(27:15..15): BOOLEAN,
fill28(28:0..14): [0 .. 32768),
ShiftExecute(28:15..15): BOOLEAN,
fill29(29:0..14): [0 .. 32768),
nShiftExecute(29:15..15): BOOLEAN,
fill30(30:0..14): [0 .. 32768),
CAMMDataIToMatchReg(30:15..15): BOOLEAN,
fill31(31:0..14): [0 .. 32768),
CAMGetAdrRefresh(31:15..15): BOOLEAN,
fill32(32:0..14): [0 .. 32768),
CAMGetAddress(32:15..15): BOOLEAN,
fill33(33:0..14): [0 .. 32768),
CAMPageAccessToMDataI(33:15..15): BOOLEAN,
fill34(34:0..14): [0 .. 32768),
CAMLowBitsAccessToMDataI(34:15..15): BOOLEAN,
fill35(35:0..14): [0 .. 32768),
CAMAccessToMatch(35:15..15): BOOLEAN,
fill36(36:0..14): [0 .. 32768),
CAMMatchToAccess(36:15..15): BOOLEAN,
fill37(37:0..14): [0 .. 32768),
CAMVirtualAddressToAccess(37:15..15): BOOLEAN,
fill38(38:0..14): [0 .. 32768),
CAMDriveCAMAccess(38:15..15): BOOLEAN,
fill39(39:0..14): [0 .. 32768),
GetAdrCmdBA(39:15..15): BOOLEAN];
CreateMCtlCAMCtlIO: IOCreator = {
cell.realCellStuff.newIO ← NEW [MCtlCAMCtlIORec];
cell.realCellStuff.oldIO ← NEW [MCtlCAMCtlIORec];
};
MCtlCAMCtlEvalSimple: CellProc =
BEGIN
newIO: MCtlCAMCtlIORef ← NARROW[cell.realCellStuff.newIO];
BEGIN OPEN newIO;
getAdr: BOOL ← CAMGetAdrRefresh OR CAMGetAddress;
PageAccessToAccess ← getAdr AND (GetAdrCmdBA=VictimReal OR GetAdrCmdBA=RefRealAssemble);
BlockAccessToAccess ← getAdr AND GetAdrCmdBA=VictimReal;
PageVirtualToAccess ← (getAdr AND GetAdrCmdBA=RefVirtual) OR CAMVirtualAddressToAccess;
BlockVirtualToAccess ← (getAdr AND (GetAdrCmdBA=RefRealAssemble OR GetAdrCmdBA=RefVirtual)) OR CAMVirtualAddressToAccess;
MatchToAccess ← CAMMatchToAccess OR (getAdr AND GetAdrCmdBA=RefRealMap);
MDataToMatch ← CAMMDataIToMatchReg;
AccessToMatch ← CAMAccessToMatch;
PageAccessToMData ← CAMPageAccessToMDataI;
nPageAccessToMData ← NOT PageAccessToMData;
BlockAccessToMData ← CAMLowBitsAccessToMDataI;
nBlockAccessToMData ← NOT BlockAccessToMData;
AccessToPageBlockAccess ← CAMDriveCAMAccess;
nAccessToPageBlockAccess ← NOT AccessToPageBlockAccess;
ShiftToPageBlockAccess ← ShiftExecute AND WriteEntry;
nShiftToPageBlockAccess ← NOT ShiftToPageBlockAccess;
AccessDrive ← AccessToPageBlockAccess OR ShiftToPageBlockAccess;
nAccessDrive ← NOT AccessDrive;
PageBlockAccessToShift ← ShiftExecute AND ReadEntry;
nPageBlockAccessToShift ← NOT PageBlockAccessToShift;
nCAMAccessPrecharge ← NOT PhBb;
ShiftDataToMCAM ← ShiftDataToCAMCtl;
END;
END;
MCtlCAMCtlPorts: Ports ← NEW [PortsRep[40]];
RegisterCells[];
END.