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:      BOOLFALSE,
dPReject:     BOOLFALSE,
dPFaulted:    BOOLFALSE,
protMicroCycle:   BOOLFALSE,
microExcptJmpBubble: BOOLFALSE,   -- feedback
stage2BAbort:   BOOLFALSE,   -- feedback
stage1BHold:    BOOLFALSE,
condEffect1:    CondEffect ← VAL[0], -- for detecting bubble in 1B
condEffect2:    CondEffect ← VAL[0],
eUCondition2:   BOOLFALSE,
trapsEnbled2:   BOOLFALSE,
eStkOverflow2:   BOOLFALSE,
instStarting2:    BOOLFALSE,
rschWaiting2:   BOOLFALSE,
push2:     BOOLFALSE,
instFault2:    BOOLFALSE,
iStkNearlyFull:   BOOLFALSE,
x2ASrcLit1:    BOOLFALSE];
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.
END.