Microprogramming (Appendix D) ELEC 5200-001/6200-001 Computer Architecture and Design Spring 2016

advertisement
ELEC 5200-001/6200-001
Computer Architecture and Design
Spring 2016
Microprogramming (Appendix D)
Vishwani D. Agrawal
James J. Danaher Professor
Department of Electrical and Computer Engineering
Auburn University, Auburn, AL 36849
http://www.eng.auburn.edu/~vagrawal
vagrawal@eng.auburn.edu
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
1
Alternatives for Control Unit (CU)
Hard-wired (hardware)
– Random logic, programmable logic array (PLA), or ROM
– Fast
– Inflexible
Firmware
– Microprogrammed or microcoded CU
– Control implemented like a computer (microcomputer)
Microinstructions
Microprogram
– Flexible
Software-like changes to instruction set possible
Completely different instruction sets can be emulated
– Speed limited by microcomputer memory
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
2
IRWrite
MemRead
MemWrite
Spring 2016, Mar 21 . . .
RegWrite
0-15
Sign
extend
0-5
ELEC 5200-001/6200-001 Lecture 8
ALUOut Reg.
ALU
ALUSrcB
ALUSrcA
B Reg.
Register file
11-15
RegDst
A Reg.
28-31
16-20
MemtoReg
PCSource
Shift
left 2
21-25
Mem. Data (MDR)
Data
0-25
Instr. reg. (IR)
IorD
Memory
26-31 to
Control
FSM
Addr.
PC
PCWrite
etc.
Multicycle Datapath
4
Shift
left 2
ALU
control
ALUOp
3
Multicycle Control FSM
Inputs: 6 opcode bits
Outputs: 16 control signals
Start
State 0
1
Instr.
decode/reg.
fetch/branch
addr.
Instr.
fetch/
adv. PC
R
3
2
Read
memory
data
Compute
memory
addr.
lw
5
Write
register
Spring 2016, Mar 21 . . .
B
ALU
operation
6
Write PC
on branch
condition
8
sw
4
J
Write
jump addr.
to PC
9
7
Write
memory
data
Write
register
ELEC 5200-001/6200-001 Lecture 8
4
States and Outputs
Suppose 10 states are encoded 0000 through 1001.
State code completely determines 16 control signals
(Moore machine).
States 0 (0000), 3 (0011) and 6 (0110)
Next state ← present state + 1
State 1 (0001) – opcode determines next state
State 2 (0010) for lw or sw
State 6 (0110) for R-type of instruction
State 8 (1000) for branch instruction
State 9 (1001) for jump instruction
State 2 (0010) – opcode determines next state
State 3 (0011) for lw
State 5 (0101) for sw
States 4 (0100), 5 (0101), 7 (0111), 8 (1000) and 9
(1001) – next state is unconditionally 0 (0000)
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
5
A Program-Like Implementation
Inputs: 6 opcode bits
Outputs: 16 control signals
Start
State 0000
0001
Instr.
decode/reg.
fetch/branch
addr.
Instr.
fetch/
adv. PC
0011
Read
memory
data
R
0010
lw
Compute
memory
addr.
ALU
operation
J
B
Write PC
on branch
condition
Write
jump addr.
to PC
0110
0100
Write
register
Spring 2016, Mar 21 . . .
0101
sw
1000
1001
0111
Write
memory
data
Write
register
ELEC 5200-001/6200-001 Lecture 8
6
Implementing with ROM
Control
PLA or ROM
16 words
16
16 control
signals
2
4
PLA input or
ROM address
Select
one of
4 ways
Four flip-flops
State sequencer
6-bit
opcode
Spring 2016, Mar 21 . . .
6
ELEC 5200-001/6200-001 Lecture 8
7
ROM and State Sequencer
Control ROM
Sixteen
18-bit words
4-bit address
0001
4-bit state flip-flops
Adder
Advance state
MUX
11 10 01 00
6-bit
Opcode
from IR
Spring 2016, Mar 21 . . .
sw or lw
go to
st. 0
st. + 1
st. 2,6,8,9
st. 3,5
0000
4
Dispatch ROM 2
Control
signals to
datapath
2
AddrCtl
00
11
01
10
Address
4
4
16
Dispatch ROM 1
ROM Address
6
ELEC 5200-001/6200-001 Lecture 8
sw, lw, R,
B or J
8
Dispatch ROM Contents
Each dispatch ROM has sixty-four 4-bit words
Address is 6-bit opcode
Content is next state (4-bits)
Dispatch ROM 1
Dispatch ROM 2
Instruction
Address
(Opcode)
Content
Instruction
Address
(Opcode)
Content
lw
100011
0010
lw
100011
0011
sw
101011
0010
sw
101011
0101
R
000000
0110
B
000100
1000
J
000010
1001
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
9
Control ROM Contents
Control ROM has sixteen
18-bit words:
– bits 0-1, AddrCtl to
control mux
– bits 2-17, sixteen
control signals for
datapath
Address is 4-bit state of
control machine
Spring 2016, Mar 21 . . .
Addr.
bits 17-2
bits 1-0
0000
1001010000001000
11
0001
0000000000011000
01
0010
0000000000010100
10
0011
0011000000000000
11
0100
0000001000000010
00
0101
0010100000000000
00
0110
0000000001000100
11
0111
0000000000000011
00
1000
0100000010100100
00
1001
1000000100000000
00
ELEC 5200-001/6200-001 Lecture 8
10
Microprogram: Basic Idea
The control unit in a computer generates an output
(sequence of control signals) for each instruction.
Suppose we break down each instruction into a series of
smaller operations (microinstructions), such as, fetch,
decode, etc.
Then, implement the control unit as a small computer
(within the computer) that executes a sequence of
microinstructions (microprogram) for each instruction.
M. V. Wilkes, “The Best Way to Design an Automatic
Calculating Machine,” Report of Manchester University
Computer Inaugural Conference, pp. 16-18, 1951.
Reprinted in E. E. Swartzlander (editor), Computer Design
Development: Principal Papers, pp. 266-270, Rochelle
Park, NJ: Hayden, 1976.
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
11
Maurice V. Wilkes
Born June 26, 1913, Staffordshire, UK, died November 29, 2010
1967 Turing Award citation:
Professor Wilkes Is best known
as the builder and designer of the
EDSAC, the first computer with
an internally stored program.
Built in 1949, the EDSAC used a
mercury delay line memory. He is
also known as the author, with
Wheeler and Gill, of a volume on
“Preparation of Programs for
Electronic Digital Computers” in
1951, in which program libraries
were effectively introduced.
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
12
Microcoded Control Unit
Microcode word
Sixteen
Microcode
18-bit words
memory
4-bit address
0001
Address
4
4
μPC 4-bit state flip-flops
16
Control
signals to
datapath
AddrCtl
Sequencing
2
field
MUX
11 10 01 00
Adder
0000
Opcode
from IR
Dispatch ROM 2
lw or sw
Dispatch ROM 1
ROM address
6
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
sw, lw, R,
B or J
Address
select
logic
13
Implementing the Idea
Use a memory type implementation for control
unit.
Create a software infrastructure to automatically
translate instructions into memory data
(microcode):
Microinstructions – define a machine language in which
instructions can be described
Microprogram – an instruction described as a sequence of
microinstructions
Microassembler – converts microprogram to (binary)
microcode
Is there a micro-compiler?
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
14
Microprogramming
A microinstruction set is defined.
To program the control of a computer for an
instruction set, a programmer writes a
microprogram for each machine instruction.
Each micrprogram is converted into
microcode, specific to the datapath
hardware, by a microassembler and the
entire microcode is loaded in the microcode
memory of the control unit (CU).
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
15
Breaking Up MIPS Instructions
R-type instruction:
Fetch
Decode
ALU operation
Write register
lw:
Fetch
Decode
Memory address computation
Read memory
Write register
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
16
Microinstructions for MIPS ISA
Fetch
Decode
RegWr
LWSW1
LW2
SW2
R1
BEQ1
JUMP1
Spring 2016, Mar 21 . . .
fetch instruction
decode instruction, read registers,
calculate branch address
write register
compute memory address
memory read
memory write
register type execution
branch execution
jump execution
ELEC 5200-001/6200-001 Lecture 8
17
Let’s Construct MIPS Instructions
sw:
R-type instruction:
Fetch
Decode
R1
RegWr
Fetch
Decode
LWSW1
SW2
Branch:
lw:
Fetch
Decode
LWSW1
LW2
RegWr
Spring 2016, Mar 21 . . .
Fetch
Decode
BEQ1
Jump:
Fetch
Decode
JUMP1
ELEC 5200-001/6200-001 Lecture 8
18
Microinstruction Format
Just one instruction with seven arguments
A label or name for control state(s), e.g., Fetch, MEM1, etc.
Seven arguments and their possible values:
–
–
–
–
ALU control
SRC1
SRC2
Reg. control
– Memory
– PCWrite
– Sequencing
Spring 2016, Mar 21 . . .
add, subtract or funct. code
# result to ALUOut
PC or A
B, 4, extend or extend-shift
Read
# read two reg. specified by IR into A
and B
Write ALU
# write ALUOut to register file
Write MDR
# register file ← MDR
Read PC
# IR ← M[ PC ]
Read ALU
# MDR ← M[ ALUOut ]
Write ALU
# M[ ALUOut ] ← B
ALU
# write PC from ALU
ALU cond.
# If zero = 1, PC ← ALUOut
Jump addr.
# PC ← jump address
Seq
# choose next μInst. Sequentially
fetch
# go to first μInst. to begin new instr.
Dispatch i
# use Dispatch ROM i, i = 1 or 2
ELEC 5200-001/6200-001 Lecture 8
19
Sequencing Illustrated
State 0
Fetch
Sequencing 1
= seq
Instr.
fetch/
adv. PC
Fetch
Instr.
decode/reg.
fetch/branch
addr.
Dispatch 1
3
2
LW2
Read
memory
data
Compute
memory
addr.
lw
6
5
Write
register
SW2
Write
memory
data
seq
JUMP1
BEQ1
ALU
operation
seq
4
R1
LWSW1
Write PC
on branch
condition
8
Write
jump addr.
to PC
9
7
Write
register
Fetch
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
20
Microinstruction Arguments
Argument
ALU Ctrl
SRC1
SRC2
Value
μCode value
Action
Add
ALUOp = 00
ALU adds
Subt
ALUOp = 01
ALU subtracts for beq
Funct code
ALUOp = 10
ALU executes R-type instruction
PC
ALUSrcA = 0
PC is first ALU input
A
ALUSrcA = 1
Reg A is first ALU input
B
ALUSrcB = 00
Reg B is second ALU input
4
ALUSrcB = 01
Constant 4 is second ALU input
Extend
ALUSrcB = 10
Sign extension unit is second ALU
input
Extshft
ALUSrcB = 11
2-bit shift unit is second ALU input
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
21
Microinstruction Arguments (Cont.)
Argument
Reg. Ctrl
Memory
Value
μCode value
Read
Action
Load A and B from Register file
Write ALU
RegWrite = 1
RegDst = 1
MemtoReg = 0
An IR-specified register in
Register file is written from
ALUOut
Write MDR
RegWrite = 1
RegDst = 0
MemtoReg = 1
An IR-specified register in
Register file is written from MDR
Read PC
MemRead = 1
IorD = 0
IRWrite = 1
IR ← M[ PC ]
MDR ← M[ PC ]
Read ALU
MemRead = 1
IorD = 1
MDR ← M[ ALUOut ]
Write ALU
MemWrite = 1
IorD = 1
M[ ALUOut ] ← B
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
22
Microinstruction Arguments (Cont.)
Field
μInstr. value
μCode value
Action
PCSource = 00
PCWrite = 1
Register file loads A and B
PCSource = 01
PCWriteCond = 1
An IR-specified register in
Register file is written from
ALUOut
PCSource = 10
PCWrite = 1
An IR-specified register in
Register file is written from MDR
AddrCtl = 11
Choose next μInstr. sequentially
AddrCtl = 00
Go to first μInstr. to begin new
instruction
Dispatch 1
AddrCtl = 01
Use Dispatch ROM 1
Dispatch 2
AddrCtl = 10
Use Dispatch ROM 2
PC Write ALU
Ctrl
ALUOutcond
Jump
address
Sequenc Seq
ing
Fetch
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
23
Microinstruction Fetch
Label ALU
ctrl.
SRC1 SRC2 Reg.
ctrl.
Mem.
PCWrite
ctrl.
Fetch
Add
Decode Add
PC
PC
Read PC
ALU
Read
Seq
Dispatch 1
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
Addrctl
PCSource
PCWrite
PCWriteCond
MemRead
IorD
IRWrite
MemWrite
RegWrite
RegDst
MemtoReg
ALUSrcB
Microassembler produces the following microcode:
0
01
0 0 0 1 0 1 0
00 1 0
11
0
11
0 0 0 0 0 0 0
00 0 0
01
ALUSrcA
ALUOp
00
00
4
ExtShft
Seq.
24
Microprogram for lw and sw
Label ALU
ctrl.
SRC1 SRC2 Reg.
ctrl.
LWSW1 Add
LW2
RegWr
SW2
A
Mem.
PCWrite
ctrl.
Extend
Read ALU
Write MDR
Write ALU
Seq.
Dispatch 2
Seq
Fetch
Fetch
Microprogram consists of four microinstructions.
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
25
Microprogram for R-Type Instruction
Label ALU
ctrl.
SRC1 SRC2 Reg.
ctrl.
R1
RegWr
A
Funct code
Mem.
PCWrite
ctrl.
B
Write ALU
Seq.
Seq
Fetch
Go to next μInstr.
Go to μInstr. Fetch
Microprogram consists of two microinstructions.
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
26
Microprogram for beq Instruction
Label ALU
ctrl.
SRC1 SRC2 Reg.
ctrl.
BEQ1
A
Subt
Mem.
B
PCWrite
ctrl.
Seq.
ALUOut-cond
Fetch
If (zero) then PC ← ALUOut
Go to μInstr. Fetch
Microprogram consists of one microinstruction.
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
27
Microprogram for jump Instruction
Label ALU
ctrl.
SRC1 SRC2 Reg.
ctrl.
JUMP1
Mem.
PCWrite
ctrl.
Seq.
Jump address
Fetch
Microprogram consists of one microinstruction.
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
28
μProgram for Multi-Cycle CU
Label
ALU
ctrl.
SRC1
SRC2
Fetch
Add
Decode1 Add
PC
PC
4
ExtShft
LWSW1 Add
LW2
RegWr
SW2
A
Extend
R1
RegWr
FntCd.
A
BEQ1
Subt
Reg.
ctrl.
Mem.
PCWrite
ctrl.
Seq.
Read PC
ALU
Seq
Disp. 1
Read
Disp. 2
Seq
Fetch
Fetch
Read ALU
Write MDR
Write ALU
B
Seq
Fetch
Write ALU
A
B
JUMP1
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
ALUOut-cond
Fetch
Jump address
Fetch
29
IRWrite
MemRead
MemWrite
Spring 2016, Mar 21 . . .
RegWrite
0-15
Sign
extend
0-5
ELEC 5200-001/6200-001 Lecture 8
ALUOut Reg.
ALU
ALUSrcB
ALUSrcA
B Reg.
Register file
11-15
RegDst
A Reg.
28-31
16-20
MemtoReg
PCSource
Shift
left 2
21-25
Mem. Data (MDR)
Data
0-25
Instr. reg. (IR)
IorD
Memory
26-31 to
Microcoded
Control
Addr.
PC
PCWrite
etc.
Multicycle Datapath
4
Shift
left 2
ALU
control
ALUOp
30
Microcode Operation
μPC is always initialized to 0000
Load starting instruction address in PC
Clock control and datapath
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
31
How Microcode Works
0001 in clk 2
0001
4
4
Sixteen
Microcode
18-bit words
memory
4-bit address
μPC
Address
0000
16
clk 1: Set
Datapath
for Fetch
AddrCtl
Sequencing
11
field
MUX
11 10 01 00
Adder
0000
Opcode
from IR
In clk 2
Dispatch ROM 2
lw or sw
Dispatch ROM 1
ROM address
6
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
sw, lw, R,
B or J
Address
select
logic
32
Multicycle Control FSM
Inputs: 6 opcode bits
Outputs: 16 control signals
Start
State 0
1
Instr.
decode/reg.
fetch/branch
addr.
Instr.
fetch/
adv. PC
R
3
2
Read
memory
data
Compute
memory
addr.
lw
5
Write
register
Spring 2016, Mar 21 . . .
B
ALU
operation
6
Write PC
on branch
condition
8
sw
4
J
Write
jump addr.
to PC
9
7
Write
memory
data
Write
register
ELEC 5200-001/6200-001 Lecture 8
33
Summary
Hard-wired control: A finite state machine
implemented typically using programmable logic
array (PLA) or random logic.
Microinstruction: A one-clock instruction that
asserts a set of control signals to the datapath and
specifies what microinstruction to execute next.
Microprogram: A sequence of microinstructions
that implements a multicycle (or single cycle)
instruction.
Microcode: Machine code of a microprogram,
generally produced by a microassembler.
Microprogrammed or microcoded control: A
method of specifying control that uses microcode
rather than a finite state machine.
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
34
Further on Microprogramming
Preceding discussion is based on:
D. A. Patterson and J. L. Hennessey, Computer Organization and
Design, Second Edition, San Francisco: Morgan-Kaufman, 1998,
Chapter 5, pp. 399-410.
Terms “microcomputer”, “microarchitecture” and
“micropipeline” are not related to microprogramming.
Nanoprogramming: Two levels of microprogramming
– a “recursive” control:
Nanodata Corp., QM-1 Hardware Level Users Manual, 2nd Ed.,
Williamsville, NY, 1972.
J. P. Hayes, Computer Architecture and Organization, Section
4.4.3, NY: McGraw-Hill, 1978.
Virtual machines: Any program can be run on any
instruction set using an interpreter. Example, Java.
Spring 2016, Mar 21 . . .
ELEC 5200-001/6200-001 Lecture 8
35
Download