seoul national university

49
1 Seoul National University Sequential Implementation

Upload: macon-park

Post on 31-Dec-2015

32 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

1

Seoul National University

Sequential Implementation

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