Another way of looking at instruction execution is to stand at a fixed pipeline stage in the processor and watch instructions flow past. In general, the decision whether an instruction can advance is made in A phases.
0A: The goal of this phase is to generate a set of inputs for the main decoding PLA. The main decoding PLA generates signals to control the 0B and 1A phases. If there was a Reject in the previous phase, or if this phase detects an impending pipeline interlock, or the ALU condition flag is TRUE, then prepare the main PLA to decode unusually. Otherwise set up to decode the next cycle of the next instruction.
0B: The main PLA acts on the instruction.
1A: If there was no Reject in the last phase, and no impending pipeline interlock detected in this phase, load this stage from 0B. Otherwise reload it from 1B.
1B: If AbortPipe3AB, load this stage as a NoOp would. Otherwise, load this stage from 1A.
Transmit A and B register addresses to EU on the K bus.
2A: If an impending pipeline interlock is detected, load this stage as a NoOp would. Otherwise, if Reject was detected in the last phase, load from stage 2B. Otherwise load from 1B.
Transmit the IFU arithmetic data via the X and K bus to the EU, as well as the the ALU operation, CondSel, and LeftOperand2A, RightOperand2A, and Store2A input multiplexer controls.
2B: If AbortPipe3AB, load this stage as a NoOp would. Otherwise, load this stage from 2A.
Perform the ALU operation. Transmit the Result3A and Store3A input multiplexer controls.
3A: If Reject was detected in the last phase, load from stage 3B, with the cache operation set to NoOp. Otherwise load from stage 2B.
Transmit the ALU condition flag back to the IFU. If it is TRUE, or was true one cycle ago, or Reject, recycle carry from 2A; otherwise set carry from last arithmetic operation in 2B as appropriate. Transmit the cache operation to the data cache. EU loads Result3A pipeline stage either from Result2B or Result3B, depending on Result3A input multiplex control. Load Store3A pipeline stage either from Store2B or Result3B, depending on Store3A input multiplex control. Compute AbortPipe3AB as (IF Reject THEN PFault#None ELSE condition flag), as of the end of the previous phase.
3B: If AbortPipe3AB, load this stage as a NoOp would. Otherwise, load this stage from 3A.
Transmit the Result3B input multiplexer control and the C register address to the EU on the K bus. Load the Result3B stage either from Result3A or from the data cache's PData bus, depending on Result3B input multiplex control.
4A: If there was no Reject in the last phase, load this stage from 3B. Otherwise load it as a NoOp would.
Load the C register from Result3B. Transmit Result3 to the K bus if the C address is among the registers in the IFU. If there is a push or pop for the IFU stack, do it.