IFUPLAMainPipeControl.mesa
Copyright c 1984 by Xerox Corporation. All rights reserved.
Last edited by McCreight, June 6, 1986 5:43:43 pm PDT
Last edited by Curry, July 9, 1986 2:43:38 pm PDT
IFUPLAMainPipeControl:
CEDAR
DEFINITIONS =
BEGIN
PhB latched inputs
MainPipeControlIn:
TYPE =
RECORD [
-- default must be zero
reset: BOOL ← FALSE,
dPReject: BOOL ← FALSE,
dPFaulted: BOOL ← FALSE,
protMicroCycle: BOOL ← FALSE,
microExcptJmpBubble: BOOL ← FALSE, -- feedback
stage2BAbort: BOOL ← FALSE, -- feedback
stage1BHold: BOOL ← FALSE,
condEffect1: CondEffect ← VAL[0], -- for detecting bubble in 1B
condEffect2: CondEffect ← VAL[0],
eUCondition2: BOOL ← FALSE,
trapsEnbled2: BOOL ← FALSE,
eStkOverflow2: BOOL ← FALSE,
instStarting2: BOOL ← FALSE,
rschWaiting2: BOOL ← FALSE,
push2: BOOL ← FALSE,
instFault2: BOOL ← FALSE,
iStkNearlyFull: BOOL ← FALSE,
x2ASrcLit1: BOOL ← FALSE];
MainPipeControlOut:
TYPE =
RECORD [
PhB latched outputs
stage2A: NormalBubble ← normal,
stage3A: NormalAbort ← normal,
loadStage1: BOOL ← FALSE,
loadStage2: BOOL ← FALSE,
loadStage3: BOOL ← FALSE,
x2ASrcLit2: BOOL ← FALSE,
PhA latched outputs
stage1BHolding: BOOL ← FALSE,
notBcLoadStage1: BOOL ← FALSE, -- really just stage1BHolding again
stage2B: NormalAbort ← normal, -- feedback stage2BAbort
stage3BCPipe: NormalAbort ← normal,
microExcptJmp: MicroExcptJmp ← none, -- feedback microExcptJmpBubble
except: Exception ← [specialCode, none] ];
NormalBubble: TYPE = MACHINE DEPENDENT {normal(0), bubble(1)};
NormalAbort: TYPE = MACHINE DEPENDENT {normal(0), abort(1)};
CondEffect: TYPE = MACHINE DEPENDENT {macroTrap(0), macroJump, microJump, bubble(3)};
MicroExcptJmp:
TYPE =
MACHINE
DEPENDENT {
none(0), -- microcycle as proposed by instrDecode
microJump(3), -- microcycle = 64
bubble(5), -- microcycle = 112
resetting(9), -- microcycle = 116
trap(17), -- microcycle = 120
cJump(33)}; -- microcycle = 124
Exception:
TYPE =
RECORD
[type: ExceptType, code: ExceptCode ← none]; -- for Trap PC generator
ExceptType: TYPE = MACHINE DEPENDENT {specialCode(0), condCode(3), dpFault(5)};
ExceptCode:
TYPE =
MACHINE
DEPENDENT {
none (0),
ipFault (1),
bubble (2),
cJump (3),
reseting (6),
reset (7),
iStkOFlow (8),
eStkOFlow (9),
rschlWait (0AH),
trapCycle1 (0BH)};
A decoded enumerated type can be used to directly generate multiplex controls.
The type can be coded as {0, 1} or {0, 1, 2, 4, 8 ...} or {0, 3, 5, 9, 17 ...}.
The first and last cases have the advantage that zero can be used a default multiplex control (lsb = 0 => no other bit is true).
In all cases it's possible to name the bits and/or their inverses using the enumerated type element names.