370 likes | 498 Vues
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 :
E N D
Y86:Datapath Sequencial Arquitectura de Computadores Lic. em Engenharia Informática 2008/09 Luís Paulo Santos
0 1 0 Voltage Time Circuitos Lógicos • Funcionam com valoresdiscretosextraídos de um sinalcontínuo • Circuitosbinários: • Cadasinal tem o valor 0 ou 1
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
a && b Circuitos Combinatórios: Gates • As saídassãofunçõesBooleanas das entradas • Respondemcontinuamente a mudançasnasentradas • Com algumatraso Falling Delay Rising Delay b Voltage a Time
Rede Acíclica Entradas Saídas Circuitos Combinatórios • RedeAcíclica de ComponentesLógicos • Respondemcontinuamente a mudançasnasentradas • As saídastransformam-se (após um atraso)emfunçõesBooleanas das entradas
s b31 out31 a31 s b30 out30 MUX B Out a30 A b0 out0 a0 Circuitos combinatórios: multiplexer • Seleccionapalavra de entradaAouBdependendo do sinal de controlos
s1 Se s1,s0 == 00 (0) então X + Y Se s1,s0 == 01 (1) então X - Y Se s1,s0 == 10 (2) então X & Y Se s1,s0 == 11 (3) então X | Y Y A X B OF ZF CF A L U Circuitos combinatórios: ALU s0 • LógicaCombinatória • Respondecontinuamenteàsentradas • Sinais de controlo (s1,s0) seleccionamfunção a computar • Correspondemàs 4 instruçõeslógico-aritméticas do Y86 • Tambémcalculaoscódigos de condição
i7 D o7 Q+ C i6 D o6 Q+ C i5 D o5 Q+ C i4 D o4 Q+ C i3 D o3 Q+ C i2 D o2 Q+ C i1 D o1 Q+ C i0 D o0 Q+ C Clock Circuitos Sequenciais: Registos • Armazenam dados • As saídassóvariamquando o valor do sinal do clock sobe de 0 para 1 Estrutura 1 0 Fim do ciclo: Actualizar registo Fim do ciclo: Actualizar registo Fim do ciclo: Actualizar registo
valW valA Register file dstW srcA A Portas de leitura W Portas de escrita valB srcB B Clock Circuitos Sequenciais: Banco de Registos valM dstM • Armazenamúltiplaspalavras de dados (múltiplosregistos) • Endereçosespecificamquaisosregistos a ler e/ouescrever • Mantemosvalores dos registos: %eax, %ebx, %esp, etc. • O ID do registo serve comoendereço • ID 8 implicaquenão é feitaleituraouescrita • MúltiplasPortas • Podeler (srcA, srcB) e/ouescrever (dstW,dstM) múltiplosregistos num ciclo
newPC Y86: Organização Sequencial PC valE , valM Write back valM • Estado • Program counter (PC) • Códigos de Condição (CC) • Banco de Registos • Memória • Data: paraescrita/leitura de dados • Instruction: paraleitura de instruções • Fluxo de Instruções • Lerinstrução no endereço dado pelo PC • Processarnosváriosestágios • Escrita: • Actualizarregistosgenéricos • Escrevernamemória de dados • Actualizar PC Data Data Memory memory memory Addr , Data valE CC CC ALU ALU Execute Bch aluA , aluB valA , valB srcA , srcB Decode A A B B dstA , dstB M M Register Register Register Register file file file file E E icode , ifun valP rA , rB valC Instruction PC Instruction PC memory increment Fetch memory increment PC
newPC Y86: Organização Sequencial PC valE , valM Write back valM • Busca (Fetch) • Lerinstruções da memória • icode:ifun ; rA:rB ; valC ; valP • Descodificação(Decode) • Lerregistos: valA:valB • Determina ID de regs. a alterar: • srcA ; srcB ; dstE ; dstM • Execução (Execute) • Calcular valor ouendereço / CC • valE / CC (Bch ) • Memória (Memory) • Lerouescrever dados • valM • Actualização (Write Back) • Escritanosregistosgenéricos • Actualização PC Data Data Memory memory memory Addr , Data valE CC CC ALU ALU Execute Bch aluA , aluB valA , valB srcA , srcB Decode A A B B dstA , dstB M M Register Register Register Register file file file file E E icode , ifun valP rA , rB valC Instruction PC Instruction PC memory increment Fetch memory increment PC
newPC Y86: Organização Sequencial PC valE , valM Write back valM • Atenção à temporização: • Busca (início do ciclo) • Descodificação • Execução • Leitura da Memória • EscritasTODAS as escritasocorremsimultaneamente no FIM do CICLO • Escritanos CC • Escritanamemória • Escritanosregs. genéricos • Escrita no PC Data Data Memory memory memory Addr , Data valE CC CC ALU ALU Execute Bch aluA , aluB valA , valB srcA , srcB Decode A A B B dstA , dstB M M Register Register Register Register file file file file E E icode , ifun valP rA , rB valC 4 3 1 2 Instruction PC Instruction PC memory increment Fetch memory increment PC
OPl rA, rB 6 fn rA rB Instrução Y86: operações lógico-aritméticas • Fetch • Ler 2 bytesicode:ifun ; rA:rB • Calcularpróximo PCvalP = PC + 2 • Decode • LerregistosvalA = R[rA]valB = R[rB] • Execute • RealizaroperaçãovalE = valA OP valB • Códigos de condiçãocc = f(valE) • Memory • Nada a fazer • Write back • ActualizarregistoR[rB] = valE • PC Update • Incrementar PCPC = valP
Fetch icode:ifun M1[PC] Ler byte de instrução rA:rB M1[PC+1] Ler byte dos registos valP PC+2 Calcular próximo PC Decode valA R[rA] Ler operando A valB R[rB] Ler operando B Execute valE valB OP valA Realizar operação na ALU Set CC Códigos de condição Memory Write back R[rB] valE Escrever resultado PC update PC valP Actualizar PC Instrução Y86: operações lógico-aritméticas OPl rA, rB • Formularexecução de instruçõescomoumasequência de passos simples • Usar a mesma forma geralparatodas as instruções
8 rB 3 0 irmovl V, rB V Instrução Y86: irmovl • Fetch • Ler 6 bytesicode:ifun ; rA:rB ; valC • Calcularpróximo PCvalP = PC + 6 • Decode • Nada a fazer • Execute • PassarconstantevalE = valC • Memory • Nada a fazer • Write back • EscreverregistoR[rB] = valE • PC Update • Incrementar PCPC = valP
Fetch icode:ifun M1[PC] Ler byte de instrução rA:rB M1[PC+1] Ler byte de registos valC M4[PC+2] Ler deslocamento valP PC+6 Calcular próximo PC Decode Execute valE valC Passar constante Memory Write back R[rB] valE PC update PC valP Actualizar PC Instrução Y86: irmovl irmovl V, rB Escrever resultado
rA rB 4 0 rmmovl rA, D(rB) D Instrução Y86: rmmovl • Fetch • Ler 6 bytesicode:ifun ; rA:rB ; valC • Calcularpróximo PCvalP = PC + 6 • Decode • LerregistosvalA = R[rA]valB = R[rB] • Execute • CalcularendereçovalE = valB + valC • Memory • EscrevernamemóriaM4[valE] = valA • Write back • Nada a fazer • PC Update • Incrementar PCPC = valP
Fetch icode:ifun M1[PC] Ler byte de instrução rA:rB M1[PC+1] Ler byte de registos valC M4[PC+2] Ler deslocamento valP PC+6 Calcular próximo PC Decode valA R[rA] Ler operando A valB R[rB] Ler operando B Execute valE valB + valC Calcular endereço Memory M4[valE] valA Escrever na memória Write back PC update PC valP Actualizar PC Instrução Y86: rmmovl rmmovl rA, D(rB)
popl rA b rA 0 8 Instrução Y86: popl • Fetch • Ler 2 bytesicode:ifun ; rA:rB • Calcularpróximo PCvalP = PC + 2 • Decode • LerregistosvalA = R[%esp]valB = R[%esp] • Execute • Calcularpróximotopo da pilhavalE = valB + 4 • Memory • Ler da memóriavalM = M4[valA] • Write back • Escrever no registoR[rA] = valMR[%esp] = valE • PC Update • Incrementar PCPC = valP
Fetch icode:ifun M1[PC] Ler byte de instrução rA:rB M1[PC+1] Ler byte de registo valP PC+2 Calcular próximo PC Decode valA R[%esp] Ler stack pointer valB R[%esp] Ler stack pointer Execute valE valB + 4 Incrementar stack pointer Memory valM M4[valA] Ler topo da pilha Write back R[%esp] valE Actualizar stack pointer R[rA] valM Escrever resultado PC update PC valP Actualizar PC Instrução Y86: popl popl rA • Usar ALU paraincrementar stack pointer • Actualizardoisregistos: rA e %esp
jXX Dest Dest Não tomado continua: Dest: Tomado 7 XX XX fn XX XX Instrução Y86: Jump • Fetch • Ler 5 bytesicode:ifun ; valC • Calcularpróximo PCvalP = 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 BchPC = (Bch ? valC : valP)
Fetch icode:ifun M1[PC] Ler byte de instrução valC M4[PC+1] Ler destino do salto (se tomado) valP PC+5 Calcular próximo PC (se ñ tomado) Decode Execute Bch f(ifun, CC) Saltar? Memory Write back PC update PC (Bch ? valC : valP) Actualizar PC Instrução Y86: Jump jxx Dest • Calcular ambos osendereços • Escolherdestinobaseado no tipo de salto e noscódigos de condição
call Dest Dest return: target: 8 XX XX 0 XX XX Instrução Y86: call • Fetch • Ler 5 bytesicode:ifun ; valC • Calcularpróximo PC (end. de retorno)valP = PC + 5 • Decode • Le registovalB = R[%esp] • Execute • Calcular novo topo da pilhavalE = valB - 4 • Memory • Push do end. de retornoM4[valE] = valP • Write back • Actualizartopo da pilhaR[%esp] = valE • PC Update • PC = valC
Fetch icode:ifun M1[PC] Ler byte de instrução valC M4[PC+1] Ler destino do salto valP PC+5 Calcular endereço de retorno Decode valB R[%esp] Execute valE valB - 4 Novo topo da pilha Memory M4[valE] valP Write back R[%esp] valE PC update PC valC Actualizar PC Instrução Y86: call call Dest Ler addr do topo da pilha Guardar endereço de retorno Actualizar topo da pilha
9 XX 0 XX Instrução Y86: ret ret return: • Fetch • Ler 1 byte icode:ifun • Calcularpróximo PC valP = PC + 1 • Decode • LerregistovalA = R[%esp] valB = R[%esp] • Execute • Calcular novo topo da pilhavalE = valB + 4 • Memory • Ler end. de retornovalM = M4[valA] • Write back • Actualizartopo da pilhaR[%esp] = valE • PC Update • PC = valM
Fetch icode:ifun M1[PC] Ler byte de instrução valP PC+1 Calcular próximo PC Decode valA R[%esp] valB R[%esp] Execute valE valB + 4 Novo topo da pilha Memory valM M4[valEA Write back R[%esp] valE PC update PC valM Actualizar PC Instrução Y86: ret ret Ler addr do topo da pilha Ler endereço de retorno Actualizar topo da pilha
Y86: Valores calculados • 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
newPC Y86: SEQ New PC PC • 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 valM data out read Data Data Mem . Memory control memory memory write Addr Data Bch valE ALU Execute ALU ALU CC CC fun. ALU ALU A B valA valB Decode A A B B M M Register Register Register Register file file file file E E Write back icode ifun rA rB valC valP Instruction PC Instruction PC Fetch memory increment memory increment PC
Y86: Fetch • Blocos • PC: Registo • MemóriaInstruções:Ler 6 bytes (PC to PC+5) • Split: Dividir byte emicode e ifun • Align: ObterrA, rB e valC • Lógica de Controlo(sinaisobtidos a partir de icode) • Instr. Valid: estainstução é válida? • Need regids: estainstrução tem oscamposrA:rB? • Need valC: estainstrução tem um valor imediato?
Y86: Decode • Banco de Registos • Lerportas A, B • Escreverportas E, M • Endereçossãoos IDs do registosou 8(nãoaceder) • Lógica de Controlo • srcA, srcB: registos a ler • dstA, dstB: registos a escrever
Y86: Execute • 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?
Y86: Memory • Memória • Lerouescreverumapalavra • Lógicade Controlo • Mem.read:leitura? • Mem.write: escrita? • Mem.addr: Seleccionaaddr • Mem.data: Selecciona dados
OPl; XXmovl; popl ; … jXX Dest call Dest PC update PC valM PC update PC valC PC update PC Bch ? valC : valP ret PC update PC valP Y86: PC • Novo PC • Seleccionapróximo valor do PC
Y86: SEQ resumo • 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
Y86: SEQ Limitações • 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
PC Y86: SEQ+ valM data out read Data Data Mem . Memory control memory memory write • Estágio PC reordenado: passa a aconteceraoprincípio • Estágio PC • Selecciona PC para a instrução actual • Baseadonosresultados da últimainstrução • Estes sãoguardados num registo e consistemem:pIcode; pBch; pvalM ; pvalC ; pvalP • PC nãoestáguardadoemnenhumregisto Addr Data Bch valE ALU CC CC Execute ALU ALU fun. ALU ALU A B valA valB Write back Decode A A B B M M Register Register Register Register file file file file E E icode ifun rA rB valC valP Instruction PC Fetch Instruction PC memory increment memory increment PC PC pIcode pBch pValM pValC pValP