seoul national university
DESCRIPTION
Seoul National University. Sequential Implementation. Seoul National University. Byte. 0. 1. 2. 3. 4. 5. nop. 1. 0. halt. 0. 0. cmovXX rA , rB. 2. fn. rA. rB. irmovl V , rB. 3. 0. 8. rB. V. rmmovl rA , D ( rB ). 4. 0. rA. rB. D. mrmovl D ( rB ), rA. 5. 0. - PowerPoint PPT PresentationTRANSCRIPT
2
Y86 Instruction Set #1
Seoul National University
Byte 0 1 2 3 4 5
pushl rA A 0 rA 8
jXX Dest 7 fn Dest
popl rA B 0 rA 8
call Dest 8 0 Dest
cmovXX rA, rB 2 fn rA rB
irmovl V, rB 3 0 8 rB V
rmmovl rA, D(rB) 4 0 rA rB D
mrmovl D(rB), rA 5 0 rA rB D
OPl rA, rB 6 fn rA rB
ret 9 0
nop 1 0
halt 0 0
3
Y86 Instruction Set #2
Seoul National University
Byte 0 1 2 3 4 5
pushl rA A 0 rA 8
jXX Dest 7 fn Dest
popl rA B 0 rA 8
call Dest 8 0 Dest
cmovXX rA, rB 2 fn rA rB
irmovl V, rB 3 0 8 rB V
rmmovl rA, D(rB) 4 0 rA rB D
mrmovl D(rB), rA 5 0 rA rB D
OPl rA, rB 6 fn rA rB
ret 9 0
nop 1 0
halt 0 0
rrmovl 2 0
cmovle 2 1
cmovl 2 2
cmove 2 3
cmovne 2 4
cmovge 2 5
cmovg 2 6
4
Y86 Instruction Set #3
Seoul National University
Byte 0 1 2 3 4 5
pushl rA A 0 rA 8
jXX Dest 7 fn Dest
popl rA B 0 rA 8
call Dest 8 0 Dest
cmovXX rA, rB 2 fn rA rB
irmovl V, rB 3 0 8 rB V
rmmovl rA, D(rB) 4 0 rA rB D
mrmovl D(rB), rA 5 0 rA rB D
OPl rA, rB 6 fn rA rB
ret 9 0
nop 1 0
halt 0 0 addl 6 0
subl 6 1
andl 6 2
xorl 6 3
5
Y86 Instruction Set #4
Seoul National University
Byte 0 1 2 3 4 5
pushl rA A 0 rA 8
jXX Dest 7 fn Dest
popl rA B 0 rA 8
call Dest 8 0 Dest
cmovXX rA, rB 2 fn rA rB
irmovl V, rB 3 0 8 rB V
rmmovl rA, D(rB) 4 0 rA rB D
mrmovl D(rB), rA 5 0 rA rB D
OPl rA, rB 6 fn rA rB
ret 9 0
nop 1 0
halt 0 0
jmp 7 0
jle 7 1
jl 7 2
je 7 3
jne 7 4
jge 7 5
jg 7 6
6
Building Blocks
Seoul National University
Combinational Logic Compute Boolean functions of inputs Continuously respond to input
changes Operate on data and implement
control
Storage Elements Store bits Addressable memories Non-addressable registers Loaded only as clock rises
Registerfile
Registerfile
A
B
W dstW
srcA
valA
srcB
valB
valW
Clock
ALU
fun
A
BMUX
0
1
=
Clock
7
Hardware Control Language
Seoul National University
Very simple hardware description language Can only express limited aspects of hardware operation
Parts we want to explore and modify Data Types
bool: Boolean a, b, c, …
int: words A, B, C, … Does not specify word size---bytes, 32-bit words, …
Statements bool a = bool-expr ; int A = int-expr ;
8
HCL Operations
Seoul National University
Classify by type of value returned Boolean Expressions
Logic Operations a && b, a || b, !a
Word Comparisons A == B, A != B, A < B, A <= B, A >= B, A > B
Set Membership A in { B, C, D }
– Same as A == B || A == C || A == D Word Expressions
Case expressions [ a : A; b : B; c : C ] Evaluate test expressions a, b, c, … in sequence Return word expression A, B, C, … for first successful test
9
SEQ Hardware Structure
Seoul National University
“State” Register File Memory
Instruction: for reading instructions Data: for reading/writing program data
Program counter register (PC) Condition code register (CC)
Instruction Flow Read instruction at address specified by PC Process through stages Update the “state” including the program
counter
Instructionmemory
Instructionmemory
PCincPC
increment
CCCCALUALU
Datamemory
Datamemory
Fetch
Decode
Execute
Memory
Write back
icode ifunrA, rBvalC
Registerfile
Registerfile
A B M
E
Registerfile
Registerfile
A BM
E
PC
valP
srcA, srcBdstA, dstB
valA, valB
aluA, aluB
Cnd
valE
Addr, Data
valM
PCvalE, valM
newPC
10
SEQ Stages
Seoul National University
Fetch Read instruction from instruction memory
Decode Read from registers
Execute Compute value or address
Memory Read from or write to memory
Write Back Write to registers
PC Update program counter
Instructionmemory
Instructionmemory
PCincPC
increment
CCCCALUALU
Datamemory
Datamemory
Fetch
Decode
Execute
Memory
Write back
icode ifunrA, rBvalC
Registerfile
Registerfile
A B M
E
Registerfile
Registerfile
A BM
E
PC
valP
srcA, srcBdstA, dstB
valA, valB
aluA, aluB
Cnd
valE
Addr, Data
valM
PCvalE, valM
newPC
11
Instruction Decoding
Seoul National University
Instruction Format Instruction byte icode:ifun Optional register byte rA:rB Optional constant word valC
5 0 rA rB D
icodeifun
rArB
valC
Optional Optional
12
Executing Arith./Logical Operation
Seoul National University
Fetch Read 2 bytes
Decode Read operand registers
Execute Perform operation Set condition codes
Memory Do nothing
Write back Update register
PC Update Increment PC by 2
OPl rA, rB 6 fn rA rB
13
Stage Computation: Arith/Log. Ops
Seoul National University
Formulate instruction execution as sequence of simple steps Use the same general form for all instructions
OPl rA, rB
icode:ifun M1[PC]
rA:rB M1[PC+1]
valP PC+2
Fetch
valA R[rA]
valB R[rB]Decode
valE valB OP valA
Set CCExecute
Memory
R[rB] valE
Write back
PC valPPC update
14
Executing rmmovl
Seoul National University
Fetch Read 6 bytes
Decode Read operand registers
Execute Compute effective address
Memory Write to memory
Write back Do nothing
PC Update Increment PC by 6
rmmovl rA, D(rB)4 0 rArB D
15
Stage Computation: rmmovl
Seoul National University
rmmovl rA, D(rB)
icode:ifun M1[PC]
rA:rB M1[PC+1]
valC M4[PC+2]
valP PC+6
Fetch
valA R[rA]
valB R[rB]Decode
valE valB + valCExecute
M4[valE] valAMemory
Write back
PC valPPC update
16
Stage Computation: mrmovl
Seoul National University
mrmovl D(rB), rA
icode:ifun M1[PC]
rA:rB M1[PC+1]
valC M4[PC+2]
valP PC+6
Fetch
valB R[rB]Decode
valE valB + valCExecute
valM M4[valE]Memory
Write back
PC valPPC update
R[rA] valM
17
Stage Computation: rrmovl
Seoul National University
rrmovl rA, rB
icode:ifun M1[PC]
rA:rB M1[PC+1]
valP PC+2
Fetch
valA R[rA]Decode
valE 0 + valAExecute
Memory
Write back
PC valPPC update
R[rB] valE
18
Stage Computation: irmovl
Seoul National University
irmovl V, rB
icode:ifun M1[PC]
rA:rB M1[PC+1]
valC M4[PC+2]
valP PC+6
Fetch
Decode
valE 0 + valCExecute
Memory
Write back
PC valPPC update
R[rB] valE
19
Stage Computation: pushl
Seoul National University
pushl rA
icode:ifun M1[PC]
rA:rB M1[PC+1]
valP PC+2
Fetch
valA R[rA]
valB R[%esp]Decode
valE valB + (-4)Execute
M4[valE] valA Memory
R[%esp] valEWrite back
PC valPPC update
20
Stage Computation: popl
Seoul National University
popl rA
icode:ifun M1[PC]
rA:rB M1[PC+1]
valP PC+2
Fetch
valA R[%esp]
valB R[%esp]Decode
valE valB + 4Execute
valM M4[valA]Memory
R[%esp] valE
R[rA] valMWrite back
PC valPPC update
21
Stage Computation: Jumps
Seoul National University
jXX Dest
icode:ifun M1[PC]
valC M4[PC+1]
valP PC+5
Fetch
Decode
Cnd Cond(CC,ifun)Execute
Memory
Write
back
PC Cnd ? valC : valPPC update
22
Stage Computation: call
Seoul National University
call Dest
icode:ifun M1[PC]
valC M4[PC+1]
valP PC+5
Fetch
valB R[%esp]Decode
valE valB + (-4)Execute
M4[valE] valP Memory
R[%esp] valE
Write back
PC valCPC update
23
Stage Computation: ret
Seoul National University
ret
icode:ifun M1[PC]
Fetch
valA R[%esp]
valB R[%esp]Decode
valE valB + 4Execute
valM M4[valA] Memory
R[%esp] valE
Write back
PC valMPC update
valP PC+1
24
Stage Computation (More Structured)
Seoul National University
All instructions follow the same general pattern Differ in what gets computed during each step
OPl rA, rB
icode:ifun M1[PC]
rA:rB M1[PC+1]
valP PC+2
Fetch
Read instruction byte
Read register byte
[Read constant word]
Compute next PC
valA R[rA]
valB R[rB]Decode
Read operand A
Read operand B
valE valB OP valA
Set CCExecute
Perform ALU operation
Set condition code register
Memory [Memory read/write]
R[rB] valE
Write back
Write back ALU result
[Write back memory result] PC valPPC update Update PC
icode,ifun
rA,rB
valC
valP
valA, srcA
valB, srcB
valE
Cond code
valM
dstE
dstM
PC
25
Stage Computation (More Structured)
Seoul National University
All instructions follow the same general pattern Differ in what gets computed during each step
call Dest
Fetch
Decode
Execute
Memory
Write back
PC update
icode,ifun
rA,rB
valC
valP
valA, srcA
valB, srcB
valE
Cond code
valM
dstE
dstM
PC
icode:ifun M1[PC]
valC M4[PC+1]
valP PC+5
valB R[%esp]
valE valB + (-4)
M4[valE] valP
R[%esp] valE
PC valC
Read instruction byte
[Read register byte]
Read constant word
Compute next PC
[Read operand A]
Read operand B
Perform ALU operation
[Set condition code reg.]
[Memory read/write]
[Write back ALU result]
Write back memory result
Update PC
26
Computed Values
Seoul National University
Fetchicode Instruction codeifun Instruction functionrA Instr. Register ArB Instr. Register BvalC Instruction constantvalP Incremented PC
DecodesrcA Register ID AsrcB Register ID BdstE Destination Register EdstM Destination Register MvalA Register value AvalB Register value B
Execute valE ALU result Cnd Branch/move
flag Memory
valM Value from memory
27
SEQ Hardware
Seoul National University
Key Blue boxes : predesigned hardware
blocks E.g., memories, ALU
Gray boxes : control logic Described in HCL
White ovals : labels for signals
Thick lines : 32-bit word values
Thin lines : 4-8 bit values
Dotted lines : 1-bit values
28
Fetch Logic #1
Seoul National University
Instructionmemory
Instructionmemory
PCincrement
PCincrement
rBicode ifun rA
PC
valC valP
Needregids
NeedvalC
Instrvalid
AlignAlignSplitSplitBytes 1-5Byte 0
imem_error
icode ifun
Predefined Blocks PC : Register containing PC Instruction memory : Read 6
bytes (PC to PC+5) Signal invalid address
Split : Divide instruction byte into icode and ifun
Align : Get fields for rA, rB, and valC
29
Control Logic Instr. Valid
Is this instruction valid? icode, ifun
Generate no-op if invalid address
Need regids Does this instruction have
a register byte? Need valC
Does this instruction have a constant word?
Fetch Logic #2
Seoul National University
Instructionmemory
Instructionmemory
PCincrement
PCincrement
rBicode ifun rA
PC
valC valP
Needregids
NeedvalC
Instrvalid
AlignAlignSplitSplitBytes 1-5Byte 0
imem_error
icode ifun
30
Fetch Control Logic in HCL
Seoul National University
# Determine instruction codeint icode = [
imem_error: INOP;1: imem_icode;
];
# Determine instruction functionint ifun = [
imem_error: FNONE;1: imem_ifun;
];
Instructionmemory
Instructionmemory
PC
SplitSplit
Byte 0
imem_error
icode ifun
31
Fetch Control Logic in HCL
Seoul National University
pushl rA A 0 rA 8
jXX Dest 7 fn Dest
popl rA B 0 rA 8
call Dest 8 0 Dest
cmovXX rA, rB 2 fn rA rB
irmovl V, rB 3 0 8 rB V
rmmovl rA, D(rB) 4 0 rA rB D
mrmovl D(rB), rA 5 0 rA rB D
OPl rA, rB 6 fn rA rB
ret 9 0
nop 1 0
halt 0 0
bool need_regids =icode in { IRRMOVL, IOPL, IPUSHL, IPOPL,
IIRMOVL, IRMMOVL, IMRMOVL };
bool instr_valid = icode in {IHALT, INOP, IRRMOVL, IIRMOVL, IRMMOVL, IMRMOVL, IOPL, IJXX, ICALL, IRET, IPUSHL, IPOPL };
32
Decode Logic
Seoul National University
Register File Read ports A, B Write ports E, M Addresses are register IDs or 15 (0xF)
(no access)
rB
dstE dstM srcA srcB
Registerfile
Registerfile
A BM
EdstE dstM srcA srcB
icode rA
valBvalA valEvalMCnd
Control Logic srcA, srcB: read port addresses dstE, dstM: write port addresses
Signals Cnd: Indicate whether or not to
perform conditional move -> Computed in Execute stage
33
A Source
Seoul National University
int srcA = [icode in { IRRMOVL, IRMMOVL, IOPL, IPUSHL } : rA;icode in { IPOPL, IRET } : RESP;1 : RNONE; # Don't need register
];
valA R[rA]
valA R[rA]
valA R[rA]rrmovl rA, rB
Decode
rmmovl rA, D(rB)
pushl rA
jXX Dest
call Dest
retDecode
Decode
Decode
Decode
Decode valA R[%esp]
valA R[rA]OPl rA, rB
Decode
valE 0 + valCirmovl V, rB
Decode
mrmovl D(rB), rA Decode
valA R[%esp]popl rA
Decode
34
E Destination
Seoul National University
int dstE = [icode in { IRRMOVL } && Cnd : rB;icode in { IIRMOVL, IOPL} : rB;icode in { IPUSHL, IPOPL, ICALL, IRET } : RESP;1 : RNONE; # Don't write any register
];
R[%esp] valE
R[%esp] valE
R[rB] valErrmovl rA, rB
Write-back
rmmovl rA, D(rB)
pushl rA
jXX Dest
call Dest
retWrite-back
Write-back
Write-back
Write-back
Write-back R[%esp] valE
R[rB] valEOPl rA, rB
Write-back
valE 0 + valCirmovl V, rB
Write-back R[rB] valE
mrmovl D(rB), rA Write-back
R[%esp] valEpopl rA
Write-back
35
Execute Logic
Seoul National University
Units ALU
Implements 4 required functions Generates condition code values
CC Register with 3 condition code bits
cond Computes conditional jump/move flag
Control Logic Set CC: Should condition code register be
loaded? ALU A: Input A to ALU ALU B: Input B to ALU ALU fun: What function should ALU
compute?
CCCC ALUALU
ALUA
ALUB
ALUfun.
Cnd
icode ifun valC valBvalA
valE
SetCC
condcond
36
ALU A Input
Seoul National University
int aluA = [icode in { IRRMOVL, IOPL } : valA;icode in { IIRMOVL, IRMMOVL, IMRMOVL } : valC;icode in { ICALL, IPUSHL } : -4;icode in { IRET, IPOPL } : 4;# Other instructions don't need ALU
];
valE valB + (-4)
valE valB + (-4)
valE valB + valC
valE 0 + valArrmovl rA, rB
Execute
rmmovl rA, D(rB)
pushl rA
jXX Dest
call Dest
retExecute
Execute
Execute
Execute
Execute valE valB + 4
valE valB OP valAOPl rA, rB
Execute
valE 0 + valCirmovl V, rB
Execute
valE valB + valCmrmovl D(rB), rA
Execute
valE valB + 4popl rA
Execute
37
ALU Operation
int alufun = [icode == IOPL : ifun;1 : ALUADD;
];
valE valB + (-4)
valE valB + (-4)
valE valB + valC
valE 0 + valArrmovl rA, rB
Execute
rmmovl rA, D(rB)
pushl rA
jXX Dest
call Dest
retExecute
Execute
Execute
Execute
Execute valE valB + 4
valE valB OP valAOPl rA, rB
Execute
valE 0 + valCirmovl V, rB
Execute
valE valB + valCmrmovl D(rB), rA
Execute
valE valB + 4popl rA
Execute
38
Memory Logic
Seoul National University
Memory Reads or writes memory word
Control Logic stat: What is instruction status? Mem. read: should word be read? Mem. write: should word be
written? Mem. addr.: Select address Mem. data.: Select data
Datamemory
Datamemory
Mem.read
Mem.addr
read
write
data out
Mem.data
valE
valM
valA valP
Mem.write
data in
icode
Stat
dmem_error
instr_valid
imem_error
stat
39
Instruction Status
Seoul National University
Control Logic stat: What is instruction status?
## Determine instruction statusint Stat = [
imem_error || dmem_error : SADR;
!instr_valid: SINS;icode == IHALT : SHLT;1 : SAOK;
];
Datamemory
Datamemory
Mem.read
Mem.addr
read
write
data out
Mem.data
valE
valM
valA valP
Mem.write
data in
icode
Stat
dmem_error
instr_valid
imem_error
stat
40
Memory Address
Seoul National University
int mem_addr = [icode in { IRMMOVL, IPUSHL, ICALL, IMRMOVL } : valE;icode in { IPOPL, IRET } : valA;# Other instructions don't need address
];
M4[valE] valP
M4[valE] valA
M4[valE] valA
rrmovl rA, rBMemory
rmmovl rA, D(rB)
pushl rA
jXX Dest
call Dest
retMemory
Memory
Memory
Memory
Memory valM M4[valA]
OPl rA, rBMemory
valE 0 + valCirmovl V, rB
Memory
valM M4[valE]mrmovl D(rB), rA
Memory
valM M4[valA]popl rA
Memory
41
Memory Read
Seoul National University
bool mem_read = icode in { IMRMOVL, IPOPL, IRET };
M4[valE] valP
M4[valE] valA
M4[valE] valA
rrmovl rA, rBMemory
rmmovl rA, D(rB)
pushl rA
jXX Dest
call Dest
retMemory
Memory
Memory
Memory
Memory valM M4[valA]
OPl rA, rBMemory
valE 0 + valCirmovl V, rB
Memory
valM M4[valE]mrmovl D(rB), rA
Memory
valM M4[valA]popl rA
Memory
42
PC Update Logic
Seoul National University
New PC Select next value of PC
NewPC
Cndicode valC valPvalM
PC
43
PC Update
Seoul National University
int new_pc = [icode == ICALL : valC;icode == IJXX && Cnd : valC;icode == IRET : valM;1 : valP;
];
PC valC
PC Cnd ? valC : valP
PC valP
PC valP
PC valPrrmovl rA, rB
PC update
rmmovl rA, D(rB)
pushl rA
jXX Dest
call Dest
retPC update
PC update
PC update
PC update
PC update PC valM
PC valPOPl rA, rB
PC update
valE 0 + valCirmovl V, rB
PC update PC valP
PC valPmrmovl D(rB), rA
PC update
PC valPpopl rA
PC update
44
SEQ Operation
Seoul National University
“State” Register File Memory Program counter register (PC) Condition code register (CC)
All updated as clock rises Combinational Logic
ALU Control logic Memory reads
Instruction memory Register file Data memory
CombinationalLogic Data
memoryData
memory
Registerfile
Registerfile
PC0x00c
CCCCReadPorts
WritePorts
Read WriteRead Write
45
SEQ Operation #2
Seoul National University
0x00c: addl %edx,%ebx # %ebx <-- 0x300 CC <-- 000
0x00e: je dest # Not taken
Cycle 3:
Cycle 4:
0x006: irmovl $0x200,%edx # %edx <-- 0x200Cycle 2:
0x000: irmovl $0x100,%ebx # %ebx <-- 0x100Cycle 1:
Clock
Cycle 1 Cycle 2 Cycle 3 Cycle 4
combinational logic starting to react to state changes
CombinationalLogic Data
memoryData
memory
Registerfile
Registerfile
PC0x00c
CCCCReadPorts
WritePorts
Read WriteRead Write
0x013:
46
SEQ Operation #3
Seoul National University
0x00c: addl %edx,%ebx # %ebx <-- 0x300 CC <-- 000
0x00e: je dest # Not taken
Cycle 3:
Cycle 4:
0x006: irmovl $0x200,%edx # %edx <-- 0x200Cycle 2:
0x000: irmovl $0x100,%ebx # %ebx <-- 0x100Cycle 1:
Clock
Cycle 1 Cycle 2 Cycle 3 Cycle 4
combinational logic generates results for addl instruction
CombinationalLogic Data
memoryData
memory
Registerfile
%ebx = 0x100
Registerfile
%ebx = 0x100
PC0x00c
CC100CC100
ReadPorts
WritePorts
0x00e
000
Read WriteRead Write
0x013:
47
SEQ Operation #4
Seoul National University
0x00c: addl %edx,%ebx # %ebx <-- 0x300 CC <-- 000
0x00e: je dest # Not taken
Cycle 3:
Cycle 4:
0x006: irmovl $0x200,%edx # %edx <-- 0x200Cycle 2:
0x000: irmovl $0x100,%ebx # %ebx <-- 0x100Cycle 1:
Clock
Cycle 1 Cycle 2 Cycle 3 Cycle 4
state set according to addl instruction
combinational logic starting to react to state changes
CombinationalLogic Data
memoryData
memory
Registerfile
%ebx = 0x300
Registerfile
%ebx = 0x300
PC0x00e
CC000CC000
ReadPorts
WritePorts
Read WriteRead Write
0x013:
48
SEQ Operation #5
Seoul National University
0x00c: addl %edx,%ebx # %ebx <-- 0x300 CC <-- 000
0x00e: je dest # Not taken
Cycle 3:
Cycle 4:
0x006: irmovl $0x200,%edx # %edx <-- 0x200Cycle 2:
0x000: irmovl $0x100,%ebx # %ebx <-- 0x100Cycle 1:
Clock
Cycle 1 Cycle 2 Cycle 3 Cycle 4
combinational logic generates results for je instruction
CombinationalLogic Data
memoryData
memory
Registerfile
%ebx = 0x300
Registerfile
%ebx = 0x300
PC0x00e
CC000CC000
ReadPorts
WritePorts
0x013
CombinationalLogic Data
memoryData
memory
Registerfile
%ebx = 0x300
Registerfile
%ebx = 0x300
PC0x00e
CC000CC000
ReadPorts
WritePorts
0x013
Read WriteRead Write
0x013:
49
SEQ Summary
Seoul National University
Implementation Express every instruction as a series of simple steps Follow the same general flow for each instruction type Assemble registers, memories, predesigned combinational blocks Connect with control logic
Limitations Too slow to be practical In one cycle, must propagate through instruction memory, register file,
ALU, and data memory Would need to run clock very slowly Hardware units only active for fraction of clock cycle