CacheMInterfaceMROM.rose
Last edited by: Barth, July 27, 1984 11:45:05 am PDT
Last edited by: Curry, January 29, 1985 9:30:00 pm PST
Imports BitOps, CacheMicroMachine;
Open BitOps, CacheMicroMachine;
CELLTYPE "MROM"
PORTS[
Timing and housekeeping interface
Vdd, Gnd<BOOL,
Buffered timing and housekeeping interface
PhAb, PhBb<BOOL,
Resetb<BOOL,
Cell control
FinishSharedStoreAB>BOOL,
SenseRMatchB, SelPageFlagsBA>BOOL,
P control <=> M control
StartWordMachineBA>BOOL,
CAM driver ROM interface
CAMRegSenseMDataIB, ACAMRegDriveCAMBitsA, BCAMRegDriveCAMBitsAB, FormAddressBA, PageDriveMDataIA, BlockDriveMDataIA>BOOL,
RAM ROM interface
DriveMBitsA, DriveMBitsNoMatchA, SenseMBitsA, DriveMDataIA, SenseMDataIB, DrivePBitsB, SensePBitsB>BOOL,
Sequencer ROM interface
SuppressPSampleAB, MIsDoneAB, SetWantWSA, CheckFaultsAB, SenseSharedB, ReleaseMBusBA, ForceIdleAB, DoneAB, ForceSlaveBA, SenseReadyBA, MDataIToFaultsB, MapBitsToMDataIA, ACheckParityA, BCheckParityB, SampleRealMatchA, MCmdDriveA, MDataDriveA, DriveSharedHighA, DriveSharedLowA, MasterEnableMBusDriveAB, MCmdDriveToDataTransportAB, MCmdDriveToNoOpAB>BOOL,
Entry Control ROM interface
SetSharedA, ResetMasterA, SetRPDirtyVPValidA, FlagLatchB, SetFlagsA, IncrementVictimBA, IncrementMAdrCtrB, ZeroMAdrCtrB, SampleDirtyBitsB, DeleteDirtyBitB, VictimSelectBA, RefreshToDecoderBA, IfGrantThenGetAdrElseRefreshToDecoderBA, FetchAddressBA, DirtyBitsToMQSelBA, SamplePAdr2831B, SampleMAdr2831B, Adr2829ToMQSelBA, AddressBitsToMDataIA, VictimAddressBitsToMDataIA, SelectRPBA, SelectVPVictimOrOrphanBA, SelectRealDataBA, SelVictimOrOrphanBA, RefreshIfRefVirtualBA, SenseVictimBA>BOOL,
Control steel wool
MDataDriveDelayedA>BOOL,
ROMSequenceBA<INT[7],
ROMSlaveBA<BOOL,
ROMCycleBA<INT[7]
]
State
dSenseRMatchAB, dCAMRegSenseMDataIAB, dSenseMDataIAB, dDrivePBitsAB, dSensePBitsAB, dFlagLatchAB, dIncrementMAdrCtrAB, dZeroMAdrCtrAB, dSampleDirtyBitsAB, dDeleteDirtyBitAB, dSamplePAdr2831AB, dSampleMAdr2831AB, dSenseSharedAB, dMDataIToFaultsAB, dBCheckParityAB: BOOL,
dSelPageFlagsAB, dFormAddressAB, dIncrementVictimAB, dVictimSelectAB, dRefreshToDecoderAB, dIfGrantThenGetAdrElseRefreshToDecoderAB, dFetchAddressAB, dDirtyBitsToMQSelAB, dAdr2829ToMQSelAB, dSelectRPAB, dSelectVPVictimOrOrphanAB, dSelectRealDataAB, dSelVictimOrOrphanAB, dSenseVictimAB, dRefreshIfRefVirtualAB, dReleaseMBusAB, dForceSlaveAB, dSenseReadyAB, dStartWordMachineAB: BOOL,
dACAMRegDriveCAMBitsAB, dDriveMBitsAB, dDriveMBitsNoMatchAB, dSetSharedAB, dResetMasterAB, dSetRPDirtyVPValidAB, dSetFlagsAB, dACheckParityAB, dMDataDriveDelayedAB: BOOL,
dACAMRegDriveCAMBitsBA, dDriveMBitsBA, dDriveMBitsNoMatchBA, dSetSharedBA, dResetMasterBA, dSetRPDirtyVPValidBA, dSetFlagsBA, dACheckParityBA, dMDataDriveDelayedBA: BOOL
EvalSimple
seq: SequenceNumber ← 1;
cyc: CycleNumber ← 1;
FOR i:SequenceNumber IN SequenceNumber DO
IF EBFW[ROMSequenceBA, 7, i] THEN {seq ← i; EXIT};
ENDLOOP;
FOR i:CycleNumber IN CycleNumber DO
IF EBFW[ROMCycleBA, 7, i] THEN {cyc ← i; EXIT};
ENDLOOP;
CacheMicroMachine.SetState[slave: ROMSlaveBA, sequence: seq, cycle: cyc];
A
xA ← PhAb AND Decode[$x];
IF PhAb THEN {
PageDriveMDataIA ← Decode[$PageDriveMDataI];
BlockDriveMDataIA ← Decode[$BlockDriveMDataI];
SenseMBitsA ← Decode[$SenseMBits];
DriveMDataIA ← Decode[$DriveMDataI];
AddressBitsToMDataIA ← Decode[$AddressBitsToMDataI];
VictimAddressBitsToMDataIA ← Decode[$VictimAddressBitsToMDataI];
SetWantWSA ← Decode[$SetWantWS];
MapBitsToMDataIA ← Decode[$MapBitsToMDataI];
SampleRealMatchA ← Decode[$SampleRealMatch];
MCmdDriveA ← Decode[$MCmdDrive];
MDataDriveA ← Decode[$MDataDrive];
DriveSharedHighA ← Decode[$DriveSharedHigh];
DriveSharedLowA ← Decode[$DriveSharedLow];
}
ELSE PageDriveMDataIA ← BlockDriveMDataIA ← SenseMBitsA ← DriveMDataIA ← AddressBitsToMDataIA ← VictimAddressBitsToMDataIA ← SetWantWSA ← MapBitsToMDataIA ← SampleRealMatchA ← MCmdDriveA ← MDataDriveA ← DriveSharedHighA ← DriveSharedLowA ← FALSE;
B
IF PhAb THEN dxAB ← Decode[$x];
xB ← PhBb AND dxAB;
IF PhAb THEN {
dSenseRMatchAB ← Decode[$SenseRMatch];
dCAMRegSenseMDataIAB ← Decode[$CAMRegSenseMDataI];
dSenseMDataIAB ← Decode[$SenseMDataI];
dDrivePBitsAB ← Decode[$DrivePBits];
dSensePBitsAB ← Decode[$SensePBits];
dFlagLatchAB ← Decode[$FlagLatch];
dIncrementMAdrCtrAB ← Decode[$IncrementMAdrCtr];
dZeroMAdrCtrAB ← Decode[$ZeroMAdrCtr];
dSampleDirtyBitsAB ← Decode[$SampleDirtyBits];
dDeleteDirtyBitAB ← Decode[$DeleteDirtyBit];
dSamplePAdr2831AB ← Decode[$SamplePAdr2831];
dSampleMAdr2831AB ← Decode[$SampleMAdr2831];
dSenseSharedAB ← Decode[$SenseShared];
dMDataIToFaultsAB ← Decode[$MDataIToFaults];
dBCheckParityAB ← Decode[$BCheckParity];
};
IF PhBb THEN {
SenseRMatchB ← dSenseRMatchAB;
CAMRegSenseMDataIB ← dCAMRegSenseMDataIAB;
SenseMDataIB ← dSenseMDataIAB;
DrivePBitsB ← dDrivePBitsAB;
SensePBitsB ← dSensePBitsAB;
FlagLatchB ← dFlagLatchAB;
IncrementMAdrCtrB ← dIncrementMAdrCtrAB;
ZeroMAdrCtrB ← dZeroMAdrCtrAB;
SampleDirtyBitsB ← dSampleDirtyBitsAB;
DeleteDirtyBitB ← dDeleteDirtyBitAB;
SamplePAdr2831B ← dSamplePAdr2831AB;
SampleMAdr2831B ← dSampleMAdr2831AB;
SenseSharedB ← dSenseSharedAB;
MDataIToFaultsB ← dMDataIToFaultsAB;
BCheckParityB ← dBCheckParityAB;
}
ELSE SenseRMatchB ← CAMRegSenseMDataIB ← SenseMDataIB ← DrivePBitsB ← SensePBitsB ← FlagLatchB ← IncrementMAdrCtrB ← ZeroMAdrCtrB ← SampleDirtyBitsB ← DeleteDirtyBitB ← SamplePAdr2831B ← SampleMAdr2831B ← SenseSharedB ← MDataIToFaultsB ← BCheckParityB ← FALSE;
AB
IF PhAb THEN xAB ← Decode[$x];
IF PhAb THEN {
FinishSharedStoreAB ← Decode[$FinishSharedStore];
BCAMRegDriveCAMBitsAB ← Decode[$BCAMRegDriveCAMBits];
SuppressPSampleAB ← Decode[$SuppressPSample];
DoneAB ← Decode[$Done];
MasterEnableMBusDriveAB ← Decode[$MasterEnableMBusDrive];
MCmdDriveToDataTransportAB ← Decode[$MCmdDriveToDataTransport];
MCmdDriveToNoOpAB ← Decode[$MCmdDriveToNoOp];
ForceIdleAB ← Decode[$ForceIdle];
};
BA
IF PhAb THEN dxAB ← Decode[$x];
IF PhBb THEN xBA ← dxAB;
IF PhAb THEN {
dSelPageFlagsAB ← Decode[$SelPageFlags];
dFormAddressAB ← Decode[$FormAddress];
dIncrementVictimAB ← Decode[$IncrementVictim];
dVictimSelectAB ← Decode[$VictimSelect];
dRefreshToDecoderAB ← Decode[$RefreshToDecoder];
dIfGrantThenGetAdrElseRefreshToDecoderAB ← Decode[$IfGrantThenGetAdrElseRefreshToDecoder];
dFetchAddressAB ← Decode[$FetchAddress];
dDirtyBitsToMQSelAB ← Decode[$DirtyBitsToMQSel];
dAdr2829ToMQSelAB ← Decode[$Adr2829ToMQSel];
dSelectRPAB ← Decode[$SelectRP];
dSelectVPVictimOrOrphanAB ← Decode[$SelectVPVictimOrOrphan];
dSelectRealDataAB ← Decode[$SelectRealData];
dSelVictimOrOrphanAB ← Decode[$SelVictimOrOrphan];
dSenseVictimAB ← Decode[$SenseVictim];
dRefreshIfRefVirtualAB ← Decode[$RefreshIfRefVirtual];
MIsDoneAB ← Decode[$MIsDone];
CheckFaultsAB ← Decode[$CheckFaults];
dReleaseMBusAB ← Decode[$ReleaseMBus];
dForceSlaveAB ← Decode[$ForceSlave];
dSenseReadyAB ← Decode[$SenseReady];
dStartWordMachineAB ← Decode[$StartWordMachine];
};
IF PhBb THEN {
SelPageFlagsBA ← dSelPageFlagsAB;
FormAddressBA ← dFormAddressAB;
IncrementVictimBA ← dIncrementVictimAB;
VictimSelectBA ← dVictimSelectAB;
RefreshToDecoderBA ← dRefreshToDecoderAB;
IfGrantThenGetAdrElseRefreshToDecoderBA ← dIfGrantThenGetAdrElseRefreshToDecoderAB;
FetchAddressBA ← dFetchAddressAB;
DirtyBitsToMQSelBA ← dDirtyBitsToMQSelAB;
Adr2829ToMQSelBA ← dAdr2829ToMQSelAB;
SelectRPBA ← dSelectRPAB;
SelectVPVictimOrOrphanBA ← dSelectVPVictimOrOrphanAB;
SelectRealDataBA ← dSelectRealDataAB;
SelVictimOrOrphanBA ← dSelVictimOrOrphanAB;
SenseVictimBA ← dSenseVictimAB;
RefreshIfRefVirtualBA ← dRefreshIfRefVirtualAB;
ReleaseMBusBA ← dReleaseMBusAB;
ForceSlaveBA ← dForceSlaveAB;
SenseReadyBA ← dSenseReadyAB;
StartWordMachineBA ← dStartWordMachineAB;
};
DA
IF PhAb THEN dxAB ← Decode[$x];
IF PhBb THEN dxBA ← dxAB;
xA ← PhAb AND dxBA;
IF PhAb THEN {
dACAMRegDriveCAMBitsAB ← Decode[$ACAMRegDriveCAMBits];
dDriveMBitsAB ← Decode[$DriveMBits];
dDriveMBitsNoMatchAB ← Decode[$DriveMBitsNoMatch];
dSetSharedAB ← Decode[$SetShared];
dResetMasterAB ← Decode[$ResetMaster];
dSetRPDirtyVPValidAB ← Decode[$SetRPDirtyVPValid];
dSetFlagsAB ← Decode[$SetFlags];
dACheckParityAB ← Decode[$ACheckParity];
dMDataDriveDelayedAB ← Decode[$MDataDriveDelayed];
};
IF PhBb THEN {
dACAMRegDriveCAMBitsBA ← dACAMRegDriveCAMBitsAB;
dDriveMBitsBA ← dDriveMBitsAB;
dDriveMBitsNoMatchBA ← dDriveMBitsNoMatchAB;
dSetSharedBA ← dSetSharedAB;
dResetMasterBA ← dResetMasterAB;
dSetRPDirtyVPValidBA ← dSetRPDirtyVPValidAB;
dSetFlagsBA ← dSetFlagsAB;
dACheckParityBA ← dACheckParityAB;
dMDataDriveDelayedBA ← dMDataDriveDelayedAB;
};
IF PhAb THEN {
ACAMRegDriveCAMBitsA ← dACAMRegDriveCAMBitsBA;
DriveMBitsA ← dDriveMBitsBA;
DriveMBitsNoMatchA ← dDriveMBitsNoMatchBA;
SetSharedA ← dSetSharedBA;
ResetMasterA ← dResetMasterBA;
SetRPDirtyVPValidA ← dSetRPDirtyVPValidBA;
SetFlagsA ← dSetFlagsBA;
ACheckParityA ← dACheckParityBA;
MDataDriveDelayedA ← dMDataDriveDelayedBA;
}
ELSE ACAMRegDriveCAMBitsA ← DriveMBitsA ← DriveMBitsNoMatchA ← SetSharedA ← ResetMasterA ← SetRPDirtyVPValidA ← SetFlagsA ← ACheckParityA ← MDataDriveDelayedA ← FALSE;
ENDCELLTYPE