Top Banner
Y86: Datapath Sequencial Arquitectura de Computadores Lic. em Engenharia Informática 2008/09 Luís Paulo Santos
37

Y86: Datapath Sequencial

Jan 13, 2016

Download

Documents

Lavina mathur

Y86: Datapath Sequencial. Arquitectura de Computadores Lic. em Engenharia Informática 2008/09 Luís Paulo Santos. Y86: Datapath Sequencial. 0. 1. 0. Voltage. Time. Circuitos Lógicos. Funcionam com valores discretos extraídos de um sinal contínuo Circuitos binários : - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Y86: Datapath  Sequencial

Y86:Datapath Sequencial

Arquitectura de ComputadoresLic. em Engenharia Informática

2008/09Luís Paulo Santos

Page 2: Y86: Datapath  Sequencial

Y86: Datapath Sequencial

AC – Y86: Datapath sequencial 2

Conteúdos

9 – Organização do Processador

9.1 – Conceitos Fundamentais C1

9.2 – Datapath sequencial C1

Resultados de Aprendizagem

R9.1 – Analisar e descrever organizações sequenciais de processadores elementares

C1

Page 3: Y86: Datapath  Sequencial

Circuitos Lógicos

AC – Y86: Datapath sequencial 3

– Funcionam com valores discretos extraídos de um sinal contínuo

– Circuitos binários:• Cada sinal tem o valor 0 ou 1

Voltage

Time

0 1 0

Page 4: Y86: Datapath  Sequencial

Circuitos Lógicos

Existem 2 grandes tipos de componentes ou circuitos:

• Circuitos combinatórios– Reagem continuamente a mudanças nos valores das

entradas (com um atraso de propagação)

• Circuitos sequenciais– Capazes de memorizar informação– As suas saídas só se alteram quando um sinal de

temporização (relógio ou clock) o autoriza

AC – Y86: Datapath sequencial 4

Page 5: Y86: Datapath  Sequencial

Circuitos Combinatórios: Gates

AC – Y86: Datapath sequencial 5

– As saídas são funções Booleanas das entradas– Respondem continuamente a mudanças nas entradas

• Com algum atraso

ab out

ab out a out

out = a && b out = a || b out = !a

And Or Not

Voltage

Time

a

ba && bRising Delay Falling Delay

Page 6: Y86: Datapath  Sequencial

Circuitos Combinatórios

AC – Y86: Datapath sequencial 6

• Rede Acíclica de Componentes Lógicos– Respondem continuamente a mudanças nas entradas– As saídas transformam-se (após um atraso)em funções

Booleanas das entradas

Rede Acíclica

Entradas Saídas

Page 7: Y86: Datapath  Sequencial

Circuitos combinatórios: multiplexer

AC – Y86: Datapath sequencial 7

– Selecciona palavra de entrada A ou B dependendo do sinal de controlo s

b31

s

a31

out31

b30

a30

out30

b0

a0

out0

s

B

AOutMUX

Page 8: Y86: Datapath  Sequencial

Circuitos combinatórios: ALU

AC – Y86: Datapath sequencial 8

OFZFCF

– Lógica Combinatória• Responde continuamente às entradas

– Sinais de controlo (s1,s0) seleccionam função a computar– Correspondem às 4 instruções lógico-aritméticas do Y86

– Também calcula os códigos de condição

ALU

Y

X

Se s1,s0 == 00 (0) então X + YSe s1,s0 == 01 (1) então X - YSe s1,s0 == 10 (2) então X & YSe s1,s0 == 11 (3) então X | Y

s1

A

B

s0

Page 9: Y86: Datapath  Sequencial

Circuitos Sequenciais: Registos

AC – Y86: Datapath sequencial 9

– Armazenam dados

– As saídas só variam quando o valor do sinal do clock sobe de 0 para 1

DC

Q+

DC

Q+

DC

Q+

DC

Q+

DC

Q+

DC

Q+

DC

Q+

DC

Q+

i7i6i5i4i3i2i1i0

o7

o6

o5

o4

o3

o2

o1

o0

Clock

Estrutura

0

1

Fim do ciclo:Actualizarregisto

Fim do ciclo:Actualizarregisto

Fim do ciclo:Actualizarregisto

Page 10: Y86: Datapath  Sequencial

Circuitos Sequenciais: Banco de Registos

AC – Y86: Datapath sequencial 10

– Armazena múltiplas palavras de dados (múltiplos registos)• Endereços especificam quais os registos a ler e/ou escrever• Mantem os valores dos registos: %eax, %ebx, %esp, etc.• O ID do registo serve como endereço

– ID 8 implica que não é feita leitura ou escrita– Múltiplas Portas

• Pode ler (srcA, srcB) e/ou escrever (dstW,dstM) múltiplos registos num ciclo

RegisterfileRegisterfile

A

B

W

dstWsrcA

valA

srcB

valB

valW

Portas de leitura Portas de escrita

Clock

dstM

valM

Page 11: Y86: Datapath  Sequencial

Y86: Organização Sequencial

AC – Y86: Datapath sequencial 11

• Estado– Program counter (PC)– Códigos de Condição (CC)– Banco de Registos– Memória

• Data: para escrita/leitura de dados• Instruction: para leitura de instruções

• Fluxo de Instruções– Ler instrução no endereço dado pelo PC– Processar nos vários estágios– Escrita:

– Actualizar registos genéricos– Escrever na memória de dados– Actualizar PC

Instructionmemory

Instructionmemory

PCincrement

PCincrement

CCCCALUALU

Datamemory

Datamemory

Fetch

Decode

Execute

Memory

Write back

icode, ifunrA , rB

valC

Registerfile

Registerfile

A BM

E

Registerfile

Registerfile

A BM

E

PC

valP

srcA, srcBdstA, dstB

valA, valB

aluA, aluB

Bch

valE

Addr, Data

valM

PCvalE, valM

newPC

Page 12: Y86: Datapath  Sequencial

Y86: Organização Sequencial

AC – Y86: Datapath sequencial 12

Instructionmemory

Instructionmemory

PCincrement

PCincrement

CCCCALUALU

Datamemory

Datamemory

Fetch

Decode

Execute

Memory

Write back

icode, ifunrA , rB

valC

Registerfile

Registerfile

A BM

E

Registerfile

Registerfile

A BM

E

PC

valP

srcA, srcBdstA, dstB

valA, valB

aluA, aluB

Bch

valE

Addr, Data

valM

PCvalE, valM

newPC

• Busca (Fetch)– Ler instruções da memória– icode:ifun ; rA:rB ; valC ; valP

• Descodificação (Decode)– Ler registos: valA:valB– Determina ID de regs. a alterar:

– srcA ; srcB ; dstE ; dstM

• Execução (Execute)• Calcular valor ou endereço / CC

• valE / CC (Bch )

• Memória (Memory)– Ler ou escrever dados

• valM

• Actualização (Write Back)– Escrita nos registos genéricos

• Actualização PC

Page 13: Y86: Datapath  Sequencial

AC – Y86: Datapath sequencial 13

Instructionmemory

Instructionmemory

PCincrement

PCincrement

CCCCALUALU

Datamemory

Datamemory

Fetch

Decode

Execute

Memory

Write back

icode, ifunrA , rB

valC

Registerfile

Registerfile

A BM

E

Registerfile

Registerfile

A BM

E

PC

valP

srcA, srcBdstA, dstB

valA, valB

aluA, aluB

Bch

valE

Addr, Data

valM

PCvalE, valM

newPC

Y86: Organização Sequencial

Atenção à temporização:

1. Busca (início do ciclo)

2. Descodificação

3. Execução

4. Leitura da Memória5. Escritas

TODAS as escritas ocorrem SIMULTANEAMENTE no FIM do CICLO• Escrita nos CC• Escrita na memória• Escrita nos regs. genéricos• Escrita no PC

1

2

3

4

Page 14: Y86: Datapath  Sequencial

Instrução Y86: operações lógico-aritméticas

AC – Y86: Datapath sequencial 14

•Fetch– Ler 2 bytes

icode:ifun ; rA:rB– Calcular próximo PC

valP = PC + 2

•Decode– Ler registos

valA = R[rA]valB = R[rB]

•Execute– Realizar operação

valE = valA OP valB– Códigos de condição

cc = f(valE)

•Memory– Nada a fazer

•Write back– Actualizar registo

R[rB] = valE

•PC Update– Incrementar PC

PC = valP

OPl rA, rB 6 fn rA rB

Page 15: Y86: Datapath  Sequencial

Instrução Y86: operações lógico-aritméticas

AC – Y86: Datapath sequencial 15

– Formular execução de instruções como uma sequência de passos simples

– Usar a mesma forma geral para todas as instruções

OPl rA, rB

icode:ifun M1[PC]

rA:rB M1[PC+1]

valP PC+2

Fetch

Ler byte de instrução

Ler byte dos registos

Calcular próximo PC

valA R[rA]

valB R[rB]Decode

Ler operando A

Ler operando B

valE valB OP valA

Set CCExecute

Realizar operação na ALU

Códigos de condição

Memory

R[rB] valE

Write

back

Escrever resultado

PC valPPC update Actualizar PC

Page 16: Y86: Datapath  Sequencial

Instrução Y86: irmovl

AC – Y86: Datapath sequencial 16

•Fetch– Ler 6 bytes

icode:ifun ; rA:rB ; valC– Calcular próximo PC

valP = PC + 6

•Decode– Nada a fazer

•Execute– Passar constante

valE = valC

•Memory– Nada a fazer

•Write back– Escrever registo

R[rB] = valE

•PC Update– Incrementar PC

PC = valP

irmovl V, rB 3 0 8 rB V

Page 17: Y86: Datapath  Sequencial

Instrução Y86: irmovl

AC – Y86: Datapath sequencial 17

irmovl V, rB

icode:ifun M1[PC]

rA:rB M1[PC+1]

valC M4[PC+2]

valP PC+6

Fetch

Ler byte de instrução

Ler byte de registos

Ler deslocamento

Calcular próximo PC

Decode

valE valCExecute

Passar constante

Memory

R[rB] valE

Write

back

PC valPPC update Actualizar PC

Escrever resultado

Page 18: Y86: Datapath  Sequencial

Instrução Y86: rmmovl

AC – Y86: Datapath sequencial 18

•Fetch– Ler 6 bytes

icode:ifun ; rA:rB ; valC– Calcular próximo PC

valP = PC + 6

•Decode– Ler registos

valA = R[rA]valB = R[rB]

•Execute– Calcular endereço

valE = valB + valC

•Memory– Escrever na memória

M4[valE] = valA

•Write back– Nada a fazer

•PC Update– Incrementar PC

PC = valP

rmmovl rA, D(rB) 4 0 rA rB D

Page 19: Y86: Datapath  Sequencial

Instrução Y86: rmmovl

AC – Y86: Datapath sequencial 19

rmmovl rA, D(rB)

icode:ifun M1[PC]

rA:rB M1[PC+1]

valC M4[PC+2]

valP PC+6

Fetch

Ler byte de instrução

Ler byte de registos

Ler deslocamento

Calcular próximo PC

valA R[rA]

valB R[rB]Decode

Ler operando A

Ler operando B

valE valB + valCExecute

Calcular endereço

M4[valE] valAMemory Escrever na memória

Write

back

PC valPPC update Actualizar PC

Page 20: Y86: Datapath  Sequencial

Instrução Y86: popl

AC – Y86: Datapath sequencial 20

popl rA b 0 rA 8

•Fetch– Ler 2 bytes

icode:ifun ; rA:rB– Calcular próximo PC

valP = PC + 2

•Decode– Ler registos

valA = R[%esp]valB = R[%esp]

•Execute– Calcular próximo topo da pilha

valE = valB + 4

•Memory– Ler da memória

valM = M4[valA]

•Write back– Escrever no registo

R[rA] = valMR[%esp] = valE

•PC Update– Incrementar PC

PC = valP

Page 21: Y86: Datapath  Sequencial

Instrução Y86: popl

AC – Y86: Datapath sequencial 21

– Usar ALU para incrementar stack pointer– Actualizar dois registos: rA e %esp

popl rA

icode:ifun M1[PC]

rA:rB M1[PC+1]

valP PC+2

Fetch

Ler byte de instrução

Ler byte de registo

Calcular próximo PC

valA R[%esp]

valB R[%esp]Decode

Ler stack pointer

Ler stack pointer

valE valB + 4Execute

Incrementar stack pointer

valM M4[valA]Memory Ler topo da pilha

R[%esp] valE

R[rA] valM

Write

back

Actualizar stack pointer

Escrever resultado

PC valPPC update Actualizar PC

Page 22: Y86: Datapath  Sequencial

Instrução Y86: Jump

AC – Y86: Datapath sequencial 22

jXX Dest 7 fn Dest

XX XXcontinua:

XX XXDest:

Não tomado

Tomado

•Fetch– Ler 5 bytes

icode:ifun ; valC– Calcular próximo PC

valP = PC + 5

•Decode– Nada a fazer

•Execute– Saltar ??

Bch = f(ifun, CC)

•Memory– Nada a fazer

•Write back– Nada a fazer

•PC Update– Novo valor depende de Bch

PC = (Bch ? valC : valP)

Page 23: Y86: Datapath  Sequencial

Instrução Y86: Jump

AC – Y86: Datapath sequencial 23

jxx Dest

icode:ifun M1[PC]

valC M4[PC+1]

valP PC+5

Fetch

Ler byte de instrução

Ler destino do salto (se tomado)

Calcular próximo PC (se ñ tomado)

Decode

Bch f(ifun, CC)Execute

Saltar?

MemoryWrite

back

PC (Bch ? valC : valP)PC update Actualizar PC

– Calcular ambos os endereços– Escolher destino baseado no tipo de salto e nos códigos de

condição

Page 24: Y86: Datapath  Sequencial

Instrução Y86: call

AC – Y86: Datapath sequencial 24

call Dest 8 0 Dest

XX XXreturn:

XX XXtarget:

•Fetch– Ler 5 bytes

icode:ifun ; valC– Calcular próximo PC (end. de retorno)

valP = PC + 5

•Decode– Le registo

valB = R[%esp]

•Execute– Calcular novo topo da pilha

valE = valB - 4

•Memory– Push do end. de retorno

M4[valE] = valP

•Write back– Actualizar topo da pilha

R[%esp] = valE

•PC Update– PC = valC

Page 25: Y86: Datapath  Sequencial

Instrução Y86: call

AC – Y86: Datapath sequencial 25

call Dest

icode:ifun M1[PC]

valC M4[PC+1]

valP PC+5

Fetch

Ler byte de instrução

Ler destino do salto

Calcular endereço de retorno

valB R[%esp]Decode

valE valB - 4Execute

Novo topo da pilha

M4[valE] valPMemory

R[%esp] valEWrite

back

PC valCPC update Actualizar PC

Ler addr do topo da pilha

Guardar endereço de retorno

Actualizar topo da pilha

Page 26: Y86: Datapath  Sequencial

Instrução Y86: ret

AC – Y86: Datapath sequencial 26

ret 9 0

XX XXreturn:

•Fetch– Ler 1 byte icode:ifun– Calcular próximo PC

valP = PC + 1

•Decode– Ler registo

valA = R[%esp] valB = R[%esp]

•Execute– Calcular novo topo da pilha

valE = valB + 4

•Memory– Ler end. de retorno

valM = M4[valA]

•Write back– Actualizar topo da pilha

R[%esp] = valE

•PC Update– PC = valM

Page 27: Y86: Datapath  Sequencial

Instrução Y86: ret

AC – Y86: Datapath sequencial 27

ret

icode:ifun M1[PC]

valP PC+1

Fetch

Ler byte de instrução

Calcular próximo PC

valA R[%esp]

valB R[%esp]Decode

valE valB + 4Execute

Novo topo da pilha

valM M4[valEAMemory

R[%esp] valEWrite

back

PC valMPC update Actualizar PC

Ler addr do topo da pilha

Ler endereço de retorno

Actualizar topo da pilha

Page 28: Y86: Datapath  Sequencial

Y86: Valores calculados

AC – Y86: Datapath sequencial 28

• Fetch• icode Instruction code• ifun Instruction function• rA Instr. Register A• rB Instr. Register B• valC Instruction constant• valP Incremented PC

• Decode• valA Register value A• valB Register value B

• Execute• valE ALU result• Bch Branch flag

• Memory• valM Value from

memory

Page 29: Y86: Datapath  Sequencial

Y86: SEQ

• Ovais brancas: sinais internos

• Caixas azuis: lógica sequencialescrita controlada pelo clock

• Caixas cinzentas: multiplexers

• Caixas laranja: CálculoALU e “incrementar PC”

• Caixas castanhas: controlo

• Traço grosso: 32 bits

• Traço fino: 4 bits

• Tracejado: 1 bit

AC – Y86: Datapath sequencial 29

Instructionmemory

Instructionmemory

PCincrement

PCincrement

CCCC ALUALU

Datamemory

Datamemory

NewPC

rB

ALUA

ALUB

Mem.control

Addr

read

write

ALUfun.

Fetch

Decode

Execute

Memory

Write back

data out

Registerfile

Registerfile

A BM

E

Registerfile

Registerfile

A BM

E

Bch

icode ifun rA

PC

valC valP

valBvalA

Data

valE

valM

PC

newPC

Page 30: Y86: Datapath  Sequencial

Y86: Fetch

AC – Y86: Datapath sequencial 30

Instructionmemory

Instructionmemory

PCincrement

PCincrement

rBicode ifun rA

PC

valC valP

Needregids

NeedvalC

Instrvalid

AlignAlignSplitSplit

Bytes 1-5Byte 0

• Blocos– PC: Registo– Memória Instruções:

Ler 6 bytes (PC to PC+5)– Split: Dividir byte em icode e ifun– Align: Obter rA, rB e valC

• Lógica de Controlo (sinais obtidos a partir de icode)– Instr. Valid: esta instução é válida?– Need regids: esta instrução tem os campos rA:rB?– Need valC: esta instrução tem um valor imediato?

Page 31: Y86: Datapath  Sequencial

Y86: Decode

AC – Y86: Datapath sequencial 31

rB

dstE dstM srcA srcB

Registerfile

Registerfile

A BM

EdstE dstM srcA srcB

icode rA

valBvalA valEvalM

• Banco de Registos– Ler portas A, B– Escrever portas E, M– Endereços são os IDs do registos ou

8(não aceder)

Lógica de ControloLógica de Controlo– srcA, srcB: registos a ler– dstA, dstB: registos a escrever

Page 32: Y86: Datapath  Sequencial

Y86: Execute

AC – Y86: Datapath sequencial 32

• Unidades– ALU

• Implementa 4 funções• Gera códigos de condição

– CC• Registo com 3 bits

– bcond• Calcular se o salto é tomado (Bch)

• Lógica de Controlo– Set CC: Alterar CC?– ALU A: Entrada A para ALU– ALU B: Entrada B para ALU– ALU fun: Qual a função a calcular?

CCCC ALUALU

ALUA

ALUB

ALUfun.

Bch

icode ifun valC valBvalA

valE

SetCC

bcondbcond

Page 33: Y86: Datapath  Sequencial

Y86: Memory

AC – Y86: Datapath sequencial 33

Datamemory

Datamemory

Mem.read

Memaddr

read

write

data out

Memdata

valE

valM

valA valP

Mem.write

data in

icode

• Memória– Ler ou escrever uma palavra

• Lógica de Controlo– Mem.read: leitura?– Mem.write: escrita?– Mem.addr: Selecciona addr– Mem.data: Selecciona dados

Page 34: Y86: Datapath  Sequencial

Y86: PC

AC – Y86: Datapath sequencial 34

• Novo PC– Selecciona próximo valor do PC

NewPC

Bchicode valC valPvalM

PC

OPl; XXmovl; popl ; …

jXX Dest

call Dest

ret

PC valPPC update

PC Bch ? valC : valPPC update

PC valCPC update

PC valMPC update

Page 35: Y86: Datapath  Sequencial

Y86: SEQ resumo

AC – Y86: Datapath sequencial 35

• Implementação– Cada instrução expressa como uma sequência de passos

elementares– Mesma sequência geral para todos os tipos de instruções – Identificar blocos combinatórios e sequenciais básicos– Ligar e controlar com a lógica de controlo

Page 36: Y86: Datapath  Sequencial

Y86: SEQ Limitações

AC – Y86: Datapath sequencial 36

• Em cada ciclo do relógio os sinais têm que se propagar desde o PC, memória de instruções, banco de registos, ALU e memória até aos registos de novo:– O período do relógio tem que ser suficientemente longo para

permitir esta propagação– O período do relógio é constante, logo tem que ser tão grande

quanto necessário para a instrução mais lenta– O relógio é, portanto, muito lento

• Cada unidade de hardware só está activa (é utilizada) durante uma fracção pequena do período do relógio– Logo, desperdício das verdadeiras capacidades do equipamento

Page 37: Y86: Datapath  Sequencial

Y86: SEQ+

AC – Y86: Datapath sequencial 37

Instructionmemory

Instructionmemory

PCincrement

PCincrement

CCCC ALUALU

Datamemory

Datamemory

PC

rB

ALUA

ALUB

Mem.control

Addr

read

write

ALUfun.

Fetch

Decode

Execute

Memory

Write back

data out

Registerfile

Registerfile

A BM

E

Registerfile

Registerfile

A BM

E

Bch

icode ifun rA

pBch pValM pValC pValPpIcode

PC

valC valP

valBvalA

Data

valE

valM

PC

• Estágio PC reordenado: passa a acontecer ao princípio

• Estágio PC

– Selecciona PC para a instrução actual

– Baseado nos resultados da última instrução

– Estes são guardados num registo e consistem em:pIcode; pBch; pvalM ; pvalC ; pvalP

– PC não está guardado em nenhum registo