Processor Design

Execution Stages

Store/type Data Processing Load Store Branch
1 - fetch ADD r2, r0, r1 LDR r1, [r0, #4] STR r1, [r0, #4] BEQ [PC, #16]
2 - reg read r0, r1 r0 r0, r1 PC
3 - use ALU [r0] + [r1] [r0] + 4 [r0] + 4 [PC] + 16
4 - use mem - read write -
5 - reg write r2<- r1<- - if z == 1 PC <-

Datapath

Stage 1

Data path stage 1

Stage 2

Data path stage 2

Stage 3

Data path stage 3

Stage 4

Data path stage 4

Stage 5

Data path stage 5

Combined 6

See handout

Control

Data processing instructions

e.g. ADD r2, r0, r1

Stage Action Control Signals Asserted
1 - fetch MAR <- [PC] MAR in, MARsel = PC
read memory read
IR <- mem data in IRin, MDRsel = mem
PC <- [PC] + 4 PCsel = inc, PCin
2 - reg read RA <- [r0], RA <- [r1] rd A = 0, RAin, rd B = 1, RBin
3 - ALU RZ <- [RA] + [RB] Asel = A, Bsel = B, ALUop = add, Zin
4 - mem RY <- [RZ] Ysel = Z, RYin
5 - reg wr r2 <- [RY] wrC = 2, wrEn

e.g. LDR r1, [r0, #4]

Stage Action Control Signals Asserted
1 - fetch MAR <- [PC] MAR in, MARsel = PC
read memory read
IR <- mem data in IRin, MDRsel = mem
PC <- [PC] + 4 PCsel = inc, PCin
2 - reg read RA <- [r0] rd A = 0, RAin
3 - ALU RZ <- [RA] + 4 Asel = A, Bsel = offset, ALUop = add, Zin
4 - mem MAR <- [RZ] MARsel = Z, MARin
read memory read
RY <- mem data in Ysel = mem, RYin
5 - reg wr r2 <- [RY] wrC = 1, wrEn

e.g. STR r1, [r0, #4]

Stage Action Control Signals Asserted
1 - fetch MAR <- [PC] MAR in, MARsel = PC
read memory read
IR <- mem data in IRin, MDRsel = mem
PC <- [PC] + 4 PCsel = inc, PCin
2 - reg read RA <- [r0] rd A = 0, RAin
RB <- [r1] rd B = 1, RBin
3 - ALU RZ <- [RA] + 4 Asel = A, Bsel = offset, ALUop = add, Zin
4 - mem MAR <- [RZ] MARsel = Z, MARin
MDR <- [RB] MDRin
write memory write
RY <- mem data in Ysel = mem, RYin
5 - reg wr - -

e.g. BEQ [PC, #16]

Stage Action Control Signals Asserted
1 - fetch MAR <- [PC] MAR in, MARsel = PC
read memory read
IR <- mem data in IRin, MDRsel = mem
PC <- [PC] + 4 PCsel = inc, PCin
2 - reg read - -
3 - ALU RZ <- [PC] + 16 Asel = A, Bsel = offset, ALUop = add, Zin
4 - mem RY <- [RZ] Ysel = Z, RYin
5 - reg wr if (z == 1), PC <- [RY] PCsel = Y, PCin = (Z == 1)

Control Logic

Control Logic

e.g. IRin = T1

PCin = T1 + T5 (Z flag == 1) BEQ

PCsel = T1

PC sel = T5

read = T1 + T4 LDR write = T4 STR

WMFC = read + write

See next chapter See previous chapter