SEQ part 2 1 Changelog Changes made in this version not seen in - - PowerPoint PPT Presentation

seq part 2
SMART_READER_LITE
LIVE PREVIEW

SEQ part 2 1 Changelog Changes made in this version not seen in - - PowerPoint PPT Presentation

SEQ part 2 1 Changelog Changes made in this version not seen in fjrst lecture: 19 September 2017: slide 18: send R[srcB] to ALU instead of R[srcA] 19 September 2017: slide 27: set register fjle write register number, not write enable 1 last


slide-1
SLIDE 1

SEQ part 2

1

slide-2
SLIDE 2

Changelog

Changes made in this version not seen in fjrst lecture:

19 September 2017: slide 18: send R[srcB] to ALU instead of R[srcA] 19 September 2017: slide 27: set register fjle write register number, not write enable

1

slide-3
SLIDE 3

last time

arithmetic right shift — copy the sign bit register, register fjle, memories

read continuously (possibly based on address/register number) write on rising edge of clock signal

muxes to make decisions

e.g. PC + 1 (nop) or address read from memory (jmp)?

for now: fjt all work of instruction within clock cycle

5

slide-4
SLIDE 4

a correction

last time I said arithmetic right shift is sra on x86

  • n some other architectures (e.g. MIPS), but not on x86

the correct mnemonic is sar note: if we ever use shift instructions on a test, we will tell you what they are

(don’t bother memorizing their mnemonics)

6

slide-5
SLIDE 5

arithmetic right shift

logical right shift — add zeroes 1011000 → 0101100 arithmetic right shift — copy sign bit 1011000 → 1101100 (x >> 1) ≈ x / 2 even for signed (x >> 2) ≈ x / 4 even for signed (x >> 3) ≈ x / 8 even for signed

((-56) >> 3) == -7 (arithmetic: 11001000 → 11111001) (((unsigned char)200) >> 3) == 25 (logical: 11001000 → 00011001)

7

slide-6
SLIDE 6

anonymous feedback (1)

“How on earth do you except us to answer a similar question on the quiz as the fjnal example during class, to which you gave a half-explained answer? …” (paraphrased:) and your explanation didn’t give a yes/no answer to yes/no questions

8

slide-7
SLIDE 7

the question last week

nop+add — where do we need a MUX (or similar logic)? register to read — no; read and ignore result on nop

but ‘cleaner’ to specify no register explicitly??

PC input — yes; need to handle instruction length register #/value to write — yes (either one); don’t change register

  • n nop

register number for “none” (15) or new value = old value

instruction memory address — no; always equal to PC output

9

slide-8
SLIDE 8

the question this week

jmp+addq+mrmovq read reg. # — no; read and ignore for jmp PC input — yes; varibale instruction length, jumps write reg. # — need MUX on this or register value input write enable for memory — no; hard-wire to false address input to instruction memory — no; equal to PC output ALU inputs — yes; mrmovq needs to add constant from instruction

10

slide-9
SLIDE 9

anonymous feedback (2)

(paraphrased) the question on timing on the post-quiz was unfair since it was in next week’s textbook material intention: how addq CPU + register fjle + registers worked (but, yes, easier if you had read ahead)

11

slide-10
SLIDE 10

anonymous feedback (3)

(paraphrased) competition scoreboard for bomb HW was intimidating/demoralizing competitions make some of our students learn more I like it better than extra credit because it’s more optional But better ways of making it feel optional?

really should be no obligation to do more than assignment says

12

slide-11
SLIDE 11

anonymous feedback (4)

(paraphrased) you should drop any question most students get wrong on the quizzes I think this policy would create some perverse incentives

13

slide-12
SLIDE 12

anonymous feedback (4)

(paraphrased) please check your slides more carefully

14

slide-13
SLIDE 13

lists HW

due tommorrow hopefully you’ve started — don’t fjght segfaults at the last minute

15

slide-14
SLIDE 14

bit puzzles lab/HW

bit fjddling problems, e.g. isLessThanOrEqual all in C restrictions on operators you can use lab — practice problems, complete what you can

N.B.: you can work together uneven diffjculty; don’t expect anyone to do all of them

homework — difgerent problems, complete all

16

slide-15
SLIDE 15

simple ISA 4: mov-to-register

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

17

slide-16
SLIDE 16

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

18

slide-17
SLIDE 17

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

18

slide-18
SLIDE 18

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

18

slide-19
SLIDE 19

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

18

slide-20
SLIDE 20

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

18

slide-21
SLIDE 21

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

18

slide-22
SLIDE 22

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

18

slide-23
SLIDE 23

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

18

slide-24
SLIDE 24

simple ISA 4B: mov

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

19

slide-25
SLIDE 25

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

20

slide-26
SLIDE 26

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

20

slide-27
SLIDE 27

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

20

slide-28
SLIDE 28

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

21

slide-29
SLIDE 29

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

21

slide-30
SLIDE 30

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

22

slide-31
SLIDE 31

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

23

slide-32
SLIDE 32

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

24

slide-33
SLIDE 33

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

24

slide-34
SLIDE 34

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

24

slide-35
SLIDE 35

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

24

slide-36
SLIDE 36

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

25

slide-37
SLIDE 37

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

25

slide-38
SLIDE 38

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

25

slide-39
SLIDE 39

jmp+nop CPU

PC

Instr. Mem.

register fjle

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

Data Mem.

ZF/SF

split

MUX

1 if jmp 0 if nop

  • pcode

dest

+ 1 (nop size)

nop 1 jmp Dest 7 Dest

nop jmp dest 1 icode valC valP PC not in listing

26

slide-40
SLIDE 40

jmp+nop CPU

PC

Instr. Mem.

register fjle

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

Data Mem.

ZF/SF

split

MUX

1 if jmp 0 if nop

  • pcode

dest

+ 1 (nop size)

nop 1 jmp Dest 7 Dest

nop jmp dest 1 icode valC valP PC not in listing

26

slide-41
SLIDE 41

stages example: rmmovq/mrmovq

stage rmmovq rA, D(rB) mrmovq D(rB), rA fetch icode : ifun ← M1[PC] valP ← PC + 10 valC ← M8[PC + 2] icode : ifun ← M1[PC] 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 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 reigster number

27

slide-42
SLIDE 42

stages example: rmmovq/mrmovq

stage rmmovq rA, D(rB) mrmovq D(rB), rA fetch icode : ifun ← M1[PC] valP ← PC + 10 valC ← M8[PC + 2] icode : ifun ← M1[PC] 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 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 reigster number

27

slide-43
SLIDE 43

stages example: rmmovq/mrmovq

stage rmmovq rA, D(rB) mrmovq D(rB), rA fetch icode : ifun ← M1[PC] valP ← PC + 10 valC ← M8[PC + 2] icode : ifun ← M1[PC] 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 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 reigster number

27

slide-44
SLIDE 44

stages example: rmmovq/mrmovq

stage rmmovq rA, D(rB) mrmovq D(rB), rA fetch icode : ifun ← M1[PC] valP ← PC + 10 valC ← M8[PC + 2] icode : ifun ← M1[PC] 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 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 reigster number

27

slide-45
SLIDE 45

stages example: rmmovq/mrmovq

stage rmmovq rA, D(rB) mrmovq D(rB), rA fetch icode : ifun ← M1[PC] valP ← PC + 10 valC ← M8[PC + 2] icode : ifun ← M1[PC] 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 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 reigster number

27

slide-46
SLIDE 46

stages example: rmmovq/mrmovq

stage rmmovq rA, D(rB) mrmovq D(rB), rA fetch icode : ifun ← M1[PC] valP ← PC + 10 valC ← M8[PC + 2] icode : ifun ← M1[PC] 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 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 reigster number

27

slide-47
SLIDE 47

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

28

slide-48
SLIDE 48

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

28

slide-49
SLIDE 49

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

28

slide-50
SLIDE 50

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.

29

slide-51
SLIDE 51

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)

30

slide-52
SLIDE 52

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

31

slide-53
SLIDE 53

SEQ: instruction “decode”

read registers

valA, valB — register values

32

slide-54
SLIDE 54

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

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

33

slide-55
SLIDE 55

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

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

33

slide-56
SLIDE 56

SEQ: srcA, srcB

always read rA, rB? Problems:

push rA pop call ret

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

34

slide-57
SLIDE 57

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

35

slide-58
SLIDE 58

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

35

slide-59
SLIDE 59

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

36

slide-60
SLIDE 60

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

37

slide-61
SLIDE 61

using condition codes: cmov*

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

cc

(from instr) rB 0xF dstE

NOT

38

slide-62
SLIDE 62

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

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

39

slide-63
SLIDE 63

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

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

39

slide-64
SLIDE 64

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

40

slide-65
SLIDE 65

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

41

slide-66
SLIDE 66

SEQ: Memory

read or write data memory

valM — value read from memory (if any)

42

slide-67
SLIDE 67

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

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

43

slide-68
SLIDE 68

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

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

43

slide-69
SLIDE 69

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 valB tricky cases: call, push

44

slide-70
SLIDE 70

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

45

slide-71
SLIDE 71

SEQ: write back

write registers

46

slide-72
SLIDE 72

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

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

47

slide-73
SLIDE 73

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

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

47

slide-74
SLIDE 74

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

48

slide-75
SLIDE 75

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

49

slide-76
SLIDE 76

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

50

slide-77
SLIDE 77

SEQ: Update PC

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

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

51

slide-78
SLIDE 78

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 instr. length + valP

52

slide-79
SLIDE 79

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 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?

53

slide-80
SLIDE 80

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 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?

53

slide-81
SLIDE 81

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 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?

53

slide-82
SLIDE 82

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 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?

53

slide-83
SLIDE 83

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 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?

53

slide-84
SLIDE 84

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 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?

53

slide-85
SLIDE 85

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 rA rB

ALU

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

  • f instr.)

write? function

  • f opcode

PC + 10 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?

53

slide-86
SLIDE 86

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

54