Pipelined MIPS Processor: Dmitri Strukov ECE 154A
Pipelined MIPS Processor: Dmitri Strukov ECE 154A
Dmitri Strukov
ECE 154A
Pipelining Analogy
• Pipelined laundry: overlapping execution
– Parallelism improves performance
Four loads:
Speedup
= 8/3.5 = 2.3
Non-stop:
Speedup
= 2n/0.5n + 1.5 ≈ 4
= number of stages
Single-Cycle vs. Multicycle vs. Pipelined
Clock
Time
needed
Time
allotted Instr 1 Instr 2 Instr 3 Instr 4
Clock
Time Time
needed saved
3 cycles 5 cycles 3 cycles 4 cycles
Time
allotted Instr 1 Instr 2 Instr 3 Instr 4
1 2 3 4 5 6 7 8 9 10 11 1 2 3 4 5 6 7 8 9 10 11
1 f r a d w Cycle 1 f f f f f f f Cycle
2 f r a d w 2 r r r r r r r Drainage
region
3 f r a d w 3 a a a a a a a
4 f r a d w 4 Start-up d d d d d d d
f = Fetch
r = Reg read region
5 f r a d w 5 w w w w w w w
a = ALU op
6 d = Data access f r a d w
w = Writeback Pipeline
7 f r a d w stage
Instruction
(a) Task-time diagram (b) Space-time diagram
MIPS Pipeline
Five stages, one step per stage
Cycle 1 Cycle 2 Cycle 3 Cycle 4 Cycle 5
1. IF: Instruction fetch from memory
2. ID: Instruction decode & register read
3. EX: Execute operation or calculate address lw IFetch Dec Exec Mem WB
4. MEM: Access memory operand
5. WB: Write result back to register
Pipeline Performance Example
• Assume time for stages is
– 100ps for register read or write
– 200ps for other stages
• Compare pipelined datapath with single-cycle
datapath
ALU
IM Reg DM Reg
ALU
I Inst 0 IM Reg DM Reg is full, one
n instruction is
s completed every
ALU
t Inst 1 IM Reg DM Reg
cycle, so CPI = 1
r.
ALU
O Inst 2 IM Reg DM Reg
r
d
ALU
e Inst 3 IM Reg DM Reg
r
ALU
Inst 4 IM Reg DM Reg
7 f r a d w stage
Time
3 cycles 5 cycles 3 cycles 4 cycles
saved
cycle
Instruction allotted Instr 1 Instr 2 Instr 3 Instr 4
(a) Task-time diagram (b) Space-time diagram
What are the other issues affecting CCT and CPI for MC and MCP?
Visualizing pipeline - I
Cycle 1
ALU
I Inst 1 IM Reg DM Reg
n
s
t Inst 2
r.
O
r Inst 3
d
e
r
Inst 4
ALU
I Inst 1 IM Reg DM Reg
n
s
t Inst 2
r.
O
r Inst 3
d
e
r
Inst 4
ALU
I Inst 1 IM Reg DM Reg
n
s
t Inst 2
r.
O
r Inst 3
d
e
r
Inst 4
ALU
I Inst 1 IM Reg DM Reg
n
s
t Inst 2
r.
O
r Inst 3
d
e
r
Inst 4
ALU
I Inst 1 IM Reg DM Reg
n
s
t Inst 2
r.
O
r Inst 3
d
e
r
Inst 4
ALU
I Inst 1 IM Reg DM Reg
n
s
ALU
t Inst 2 IM Reg DM Reg
r.
ALU
O IM Reg DM Reg
r Inst 3
d
e
ALU
r IM Reg DM Reg
Inst 4
ALU
IM Reg DM
Inst 5
Visualizing pipeline - II
Time (in cycles)
1 2 3 4 5 6 7 8
ALU
I Inst 1 IM Reg DM Reg
n
s
ALU
t Inst 2 IM Reg DM Reg
r.
ALU
O IM Reg DM Reg
r Inst 3
d
e
ALU
r IM Reg DM Reg
Inst 4
ALU
IM Reg DM
Inst 5
Visualizing pipeline - II
Time (in cycles)
1 2 3 4 5 6 7 8
ALU
I Inst 1 IM Reg DM Reg
n
s
ALU
t Inst 2 IM Reg DM Reg
r.
ALU
O IM Reg DM Reg
r Inst 3
d
e
ALU
r IM Reg DM Reg
Inst 4
ALU
IM Reg DM
Inst 5
Visualizing pipeline - II
Time (in cycles)
1 2 3 4 5 6 7 8
ALU
I Inst 1 IM Reg DM Reg
n
s
ALU
t Inst 2 IM Reg DM Reg
r.
ALU
O IM Reg DM Reg
r Inst 3
d
e
ALU
r IM Reg DM Reg
Inst 4
ALU
IM Reg DM
Inst 5
Visualizing pipeline - II
Time (in cycles)
1 2 3 4 5 6 7 8
ALU
I Inst 1 IM Reg DM Reg
n
s
ALU
t Inst 2 IM Reg DM Reg
r.
ALU
O IM Reg DM Reg
r Inst 3
d
e
ALU
r IM Reg DM Reg
Inst 4
ALU
IM Reg DM
Inst 5
Hazards
• Situations that prevent starting the next
instruction in the next cycle
• Structure hazards
– A required resource is busy
• Data hazard
– Need to wait for previous instruction to complete
its data read/write
• Control hazard
– Deciding on control action depends on previous
instruction
Structure Hazards
ALU
I Mem Reg Mem Reg
memory
n
s
ALU
t Inst 1 Mem Reg Mem Reg
r.
ALU
O Inst 2 Mem Reg Mem Reg
r
d
ALU
e Inst 3 Mem Reg Mem Reg
r
ALU
Inst 4 Mem Reg Mem Reg
Reading instruction
from memory
Fix with separate instr and data memories (I$ and D$)
Note that all instructions will take effectively 5
cycles even if some stages are not used for or
instruction finishes early
ALU
Inst 0 IM Reg DM Reg
I
n
ALU
s
Inst 1 IM Reg DM Reg
t
r.
ALU
Inst 2 IM Reg DM Reg
O
r
ALU
d
Inst 3 IM Reg DM Reg
e
r
ALU
Inst 4 IM Reg DM Reg
Data Hazards
• An instruction depends on completion of data
access by a previous instruction
– add $s0, $t0, $t1
sub $t2, $s0, $t3
Data Dependencies
instruction j is said data dependent on instruction i if either of the following holds
Typically only type 1 data dependency is sufficient to satisfy for the correct execution of the program since type 2
dependency just implies that one instruction is dependent on another if there exist a chain of dependencies of the
first type between the two instructions. A dependency between two instructions will only result in a data hazard if the
instructions are close enough together for the considered simple datapath in class. In general, it may also become a
hazard for advanced pipelined designs when the processor executes multiple and/or out-of-order instructions
Note that RAW is what is called “true data dependency” because there is a flow of data between the instructions.
WAW and WAR are called “name dependency”, since two instructions use the same register of memory location (but
there is no flow of data between the instructions).
Register Usage Can Cause Data Hazards
• Dependencies backward in time cause hazards
ALU
add $1, IM Reg DM Reg
ALU
sub $4,$1,$5 IM Reg DM Reg
ALU
and $6,$1,$7 IM Reg DM Reg
ALU
or $8,$1,$9 IM Reg DM Reg
ALU
IM DM Reg
xor $4,$1,$5 Reg
ALU
I lw $1,4($2) IM Reg DM Reg
n
s
ALU
t sub $4,$1,$5 IM Reg DM Reg
r.
ALU
O and $6,$1,$7 IM Reg DM Reg
r
d
ALU
e or $8,$1,$9 IM Reg DM Reg
r
ALU
IM DM Reg
xor $4,$1,$5 Reg
ALU
I IM Reg DM Reg hazard by doing
n reads in the second
s half of the cycle and
ALU
t Inst 1 IM Reg DM Reg
writes in the first half
r.
ALU
O Inst 2 IM Reg DM Reg
r
d
ALU
e add $2,$1, IM Reg DM Reg
r
ALU
I IM Reg DM Reg
waiting – stall –
n
but impacts CPI
s
t stall
r.
O stall
r
d
sub $4,$1,$5
ALU
e IM Reg DM Reg
r
ALU
and $6,$1,$7 IM Reg DM Reg
ALU
I add $1, IM Reg DM Reg
as soon as they are
n available to where
s they are needed
ALU
IM Reg DM Reg
t sub $4,$1,$5
r.
ALU
IM Reg DM Reg
r and $6,$1,$7
d
e
ALU
r IM Reg DM Reg
or $8,$1,$9
ALU
IM Reg DM Reg
xor $4,$1,$5
add $1,
ALU
I IM Reg DM Reg
n
s
ALU
t sub $4,$1,$5 IM Reg DM Reg
r.
ALU
IM Reg DM Reg
r and $6,$7,$1
d
e
r
I
add $1,$1,$2
ALU
IM Reg DM Reg
n
s
t
r. add $1,$1,$3
ALU
IM Reg DM Reg
O
r
add $1,$1,$4
ALU
d IM Reg DM Reg
e
r
Load-Use Data Hazard
• Can’t always avoid stalls by forwarding
– If value not computed when needed
– Can’t forward backward in time!
Code Scheduling to Avoid Stalls
• Reorder code to avoid use of load result in the
next instruction
• C code for A = B + E; C = B + F;
Add
Branch MEM/WB
RegWrite Shift Add
4
left 2
Read Addr 1
Instruction Read Data
Register
Memory Memory
Read Addr 2 Data 1 MemtoReg
Read ALUSrc
File
PC
Read
Address Write Addr ALU Address
Read Data
Data 2 Write Data
Write Data
ALU
cntrl
MemRead
Sign
16 Extend 32 ALUOp
RegDst
Pipeline Control
• IF Stage: read Instr Memory (always asserted)
and write PC (on System Clock)
• ID Stage: no optional control signals to set
ID/EX
EX/MEM
Control
IF/ID
Add
Branch MEM/WB
Shift Add
4
left 2
Read Addr 1
Instruction Read Data
Register
Memory Data 1 Memory
Read Addr 2
Read File
PC
Read
Address ALU Address
Write Addr Data
Read
Data 2 Write Data
Write Data
ALU
16 Sign 32 cntrl
Extend
EX/MEM.RegisterRd
ID/EX.RegisterRt
Forward MEM/WB.RegisterRd
ID/EX.RegisterRs Unit
Data Forwarding Control Conditions
1. EX Forward Unit:
if (EX/MEM.RegWrite
and (EX/MEM.RegisterRd != 0) Forwards the
and (EX/MEM.RegisterRd = ID/EX.RegisterRs)) result from the
ForwardA = 10 previous instr. to
if (EX/MEM.RegWrite either input of
and (EX/MEM.RegisterRd != 0) the ALU
and (EX/MEM.RegisterRd = ID/EX.RegisterRt))
ForwardB = 10
2. MEM Forward Unit:
if (MEM/WB.RegWrite
and (MEM/WB.RegisterRd != 0)
and (EX/MEM.RegisterRd != ID/EX.RegisterRs) Forwards the
and (MEM/WB.RegisterRd = ID/EX.RegisterRs)) result from the
ForwardA = 01 previous or
second previous
if (MEM/WB.RegWrite
instr. to either
and (MEM/WB.RegisterRd != 0)
and (EX/MEM.RegisterRd != ID/EX.RegisterRt) input of the ALU
and (MEM/WB.RegisterRd = ID/EX.RegisterRt))
ForwardB = 01
Load-use Hazard Detection Unit
• Need a Hazard detection Unit in the ID stage that
inserts a stall between the load and its use
1. ID Hazard detection Unit:
if (ID/EX.MemRead
and ((ID/EX.RegisterRt = IF/ID.RegisterRs)
or (ID/EX.RegisterRt = IF/ID.RegisterRt)))
stall the pipeline
The first line tests to see if the instruction now in the EX stage
is a lw; the next two lines check to see if the destination
register of the lw matches either source register of the
instruction in the ID stage (the load-use instruction)
After this one cycle stall, the forwarding logic can handle the
remaining data hazards
Hazard/Stall Hardware
• Along with the Hazard Unit, we have to implement the stall
• Prevent the instructions in the IF and ID stages from
progressing down the pipeline – done by preventing the PC
register and the IF/ID pipeline register from changing
– Hazard detection Unit controls the writing of the PC
(PC.write) and IF/ID (IF/ID.write) registers
• Insert a “bubble” between the lw instruction (in the EX
stage) and the load-use instruction (in the ID stage) (i.e.,
insert a nop in the execution stream)
– Set the control bits in the EX, MEM, and WB control fields of the
ID/EX pipeline register to 0 (nop). The Hazard Unit controls the
mux that chooses between the real control values and the 0’s.
• Let the lw instruction and the instructions after it in the
pipeline (before it in the code) proceed normally down the
pipeline
Adding the Hazard/Stall Hardware
PCSrc
ID/EX.MemRead
Hazard ID/EX
Unit EX/MEM
0
IF/ID 1
Control 0
Add
Branch MEM/WB
Shift Add
4
left 2
Read Addr 1
Instruction Read Data
Register
Memory Data 1 Memory
Read Addr 2
Read File
PC
Read
Address ALU Address
Write Addr Data
Read
Data 2 Write Data
Write Data
ALU
16 Sign 32 cntrl
Extend
Forward
Unit
ID/EX.RegisterRt
Visualizing Load-Use Stall
Time (in cycles)
1 2 3 4 5 6 7 8
ALU
I lw $1 IM Reg DM Reg
n
s
ALU
t add $2, $1 IM Reg DM Reg
r.
ALU
O IM Reg DM Reg
r Inst 2
d
e
ALU
r IM Reg DM Reg
Inst 3
ALU
IM Reg DM
Inst 4
Visualizing Load-Use Stall
Time (in cycles)
1 2 3 4 5 6 7 8
ALU
I lw $1 IM Reg DM Reg
n
s
ALU
t add $2, $1 IM Reg DM Reg
r.
ALU
O IM Reg DM Reg
r Inst 2
d
e
ALU
r IM Reg DM Reg
Inst 3
ALU
IM Reg DM
Inst 4
Visualizing Load-Use Stall
Time (in cycles)
1 2 3 4 5 6 7 8
ALU
I lw $1 IM Reg DM Reg
n
s
ALU
t add $2, $1 IM Reg DM Reg
r.
ALU
O IM Reg DM Reg
r Inst 2
d
e
ALU
Can detect stall load IM Reg DM Reg
r
Inst 3 condition in this cycle
by looking in pipeline
registers
ALU
IM Reg DM
Inst 4
Visualizing Load-Use Stall
Time (in cycles)
1 2 3 4 5 6 7 8
ALU
I lw $1 IM Reg DM Reg
n
s
ALU
t IM Reg DM Reg
nop
r.
ALU
O IM Reg DM Reg
r add $2, $1
d
e
ALU
r IM Reg DM Reg
Inst 2
ALU
Inst 3 IM Reg DM
Visualizing Load-Use Stall
Time (in cycles)
1 2 3 4 5 6 7 8
ALU
I lw $1 IM Reg DM Reg
n
s
ALU
t IM Reg DM Reg
nop
r.
ALU
O IM Reg DM Reg
r add $2, $1
d
e
ALU
r IM Reg DM Reg
Inst 2
ALU
Inst 3 IM Reg DM
Control Hazards
• When the flow of instruction addresses is not
sequential (i.e., PC = PC + 4); incurred by change of flow
instructions
– Unconditional branches (j, jal, jr)
– Conditional branches (beq, bne)
– Exceptions
• Possible approaches
– Stall (impacts CPI)
– Move decision point as early in the pipeline as possible,
thereby reducing the number of stall cycles
– Delay decision (requires compiler support)
– Predict and hope for the best !
• Control hazards occur less frequently than data hazards,
but there is nothing as effective against control hazards
as forwarding is for data hazards
Datapath Branch and Jump Hardware Jump
PCSrc
Shift ID/EX
EX/MEM
left 2
IF/ID Control
Add
Branch MEM/WB
PC+4[31-28] Add
4 Shift
left 2
Read Addr 1
Instruction Read Data
Register
Memory Data 1 Memory
Read Addr 2
Read File
PC
Read
Address ALU Address
Write Addr Data
Read
Data 2 Write Data
Write Data
ALU
16 Sign 32 cntrl
Extend
Forward
Unit
Jumps Incur One Stall
Jumps not decoded until ID, so one flush is needed
To flush, set IF.Flush to zero the instruction field of the IF/ID
pipeline register (turning it into a noop)
Fix jump
ALU
I j IM Reg DM Reg
hazard by
n
waiting –
s
flush
ALU
t flush IM Reg DM Reg
r.
ALU
O IM Reg DM Reg
j target
r
d
e
r
Shift ID/EX
EX/MEM
left 2
IF/ID Control
Add
Branch MEM/WB
PC+4[31-28] Add
4 Shift
left 2
Read Addr 1
Instruction Register Read Data
Memory Read Addr 2 Data 1 Memory
Read 0
File
PC
Read
Address ALU Address
Write Addr Data
Read
Data 2 Write Data
Write Data
ALU
16 Sign 32 cntrl
Extend
Forward
Unit
One Way to “Fix” a Branch Control Hazard
Fix branch
beq
ALU
I IM Reg DM Reg hazard by
n waiting –
s flush – but
ALU
t flush IM Reg DM Reg
affects CPI
r.
ALU
IM Reg DM Reg
O flush
r
ALU
d IM Reg DM Reg
e flush
r
ALU
IM Reg DM Reg
beq target
ALU
IM Reg DM
Inst 3
Reducing the Delay of Branches
• Move the branch decision hardware back to the EX stage
– Reduces the number of stall (flush) cycles to two
– Adds an and gate and a 2x1 mux to the EX timing path
• Add hardware to compute the branch target address and
evaluate the branch decision to the ID stage
– Reduces the number of stall (flush) cycles to one
(like with jumps)
• But now need to add forwarding hardware in ID stage
– Computing branch target address can be done in parallel with
RegFile read (done for all instructions – only used when needed)
– Comparing the registers can’t be done until after RegFile read, so
comparing and updating the PC adds a mux, a comparator, and an
and gate to the ID timing path
• For deeper pipelines, branch decision points can be even
later in the pipeline, incurring more stalls
ID Branch Forwarding Issues
• MEM/WB “forwarding” WB add3 $1,
is taken care of by the MEM add2 $3,
normal RegFile write EX add1 $4,
before read operation ID beq $1,$2,Loop
IF next_seq_instr
Hazard ID/EX
Unit EX/MEM
0 1
IF/ID Control 0
Add
Shift MEM/WB
4 Add
Compare
IF.Flush
left 2
Read Addr 1
Instruction RegFile Data
Memory Read Addr 2 Memory
Read 0
Read Data 1
PC
Read Data
Address Write Addr ALU Address
ReadData 2
Write Data
Write Data
ALU
16 Sign cntrl
Extend 32
Forward
Unit
Forward
Unit
Delayed Branches
• If the branch hardware has been moved to the ID stage,
then we can eliminate all branch stalls with delayed
branches which are defined as always executing the next
sequential instruction after the branch instruction – the
branch takes effect after that next instruction
– MIPS compiler moves an instruction to immediately after the
branch that is not affected by the branch (a safe instruction)
thereby hiding the branch delay
ALU
IM Reg DM Reg
I 4 beq $1,$2,2
n
s flush
ALU
IM Reg DM Reg
t 8 sub $4,$1,$5
r.
ALU
16 and $6,$1,$7 IM Reg DM Reg
O
r
d
ALU
20 or r8,$1,$9 IM Reg DM Reg
e
r
Predict not taken doesn’t work well for “bottom of the loop”
branching structures Loop: 1st loop instr
2nd loop instr
.
.
.
last loop instr
bne $1,$2,Loop
fall out instr
Static Branch Prediction, con’t
• Resolve branch hazards by assuming a given outcome
and proceeding
2. Predict taken – predict branches will always be taken
Predict taken always incurs one stall cycle (if branch destination
hardware has been moved to the ID stage)
Is there a way to “cache” the address of the branch target instruction
??
BTB
PC
sequential instruction Address
ALU
IM Reg DM Reg
Stage(s)? Synchronous?
• Arithmetic overflow EX yes
ALU
I Inst 0 IM Reg DM Reg
n
D$ page fault
s
ALU
t Inst 1 IM Reg DM Reg
r.
arithmetic overflow
ALU
O Inst 2 IM Reg DM Reg
r
d undefined instruction
ALU
e Inst 3 IM Reg DM Reg
r
ALU
Inst 4 IM Reg DM Reg
I$ page fault
Add Cause 0
Shift MEM/WB
4 Add
Compare
EPC
IF.Flush
left 2
Read Addr 1
Instruction RegFile Data
Memory Read Addr 2 Memory
Read 0
Read Data 1
PC
Read Data
Address Write Addr ALU Address
ReadData 2
Write Data
Write Data
ALU
16 Sign cntrl
Extend 32
Forward
Unit
Forward
Unit
Stalling vs. Flushing Example
Inst1: lw $1, 0($2) Inst1: j Inst4
Stall here Inst2: add $2, $1, $1 Flush here Inst2: add $2, $1, $1
Inst3: add $3, $2, $1 (assuming Inst3: add $3, $2, $1
Inst4: bne $1, $1, label no delay slot) Inst4: bne $1, $1, label
Inst5: and $1, $2, $3 Inst5: and $1, $2, $3
Inst6: or $1, $1, $1 Inst6: or $1, $1, $1
ALU
ALU
Cycle 1 IM Reg DM Reg IM Reg DM Reg
ALU
ALU
Cycle 2 IM Reg DM Reg IM Reg DM Reg
inst2nop
ALU
ALU
Cycle 3 IM Reg DM Reg IM Reg DM Reg
ALU
Cycle 4 IM Reg DM Reg IM Reg DM Reg
nop nop
ALU
ALU
Cycle 5 IM Reg DM Reg IM Reg DM Reg
forwarding
Stalling vs. Flushing Example
Inst1: lw $1, 0($2) Inst1: j Inst4
Stall here Inst2: add $2, $1, $1 Flush here Inst2: add $2, $1, $1
Inst3: add $3, $2, $1 (assuming Inst3: add $3, $2, $1
Inst4: bne $1, $1, label no delay slot) Inst4: bne $1, $1, label
Inst5: and $1, $2, $3 Inst5: and $1, $2, $3
Inst6: or $1, $1, $1 Inst6: or $1, $1, $1
cycle cycle
1 2 3 4 5 6 7 8 9 10 11 1 2 3 4 5 6 7 8 9 10 11
Instr1 IF ID EX M W IF ID EX M W
Instr2 IF ID ID EX M W IF
Instr3 IF IF ID EX M W
Instr4 IF ID EX M W IF ID EX M W
Instr5 IF ID EX M W IF ID EX M W
Instr6 IF ID EX M W IF ID EX M W
Stalling vs. Flushing Example
Inst1: lw $1, 0($2) Inst1: j Inst4
Stall here Inst2: add $2, $1, $1 Flush here Inst2: add $2, $1, $1
Inst3: add $3, $2, $1 (assuming Inst3: add $3, $2, $1
Inst4: bne $1, $1, label no delay slot) Inst4: bne $1, $1, label
Inst5: and $1, $2, $3 Inst5: and $1, $2, $3
Inst6: or $1, $1, $1 Inst6: or $1, $1, $1
cycle cycle
1 2 3 4 5 6 7 8 9 10 11 1 2 3 4 5 6 7 8 9 10 11
Instr1 IF ID EX M W IF ID EX M W
nop EX M W
Instr2 IF ID ID EX M W IF ID EX M W
Instr3 IF IF ID EX M W
Instr4 IF ID EX M W IF ID EX M W
Instr5 IF ID EX M W IF ID EX M W
Instr6 IF ID EX M W IF ID EX M W
Stalling vs. Flushing Example
Inst1: lw $1, 0($2) Inst1: j Inst4
Stall here Inst2: add $2, $1, $1 Flush here Inst2: add $2, $1, $1
Inst3: add $3, $2, $1 (assuming Inst3: add $3, $2, $1
Inst4: bne $1, $1, label no delay slot) Inst4: bne $1, $1, label
Inst5: and $1, $2, $3 Inst5: and $1, $2, $3
Inst6: or $1, $1, $1 Inst6: or $1, $1, $1
cycle cycle
1 2 3 4 5 6 7 8 9 10 11 1 2 3 4 5 6 7 8 9 10 11
Instr1 IF ID EX M W IF ID EX M W
nop EX M W
Instr2 IF ID ID EX M W IF ID EX M W
Instr3 IF IF ID EX M W
Instr4 IF ID EX M W IF ID EX M W
Instr5 IF ID EX M W IF ID EX M W
Instr6 IF ID EX M W IF ID EX M W
Pipeline Summary
The BIG Picture
• XScale
ALU
IM1 IM2 Reg DM1 Reg
SHFT DM2
PC update decode DM write
BTB access reg 1 access ALU op reg write
start IM access
shift/rotate start DM access
IM access reg 2 access exception
Acknowledgments
Some of the slides contain material developed
and copyrighted by M.J. Irwin (Penn state), B.
Parhami (UCSB), and instructor material for
the textbook