SEQ part 3 Samira Khan The slides are prepared by Charles Reiss 1 - - PowerPoint PPT Presentation

seq part 3
SMART_READER_LITE
LIVE PREVIEW

SEQ part 3 Samira Khan The slides are prepared by Charles Reiss 1 - - PowerPoint PPT Presentation

SEQ part 3 Samira Khan The slides are prepared by Charles Reiss 1 Review each instruction takes one cycle send new values to state components 2 read values from previous cycle control what is sent with MUXes simple ISA 4: mov-to-register


slide-1
SLIDE 1

SEQ part 3

Samira Khan The slides are prepared by Charles Reiss

1

slide-2
SLIDE 2

Review

each instruction takes one cycle read values from previous cycle send new values to state components control what is sent with MUXes

2

slide-3
SLIDE 3

simple ISA 4: mov-to-register

irmovq $constant, %rYY rrmovq %rXX, %rYY mrmovq 10(%rXX), %rYY

3

slide-4
SLIDE 4

mov-to-register CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate + (ALU) +2 +10

rrmovq rA, rB 2 0 rA rB irmovq V, rB 3 F rB mrmovq D(rB), rA 5 0 rA rB V D

4

slide-5
SLIDE 5

mov-to-register CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate + (ALU) +2 +10

rrmovq rA, rB 2 0 rA rB irmovq V, rB 3 F rB mrmovq D(rB), rA 5 0 rA rB V D

4

slide-6
SLIDE 6

mov-to-register CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate + (ALU) +2 +10

rrmovq rA, rB 2 0 rA rB irmovq V, rB 3 F rB mrmovq D(rB), rA 5 0 rA rB V D

4

slide-7
SLIDE 7

mov-to-register CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate + (ALU) +2 +10

rrmovq rA, rB 2 0 rA rB irmovq V, rB 3 F rB mrmovq D(rB), rA 5 0 rA rB V D

4

slide-8
SLIDE 8

mov-to-register CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate + (ALU) +2 +10

rrmovq rA, rB 2 0 rA rB irmovq V, rB 3 F rB mrmovq D(rB), rA 5 0 rA rB V D

4

slide-9
SLIDE 9

mov-to-register CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate + (ALU) +2 +10

rrmovq rA, rB 2 0 rA rB irmovq V, rB 3 F rB mrmovq D(rB), rA 5 0 rA rB V D

4

slide-10
SLIDE 10

mov-to-register CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate + (ALU) +2 +10

rrmovq rA, rB 2 0 rA rB irmovq V, rB 3 F rB mrmovq D(rB), rA 5 0 rA rB V D

4

slide-11
SLIDE 11

mov-to-register CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate + (ALU) +2 +10

rrmovq rA, rB 2 0 rA rB irmovq V, rB 3 F rB mrmovq D(rB), rA 5 0 rA rB V D

4

slide-12
SLIDE 12

simple ISA 4B: mov

irmovq $constant, %rYY rrmovq %rXX, %rYY mrmovq 10(%rXX), %rYY rmmovq %rXX, 10(%rYY)

5

slide-13
SLIDE 13

mov CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate immediate + +2 +10

0xF

write enable

from convert opcode

rrmovq rA, rB 2 0 rA rB irmovq V, rB 3 F rB mrmovq D(rB), rA 5 0 rA rB rmmovq rA, D(rB) 4 0 rA rB V D D

valP valC valB valA valE valM

6

slide-14
SLIDE 14

mov CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate immediate + +2 +10

0xF

write enable

from convert opcode

rrmovq rA, rB 2 0 rA rB irmovq V, rB 3 F rB mrmovq D(rB), rA 5 0 rA rB rmmovq rA, D(rB) 4 0 rA rB V D D

valP valC valB valA valE valM

6

slide-15
SLIDE 15

mov CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate immediate + +2 +10

0xF

write enable

from convert opcode

rrmovq rA, rB 2 0 rA rB irmovq V, rB 3 F rB mrmovq D(rB), rA 5 0 rA rB rmmovq rA, D(rB) 4 0 rA rB V D D

valP valC valB valA valE valM

6

slide-16
SLIDE 16

mov CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate immediate + (ALU) +2 +10

0xF

write enable

from convert opcode

fetch decode execute memory writeback PC update

7

slide-17
SLIDE 17

mov CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate immediate + (ALU) +2 +10

0xF

write enable

from convert opcode

fetch decode execute memory writeback PC update

7

slide-18
SLIDE 18

mov CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate immediate + (ALU) +2 +10

0xF

write enable

from convert opcode

fetch decode execute memory writeback PC update

7

slide-19
SLIDE 19

Stages

conceptual division of instruction: fetch — read instruction memory, split instruction, compute length decode — read register fjle execute — arithmetic (including of addresses) memory — read or write data memory write back — write to register fjle PC update — compute next value of PC

8

slide-20
SLIDE 20

stages and time

fetch / decode / execute / memory / write back / PC update

Order when these events happen pushq %rax instruction:

  • 1. instruction read
  • 2. memory changes
  • 3. %rsp changes
  • 4. PC changes

Hint: recall how registers, register fjles, memory works a. 1; then 2, 3, and 4 in any order b. 1; then 2, 3, and 4 at almost the same time c. 1; then 2; then 3; then 4 d. 1; then 3; then 2; then 4 e. 1; then 2; then 3 and 4 at almost the same time f. something else

9

slide-21
SLIDE 21

stages example: nop

stage nop fetch icode : ifun ← M1[PC] valP ← PC + 1 decode memory write back PC update PC ← valP

part of output wires from instruction memory name of a wire ← means putting a value on a wire ← means putting value on input wire to PC register

10

slide-22
SLIDE 22

stages example: nop

stage nop fetch icode : ifun ← M1[PC] valP ← PC + 1 decode memory write back PC update PC ← valP

part of output wires from instruction memory name of a wire ← means putting a value on a wire ← means putting value on input wire to PC register

10

slide-23
SLIDE 23

stages example: nop

stage nop fetch icode : ifun ← M1[PC] valP ← PC + 1 decode memory write back PC update PC ← valP

part of output wires from instruction memory name of a wire ← means putting a value on a wire ← means putting value on input wire to PC register

10

slide-24
SLIDE 24

stages example: nop

stage nop fetch icode : ifun ← M1[PC] valP ← PC + 1 decode memory write back PC update PC ← valP

part of output wires from instruction memory name of a wire ← means putting a value on a wire ← means putting value on input wire to PC register

10

slide-25
SLIDE 25

stages example: nop/jmp

stage nop jmp dest fetch icode : ifun ← M1[PC] valP ← PC + 1 icode : ifun ← M1[PC] valC ← M8[PC + 1] decode memory write back PC update PC ← valP PC ← valC PC

MUX

valC valP

11

slide-26
SLIDE 26

stages example: nop/jmp

stage nop jmp dest fetch icode : ifun ← M1[PC] valP ← PC + 1 icode : ifun ← M1[PC] valC ← M8[PC + 1] decode memory write back PC update PC ← valP PC ← valC PC

MUX

valC valP

11

slide-27
SLIDE 27

stages example: nop/jmp

stage nop jmp dest fetch icode : ifun ← M1[PC] valP ← PC + 1 icode : ifun ← M1[PC] valC ← M8[PC + 1] decode memory write back PC update PC ← valP PC ← valC PC

MUX

valC valP

11

slide-28
SLIDE 28

stages example: rmmovq/mrmovq

stage rmmovq rA, D(rB) mrmovq D(rB), rA fetch icode : ifun ← M1[PC] rA : rB ← M1[PC + 1] valP ← PC + 10 valC ← M8[PC + 2] icode : ifun ← M1[PC] rA : rB ← M1[PC + 1] valP ← PC + 10 valC ← M8[PC + 2] decode valA ← R[rA] valB ← R[rB] valB ← R[rB] execute valE ← valB + valC valE ← valB + valC memory M8[valE] ← valA valM ← M8[valE] write back R[rA] ← valM PC update PC ← valP PC ← valP

assignment means: setting register number input to register fjle and naming output wires of register fjle reading R[rA] not needed but would be harmless assignment means: setting address wires to valE and setting value input wires to valA and setting memory write enable to 1 assignment means: setting address wires to valE and naming the output of the data memory assignment means: setting register fjle input wires to valM setting register fjle write register number

12

slide-29
SLIDE 29

stages example: rmmovq/mrmovq

stage rmmovq rA, D(rB) mrmovq D(rB), rA fetch icode : ifun ← M1[PC] rA : rB ← M1[PC + 1] valP ← PC + 10 valC ← M8[PC + 2] icode : ifun ← M1[PC] rA : rB ← M1[PC + 1] valP ← PC + 10 valC ← M8[PC + 2] decode valA ← R[rA] valB ← R[rB] valB ← R[rB] execute valE ← valB + valC valE ← valB + valC memory M8[valE] ← valA valM ← M8[valE] write back R[rA] ← valM PC update PC ← valP PC ← valP

assignment means: setting register number input to register fjle and naming output wires of register fjle reading R[rA] not needed but would be harmless assignment means: setting address wires to valE and setting value input wires to valA and setting memory write enable to 1 assignment means: setting address wires to valE and naming the output of the data memory assignment means: setting register fjle input wires to valM setting register fjle write register number

12

slide-30
SLIDE 30

stages example: rmmovq/mrmovq

stage rmmovq rA, D(rB) mrmovq D(rB), rA fetch icode : ifun ← M1[PC] rA : rB ← M1[PC + 1] valP ← PC + 10 valC ← M8[PC + 2] icode : ifun ← M1[PC] rA : rB ← M1[PC + 1] valP ← PC + 10 valC ← M8[PC + 2] decode valA ← R[rA] valB ← R[rB] valB ← R[rB] execute valE ← valB + valC valE ← valB + valC memory M8[valE] ← valA valM ← M8[valE] write back R[rA] ← valM PC update PC ← valP PC ← valP

assignment means: setting register number input to register fjle and naming output wires of register fjle reading R[rA] not needed but would be harmless assignment means: setting address wires to valE and setting value input wires to valA and setting memory write enable to 1 assignment means: setting address wires to valE and naming the output of the data memory assignment means: setting register fjle input wires to valM setting register fjle write register number

12

slide-31
SLIDE 31

stages example: rmmovq/mrmovq

stage rmmovq rA, D(rB) mrmovq D(rB), rA fetch icode : ifun ← M1[PC] rA : rB ← M1[PC + 1] valP ← PC + 10 valC ← M8[PC + 2] icode : ifun ← M1[PC] rA : rB ← M1[PC + 1] valP ← PC + 10 valC ← M8[PC + 2] decode valA ← R[rA] valB ← R[rB] valB ← R[rB] execute valE ← valB + valC valE ← valB + valC memory M8[valE] ← valA valM ← M8[valE] write back R[rA] ← valM PC update PC ← valP PC ← valP

assignment means: setting register number input to register fjle and naming output wires of register fjle reading R[rA] not needed but would be harmless assignment means: setting address wires to valE and setting value input wires to valA and setting memory write enable to 1 assignment means: setting address wires to valE and naming the output of the data memory assignment means: setting register fjle input wires to valM setting register fjle write register number

12

slide-32
SLIDE 32

stages example: rmmovq/mrmovq

stage rmmovq rA, D(rB) mrmovq D(rB), rA fetch icode : ifun ← M1[PC] rA : rB ← M1[PC + 1] valP ← PC + 10 valC ← M8[PC + 2] icode : ifun ← M1[PC] rA : rB ← M1[PC + 1] valP ← PC + 10 valC ← M8[PC + 2] decode valA ← R[rA] valB ← R[rB] valB ← R[rB] execute valE ← valB + valC valE ← valB + valC memory M8[valE] ← valA valM ← M8[valE] write back R[rA] ← valM PC update PC ← valP PC ← valP

assignment means: setting register number input to register fjle and naming output wires of register fjle reading R[rA] not needed but would be harmless assignment means: setting address wires to valE and setting value input wires to valA and setting memory write enable to 1 assignment means: setting address wires to valE and naming the output of the data memory assignment means: setting register fjle input wires to valM setting register fjle write register number

12

slide-33
SLIDE 33

stages example: rmmovq/mrmovq

stage rmmovq rA, D(rB) mrmovq D(rB), rA fetch icode : ifun ← M1[PC] rA : rB ← M1[PC + 1] valP ← PC + 10 valC ← M8[PC + 2] icode : ifun ← M1[PC] rA : rB ← M1[PC + 1] valP ← PC + 10 valC ← M8[PC + 2] decode valA ← R[rA] valB ← R[rB] valB ← R[rB] execute valE ← valB + valC valE ← valB + valC memory M8[valE] ← valA valM ← M8[valE] write back R[rA] ← valM PC update PC ← valP PC ← valP

assignment means: setting register number input to register fjle and naming output wires of register fjle reading R[rA] not needed but would be harmless assignment means: setting address wires to valE and setting value input wires to valA and setting memory write enable to 1 assignment means: setting address wires to valE and naming the output of the data memory assignment means: setting register fjle input wires to valM setting register fjle write register number

12

slide-34
SLIDE 34

mov CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate immediate + +2 +10

0xF

write enable

from convert opcode

rrmovq rA, rB 2 0 rA rB irmovq V, rB 3 F rB mrmovq D(rB), rA 5 0 rA rB rmmovq rA, D(rB) 4 0 rA rB V D D

valP valC valB valA valE valM

13

slide-35
SLIDE 35

mov CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate immediate + +2 +10

0xF

write enable

from convert opcode

rrmovq rA, rB 2 0 rA rB irmovq V, rB 3 F rB mrmovq D(rB), rA 5 0 rA rB rmmovq rA, D(rB) 4 0 rA rB V D D

valP valC valB valA valE valM

13

slide-36
SLIDE 36

mov CPU

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

split

MUX

convert

  • pcode

immediate immediate + +2 +10

0xF

write enable

from convert opcode

rrmovq rA, rB 2 0 rA rB irmovq V, rB 3 F rB mrmovq D(rB), rA 5 0 rA rB rmmovq rA, D(rB) 4 0 rA rB V D D

valP valC valB valA valE valM

13

slide-37
SLIDE 37

data path versus control path

data path — signals carrying “actual data” control path — signals that control MUXes, etc.

fuzzy line: e.g. are condition codes part of control path?

we will often omit parts of the control path in drawings, etc.

14

slide-38
SLIDE 38

SEQ: instruction fetch

read instruction memory at PC split into seperate wires:

icode:ifun — opcode rA, rB — register numbers valC — call target or mov displacement

compute next instruction address:

valP — PC + (instr length)

15

slide-39
SLIDE 39

instruction fetch

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

16

slide-40
SLIDE 40

SEQ: instruction “decode”

read registers

valA, valB — register values

17

slide-41
SLIDE 41

instruction decode (1)

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

exercise: which of these instructions can this not work for? nop, addq, mrmovq, popq, call,

18

slide-42
SLIDE 42

instruction decode (1)

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

exercise: which of these instructions can this not work for? nop, addq, mrmovq, popq, call,

18

slide-43
SLIDE 43

SEQ: srcA, srcB

always read rA, rB? Problems:

push rA pop call ret

extra signals: srcA, srcB — computed input register MUX controlled by icode

19

slide-44
SLIDE 44

SEQ: possible registers to read

instruction srcA srcB halt, nop, jCC, irmovq none none cmovCC, rrmovq rA none mrmovq none rB rmmovq, OPq rA rB call, ret none? %rsp pushq, popq rA %rsp MUX srcB

rB %rsp

(none)

F

logic function icode

20

slide-45
SLIDE 45

SEQ: possible registers to read

instruction srcA srcB halt, nop, jCC, irmovq none none cmovCC, rrmovq rA none mrmovq none rB rmmovq, OPq rA rB call, ret none? %rsp pushq, popq rA %rsp MUX srcB

rB %rsp

(none)

F

logic function icode

20

slide-46
SLIDE 46

instruction decode (2)

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

21

slide-47
SLIDE 47

SEQ: execute

perform ALU operation (add, sub, xor, and)

valE — ALU output

read prior condition codes

Cnd — condition codes based on ifun (instruction type for jCC/cmovCC)

write new condition codes

22

slide-48
SLIDE 48

using condition codes: cmov*

(always) 1 (le) SF | ZF (l) SF

cc

(from instr) rB 0xF dstE

NOT

23

slide-49
SLIDE 49

execute (1)

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

exercise: which of these instructions can this not work for? nop, addq, mrmovq, popq, call,

24

slide-50
SLIDE 50

execute (1)

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

exercise: which of these instructions can this not work for? nop, addq, mrmovq, popq, call,

24

slide-51
SLIDE 51

SEQ: ALU operations?

ALU inputs always valA, valB (register values)? no, inputs from instruction: (Displacement + rB)

MUX

aluB

valB valC

mrmovq rmmovq

no, constants: (rsp +/- 8)

pushq popq call ret

extra signals: aluA, aluB

computed ALU input values

25

slide-52
SLIDE 52

execute (2)

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

26

slide-53
SLIDE 53

SEQ: Memory

read or write data memory

valM — value read from memory (if any)

27

slide-54
SLIDE 54

memory (1)

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

exercise: which of these instructions can this not work for? nop, rmmovq, mrmovq, popq, call,

28

slide-55
SLIDE 55

memory (1)

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

exercise: which of these instructions can this not work for? nop, rmmovq, mrmovq, popq, call,

28

slide-56
SLIDE 56

SEQ: control signals for memory

read/write — read enable? write enable? Addr — address

mostly ALU output tricky cases: popq, ret

Data — value to write

mostly valA tricky case: call

29

slide-57
SLIDE 57

memory (2)

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

30

slide-58
SLIDE 58

SEQ: write back

write registers

31

slide-59
SLIDE 59

write back (1)

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

exercise: which of these instructions can this not work for? nop, pushq, mrmovq, popq, call,

32

slide-60
SLIDE 60

write back (1)

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

exercise: which of these instructions can this not work for? nop, pushq, mrmovq, popq, call,

32

slide-61
SLIDE 61

SEQ: control signals for WB

two write inputs — two needed by popq

valM (memory output), valE (ALU output)

two register numbers

dstM, dstE

write disable — use dummy register number 0xF

MUX

dstE

rB F %rsp

33

slide-62
SLIDE 62

write back (2a)

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

34

slide-63
SLIDE 63

write back (2b)

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

35

slide-64
SLIDE 64

SEQ: Update PC

choose value for PC next cycle (input to PC register)

usually valP (following instruction) exceptions: call, jCC, ret

36

slide-65
SLIDE 65

PC update

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF Stat

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length + valP

37

slide-66
SLIDE 66

circuit: setting MUXes

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length +

8 9

PC+2 M[PC+1]

rA=8 rB=9 R[8] R[9] aluA + aluB M[PC+2]

add

MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select when running addq %r8, %r9? MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select for rmmovq? MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select for call?

38

slide-67
SLIDE 67

circuit: setting MUXes

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length +

8 9

PC+2 M[PC+1]

rA=8 rB=9 R[8] R[9] aluA + aluB M[PC+2]

add

MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select when running addq %r8, %r9? MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select for rmmovq? MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select for call?

38

slide-68
SLIDE 68

circuit: setting MUXes

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length +

8 9

PC+2 M[PC+1]

rA=8 rB=9 R[8] R[9] aluA + aluB M[PC+2]

add

MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select when running addq %r8, %r9? MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select for rmmovq? MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select for call?

38

slide-69
SLIDE 69

circuit: setting MUXes

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length +

8 9

PC+2 M[PC+1]

rA=8 rB=9 R[8] R[9] aluA + aluB M[PC+2]

add

MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select when running addq %r8, %r9? MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select for rmmovq? MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select for call?

38

slide-70
SLIDE 70

circuit: setting MUXes

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length +

8 9

PC+2 M[PC+1]

rA=8 rB=9 R[8] R[9] aluA + aluB M[PC+2]

add

MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select when running addq %r8, %r9? MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select for rmmovq? MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select for call?

38

slide-71
SLIDE 71

circuit: setting MUXes

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length +

8 9

PC+2 M[PC+1]

rA=8 rB=9 R[8] R[9] aluA + aluB M[PC+2]

add

MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select when running addq %r8, %r9? MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select for rmmovq? MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select for call?

38

slide-72
SLIDE 72

circuit: setting MUXes

PC

Instr. Mem.

register fjle

srcA srcB R[srcA] R[srcB] dstE next R[dstE] dstM next R[dstM]

Data Mem.

ZF/SF

Data in Addr in Data out

valC

0xF 0xF %rsp %rsp 0xF 0xF %rsp rA rB

ALU

aluA aluB valE 8 add/sub xor/and (function

  • f instr.)

write? function

  • f opcode

PC+9

instr. length +

8 9

PC+2 M[PC+1]

rA=8 rB=9 R[8] R[9] aluA + aluB M[PC+2]

add

MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select when running addq %r8, %r9? MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select for rmmovq? MUXes — PC, dstM, dstE, aluA, aluB, dmemIn Exercise: what do they select for call?

38

slide-73
SLIDE 73

Summary

each instruction takes one cycle divided into stages for design convenience read values from previous cycle send new values to state components control what is sent with MUXes

39