Documente Academic
Documente Profesional
Documente Cultură
10 10
Processor Performance
Iron Law of performance:
Time
Instructions Cycles Time
=
Program
Program Instruction Cycle
Perf =
1
Time
11
1 0 XX X X
Rc
Ra
Rb
(UNUSED)
Rc
Ra
Literal C (signed)
Rc
Ra
MUL*
CMPLT
XOR
SRA
DIV*
Instruction classes
distinguished by
OPCODE:
OP
OPC
MEM
Control Flow
*optional
XNOR
Literal C (signed)
Steps:
1.
2.
3.
4.
Component Repertoire:
ALU instructions
Load & store instructions
Jump & branch instructions
Exceptions
Registers
Muxes
ALU
RA1
WA
WE
WD
RA2
Register
File
(3-port)
A
D
WD
Instruction
Memory
A
RD
Data
Memory
R/W
RD1
RD2
Memories
L13: Building the Beta, Slide #5
WA
clk
5
EN
CLK
EN
CLK
EN
CLK
Write Address
EN
CLK
WE
Write Enable
Write Data
RA2
RA1
CLK
WA
32
WD
RA1
RA2
Register
File
(3-port)
RD1
32
Read
Port 1
clk
32
Read
Port 2
EN
RD2
0
D
Q
Q
6.004 Computation Structures
Load-enabled register
RA
Read data
RD
Reg[A]
new Reg[A]
tPD
tPD
CLK
Write enable
WE
Write address
WA
Write data
WD
new Reg[A]
ts th
ALU Instructions
32-bit (4-byte) ADD instruction:
31
26 25
21 20
16 15
11
10000000100000100001100000000000
Opcode
Rc
Means, to Beta,
Ra
Rb
(unused)
Instruction Fetch/Decode
Use a counter to FETCH the next instruction: PROGRAM
COUNTER (PC)
Reset
RESET
PC
00
A Instruction
32
+4
Memory
D
ID[31:0]
32
32
INSTRUCTION
WORD
FIELDS
OPCODE: ID[31:26]
Control Logic
CONTROL SIGNALS
ALU Op Datapath
31
26 25
Ra
11
Rb
(UNUSED)
00
+4
16 15
Rc
1 0 XX X X
PC
21 20
Instruction
Memory
D
ID[31:0]
Ra: ID[20:16]
Rb: ID[15:11]
RA1
Rc: ID[25:21]
Register
File
WA
RD1
ID[31:26]
32
RA2
WD
RD2
WE
WERF
32
Control Logic
A
ALUFN
ALU
ALUFN
WERF!
WERF
32
ALU Op Datapath
Rc
1 0 XX X X
PC
Rb
(UNUSED)
00
+4
Ra
Instruction
Memory
D
ID[31:0]
Ra: ID[20:16]
Rb: ID[15:11]
RA1
Rc: ID[25:21]
Register
File
WA
RD1
ID[31:26]
32
RA2
WD
RD2
WE
WERF
32
Control Logic
A
ALUFN
ALUFN
ALU
F(op)
WERF
32
26 25
1 1 XX XX
PC
21 20
Rc
16 15
Ra
Literal C (signed)
00
Instruction
Memory
D
+4
ID[31:0]
Ra: ID[20:16]
Sign-extension requires
no logic
RA1
Rc: ID[25:21]
WA
WA
RD1
Rb: ID[15:11]
Register
File
RA2
WD
RD2
WE
WERF
C: SXT(ID[15:0])
32
ID[31:26]
BSEL
Control Logic
31:16
15:0
A
BSEL
Just replicate
ID[15] sixteen
times to create
high-order bits!
6.004 Computation Structures
ALUFN
ALU
ALUFN
WERF
Ra
Literal C (signed)
00
+4
Rc
Instruction
Memory
D
ID[31:0]
Ra: ID[20:16]
RA1
Rc: ID[25:21]
WA
WA
RD1
Rb: ID[15:11]
Register
File
RA2
WD
RD2
WERF
WE
C: SXT(ID[15:0])
32
ID[31:26]
BSEL
Control Logic
BSEL
ALUFN
ALUFN
ALU
F(op)
WERF
Load Instruction
31
26 25
01 10 00
LD:
PC
21 20
Rc
16 15
Ra
Literal C (signed)
Reg[Rc] Mem[Reg[Ra]+SXT(C)]
00
+4
Instruction
Memory
ID[31:0]
Ra: ID[20:16]
Rc: ID[25:21]
Rb: D[15:11]
RA1
Register
File
WA
WA
RD1
RA2
WD
RD2
WE
WERF
C: SXT(ID[15:0])
ID[31:26]
1
BSEL
Control Logic
BSEL
WDSEL
ALUFN
MWR, MOE
WERF
ALUFN
ALU
WD
R/W
OE
MWR
MOE
Data Memory
32
Adr
RD
32
0
WDSEL
Load Instruction
01 10 00
LD:
PC
Rc
Ra
Literal C (signed)
Reg[Rc] Mem[Reg[Ra]+SXT(C)]
00
+4
Instruction
Memory
D
ID[31:0]
Ra: ID[20:16]
Rc: ID[25:21]
Rb: D[15:11]
RA1
Register
File
WA
WA
RD1
RA2
WD
RD2
WERF
WE
C: SXT(ID[15:0])
ID[31:26]
1
BSEL
Control Logic
BSEL
WDSEL
ALUFN
MWR, MOE
WERF
ALUFN
ALU
WD
R/W
OE
A+B
Data Memory
Adr
32
MWR
MOE
0
1
RD
32
0
WDSEL
2
L13: Building the Beta, Slide #15
Store Instruction
31
26 25
01 10 01
ST:
PC
21 20
Rc
16 15
Ra
Literal C (signed)
Mem[Reg[Ra]+SXT(C)] Reg[Rc]
00
Instruction
Memory
D
+4
ID[31:0]
Ra: ID[20:16]
Rc: ID[25:21]
Rb: ID[15:11]
0
RA1
Rc: ID[25:21]
Register
File
WA
WA
RD1
RA2SEL
No WERF!
RA2
WD
RD2
WE
WERF
C: SXT(ID[15:0])
ID[31:26]
BSEL
Control Logic
32
RA2SEL
A
BSEL
WDSEL
ALUFN
MWR, MOE
ALUFN
ALU
WD
R/W
OE
MWR
MOE
Data Memory
Adr
RD
WERF
WDSEL
Store Instruction
01 10 01
ST:
PC
Rc
Ra
Literal C (signed)
Mem[Reg[Ra]+SXT(C)] Reg[Rc]
00
Instruction
Memory
D
+4
ID[31:0]
Ra: ID[20:16]
Rc: ID[25:21]
Rb: ID[15:11]
0
RA1
Rc: ID[25:21]
Register
File
WA
WA
RD1
RA2SEL
RA2
WD
RD2
WERF
WE
C: SXT(ID[15:0])
ID[31:26]
BSEL
Control Logic
1
32
RA2SEL
A
BSEL
WDSEL
ALUFN
MWR, MOE
ALUFN
ALU
WD
R/W
OE
Data Memory
A+B
Adr
MWR
MOE
1
0
RD
WERF
WDSEL
JMP Instruction
31
01 10 11
JT
PCSEL
PC
26 25
21 20
Rc
16 15
Ra
Literal C (signed)
00
+4
Instruction
Memory
D
ID[31:0]
Ra: ID[20:16]
Rc: ID[25:21]
Rb: ID[15:11]
0
Rc: ID[25:21]
RA1
Register
File
WA
WA
RD1
RA2SEL
RA2
WD
RD2
WE
WERF
JT
C: SXT(ID[15:0])
ID[31:26]
BSEL
Control Logic
PCSEL
RA2SEL
A
BSEL
WDSEL
ALUFN
MWR. MOE
ALU
ALUFN
WD
R/W
OE
MWR
MOE
Data Memory
Adr
RD
WERF
PC+4
32
0
WDSEL
JMP Instruction
01 10 11
JT
PCSEL
PC
Rc
Ra
Literal C (signed)
00
+4
Instruction
Memory
D
ID[31:0]
Ra: ID[20:16]
Rc: ID[25:21]
Rb: ID[15:11]
0
Rc: ID[25:21]
RA1
Register
File
WA
WA
RD1
RA2SEL
--
RA2
WD
RD2
WE
WERF
WD
R/W
OE
JT
C: SXT(ID[15:0])
ID[31:26]
BSEL
--
Control Logic
PCSEL
RA2SEL
A
BSEL
WDSEL
ALUFN
MWR. MOE
ALU
ALUFN
--
Data Memory
Adr
MWR
MOE
0
--
RD
WERF
PC+4
32
0
WDSEL
0
L13: Building the Beta, Slide #19
BEQ/BNE Instructions
31
01 11 00
JT
PCSEL
26 25
21 20
16 15
Rc
Ra
Literal C (signed)
32
PC
01 11 01
00
Instruction
Memory
Literal C (signed)
ID[31:0]
Ra: ID[20:16]
(PC+4)+4*SXT(C)
Rb: ID[15:11]
Rc: ID[25:21]
0
RA1
Rc: ID[25:21]
Register
File
WA
WA
RD1
4*SXT(ID[15:0])
4* only
requires
adding 0b00
to low-order
bits no
HW needed!
Ra
+4
Rc
RA2SEL
RA2
WD
RD2
WE
WERF
JT
C: SXT(ID[15:0])
ID[31:26]
BSEL
Control Logic
PCSEL
RA2SEL
BSEL
WDSEL
ALUFN
MWR, MOE
WERF
ALU
ALUFN
WD
R/W
OE
MWR
MOE
Data Memory
Adr
RD
PC+4
0
WDSEL
BEQ/BNE Instructions
01 11 00
JT
PCSEL
0 or 1
Rc
Ra
Literal C (signed)
32
PC
01 11 01
00
Instruction
Memory
Ra
Literal C (signed)
+4
Rc
ID[31:0]
Ra: ID[20:16]
Rb: ID[15:11]
Rc: ID[25:21]
0
(PC+4)+4*SXT(C) +
RA1
Rc: ID[25:21]
RD1
4*SXT(ID[15:0])
Register
File
WA
WA
RA2SEL
--
RA2
WD
RD2
WERF
WE
JT
C: SXT(ID[15:0])
ID[31:26]
BSEL
--
Control Logic
PCSEL
RA2SEL
BSEL
WDSEL
ALUFN
MWR, MOE
WERF
ALU
ALUFN
WD
R/W
OE
Data Memory
--
Adr
MWR
MOE
0
--
RD
PC+4
0
WDSEL
0
L13: Building the Beta, Slide #21
Rc
Ra
Literal C (signed)
C: X = X * 123456;
BETA:
LD(X, r0)
LDR(c1, r1)
MUL(r0, r1, r0)
ST(r0, X)
...
c1: LONG(123456)
L13: Building the Beta, Slide #22
LDR Instruction
JT
PCSEL
01 11 11
IF
PC
Rc
Ra
Literal C (signed)
LDR:
00
Instruction
Memory
+4
ID[31:0]
Ra: ID[20:16]
Rc: ID[25:21]
Rb: ID[15:11]
0
RA1
Rc: ID[25:21]
Register
File
WA
WA
RD1
ID[31:26]
ASEL
RA2SEL
RA2
WD
RD2
WE
WERF
JT
C:SXT(ID[15:0])
(PC+4)+4*SXT(C)
BSEL
Control Logic
PCSEL
RA2SEL
ASEL
BSEL
WDSEL
ALUFN
MWR, MOE
WERF
ALU
ALUFN
WD
R/W
OE
Data Memory
Adr
RD
MWR
MOE
PC+4
0
WDSEL
LDR Instruction
JT
PCSEL
01 11 11
IF
PC
Rc
Ra
Literal C (signed)
LDR:
00
Instruction
Memory
+4
ID[31:0]
Ra: ID[20:16]
Rc: ID[25:21]
Rb: ID[15:11]
0
RA1
Rc: ID[25:21]
Register
File
WA
WA
RD1
ID[31:26]
ASEL
Control Logic
PCSEL
RA2SEL
ASEL
BSEL
WDSEL
ALUFN
MWR, MOE
WERF
RA2SEL
--
RA2
WD
RD2
WERF
WE
JT
C:SXT(ID[15:0])
(PC+4)+4*SXT(C)
BSEL
--
1
A
ALU
ALUFN
WD
R/W
OE
Data Memory
Adr
MWR
MOE
0
1
RD
PC+4
0
WDSEL
2
L13: Building the Beta, Slide #24
Exceptions
What if something bad happens?
Execution of an illegal opcode
Reference to non-existent memory
Divide by zero
Exception Processing
Plan:
Interrupt running program
Invoke exception handler (like a procedure call)
Return to continue execution
Exception Implementation
Instead of executing instruction, fake a procedure call
Save current PC+4 (as branches do)
Load PC with exception vector: 0x4 for synchronous events,
0x8 for asynchronous events
LD(R31,A,R0)
LD(R31,B,R1)
DIV(R0,R1,R2)
ST(R2,C,R31)
IllOp:
PUSH(XP)
Forced by
Fetch inst. at Mem[Reg[XP]4]
hardware
check for DIV opcode, get reg numbers
perform operation in SW, fill result reg
POP(XP)
JMP(XP)
L13: Building the Beta, Slide #27
Exceptions
ILL
XAdr OP
PCSEL
JT
2
PC
00
Instruction
Memory
D
+4
ID[31:0]
Ra: ID[20:16]
RA2SEL
WASEL
RA1
XP
Rc: ID[25:21]
RD1
RA2
WD
RD2
WE
WERF
JT
C: SXT(ID[15:0])
(PC+4)+4*SXT(C)
Register
File
WA
WA
IRQ
Rc: ID[25:21]
Rb: ID[15:11]
ID[31:26]
ASEL
BSEL
Control Logic
PCSEL
RA2SEL
ASEL
BSEL
WDSEL
ALUFN
MWR. MOE
WERF
WASEL
ALU
ALUFN
R/W
OE
MWR
MOE
Data Memory
Adr
RD
PC+4
0
WD
WDSEL
Exceptions
ILL
XAdr OP
PCSEL
3 or 4
JT
2
PC
00
Instruction
Memory
D
+4
ID[31:0]
1
Ra: ID[20:16]
RA1
Rc: ID[25:21]
RD1
RA2SEL
Control Logic
PCSEL
RA2SEL
ASEL
BSEL
WDSEL
ALUFN
MWR. MOE
WERF
--
WD
RD2
WERF
WE
ID[31:26]
ASEL
WASEL
RA2
JT
C: SXT(ID[15:0])
(PC+4)+4*SXT(C)
Register
File
WA
WA
BSEL
--
-A
ALU
ALUFN
WD
R/W
OE
Data Memory
--
Adr
MWR
MOE
0
--
RD
PC+4
0
WASEL
XP
IRQ
Rc: ID[25:21]
Rb: ID[15:11]
WDSEL
0
L13: Building the Beta, Slide #29
PCSEL
JT
Reset
RESET
PC
00
Instruction
Memory
D
+4
ID[31:0]
Ra: ID[20:16]
Rc: ID[25:21]
0
RA2SEL
WASEL
RA1
XP
RD1
Z
C: SXT(ID[15:0])
(PC+4)+4*SXT(C)
Register
File
WA
WA
Rc: ID[25:21] 0
IRQ
Rb: ID[15:11]
RA2
WD
RD2
WE
WERF
JT
ID[31:26]
ASEL
BSEL
Control Logic
ALUFN
ASEL
A
BSEL
MOE
ALU
ALUFN
WD
Data
Memory
MWR
PCSEL
Adr
RA2SEL
WE
MWR
OE
MOE
RD
WASEL
WDSEL
WERF
PC+4
0
WDSEL
ALUFN
ASEL
BSEL
MOE
MWR
PCSEL
RA2SEL
WASEL
WDSEL
WERF
ILLOP
BNE
BEQ
JMP
ST
LDR
LD
OPC
OP
IRQ
RESET
Control Logic
Implementation choices:
64-location ROM indexed by opcode with external logic to
handle changes due to Z and IRQ inputs
Entirely combinational logic (faster, but much more work!)
6.004 Computation Structures
Is that all
there is to
building a
processor???
No.
Youve gotta print
up all those little
Beta Inside
stickers.