CacheMInterfaceMPads.rose
Last edited by: Barth, July 2, 1984 10:16:52 am PDT
Last edited by: Curry, January 29, 1985 9:30:00 pm PST
Directory BitOps, Dragon;
Open BitOps;
CELLTYPE "MPads"
PORTS[
Timing and housekeeping interface
PhA, PhB<BOOL,
Vdd, Gnd<BOOL,
PadVdd, PadGnd<BOOL,
Main memory interface
MCmdAB=EnumType["Dragon.MBusCommands"],
MDataAB=INT[32],
MParityAB=BOOL,
MNShared=BOOL,
MNError>BOOL,
MRq>BOOL,
MNewRq>BOOL,
MGnt<BOOL,
Serial debugging interface
All the following signals change during PhA and propagate during the remainder of PhA and PhB, giving an entire clock cycle for them to propagate throughout the machine. Each user must receive them into a latch open during PhB. The effects of changes are intended to happen throughout the following PhA, PhB pair.
ResetAB<BOOL,
DHoldAB<BOOL, -- must be high before testing
DShiftAB<BOOL, -- shift the shift register by 1 bit if ~DNSelect
DExecuteAB<BOOL, -- interpret the content of the shift register if ~DNSelect
DNSelectAB<BOOL, -- if high, hold but don't Execute or Shift
DDataInAB<BOOL, -- sampled during each PhB that DShift is asserted
DDataOutAB=BOOL, -- changes during each PhA following a PhB that DShift is asserted, continues to be driven through the PhB following the PhA it changes
Buffered timing and housekeeping interface
PhAb, nPhAb, PhBb, nPhBb>BOOL,
Resetb>BOOL,
Internal main memory interface
MCmdIn>EnumType["Dragon.MBusCommands"],
MCmdOutAB<EnumType["Dragon.MBusCommands"],
MCmdDriveC<BOOL,
MDataI=INT[32],
MParityI=BOOL,
MDataDriveC<BOOL,
MSharedSense>BOOL,
MNSharedDriveHighC<BOOL,
MNSharedDriveLowC<BOOL,
MNErrorDriveLow<BOOL,
MRqIBA<BOOL,
MNewRqIBA<BOOL,
MNewRqEnableC<BOOL,
MGntSenseA>BOOL
]
State
MPadRegAB: BitDWord,
MPadRegParityAB: BOOL
EvalSimple
PhAb ← PhA;
nPhAb ← NOT PhA;
PhBb ← PhB;
nPhBb ← NOT PhB;
Resetb ← ResetAB;
IF MCmdDriveC THEN MCmdAB ← MCmdOutAB;
MCmdIn ← MCmdAB;
IF PhAb THEN {
MPadRegAB ← MDataI;
MPadRegParityAB ← MParityI;
};
IF PhBb THEN {
MDataI ← MDataAB;
MParityI ← MParityAB;
};
IF MDataDriveC THEN {
MDataAB ← MPadRegAB;
MParityAB ← MPadRegParityAB;
};
MSharedSense ← NOT MNShared;
IF MNSharedDriveHighC THEN MNShared ← TRUE;
IF MNSharedDriveLowC THEN MNShared ← FALSE;
IF MNErrorDriveLow THEN MNError ← FALSE;
MRq ← MRqIBA;
IF MNewRqEnableC THEN MNewRq ← MNewRqIBA;
MGntSenseA ← MGnt;
ENDCELLTYPE