CPU Implementação Multiciclo Prof. Carlos Bazilio [email protected] Até então, tínhamos ... Problemas com Implementação Monociclo • Ciclo de clock tem o mesmo tamanho para todas as instruções implementadas; • Este ciclo é definido pela instrução de maior duração (lw – load word); • Cada unidade funcional só pode ser usada 1 vez por ciclo; • Com isso, algumas unidades funcionais são duplicadas, aumentando consideravelmente o custo do hardware. Implementação Multiciclo • A execução de cada instrução é quebrada em passos; • Cada passo gasta 1 ciclo de clock; • Com isso, uma unidade funcional pode ser utilizada + de 1 vez por instrução, desde que em diferentes ciclos. Implementação Multiciclo • Diferenças: – Única memória; – Única UAL; – Registradores após unidades funcionais. Implementação Multiciclo Caminho de Dados • Inclusões: – Registradores (IR, MDR, A, B, UALSaída), Multiplexadores (End. Memória, UAL) Implementação Multiciclo Linhas de Controle Implementação Multiciclo Caminho Completo Trecho da Máquina de Estados Passos na execução de uma instrução (1/5) • Busca da instrução e cálculo do endereço seguinte: IR = Memória[PC] PC = PC + 4 Passos na execução de uma instrução (2/5) • Decodificação da instrução e busca do registrador: A = Reg[IR[25-21]] B = Reg[IR[20-16]] UALSaída = PC + extensão_sinal(IR[15-0] << 2) Passos na execução de uma instrução (3/5) • Execução, cálculo do endereço de memória ou desvio condicional: – Referência a memória: UALSaída = A + extensão_sinal(IR[15-0]) – Instrução aritmética ou lógica: UALSaída = A op B – Desvio condicional: Se (A == B) PC = UALSaída – Desvio incondicional: PC = PC[31-28] || (IR[25-0]<<2) Passos na execução de uma instrução (4/5) • Final de execução das instruções de escrita em memória e do tipo R: – Referência a memória (load): MDR = Memória [UALSaída] – Referência a memória (store): Memória [UALSaída] = B – Instruções aritméticas ou lógicas: Reg[IR[15-11]] = UALSaída Passos na execução de uma instrução (5/5) • Final de execução das instruções de leitura à memória: – Referência a memória (load): Reg[IR[20-16]] = MDR Implementação do Controle • No monociclo utilizamos um conjunto de tabelas-verdade; • Na implementação de controle no projeto multiciclo veremos 2 abordagens: – Máquina de estados finitos; – Microprogramação. Controle Máquina de Estados Finitos (1/6) Controle Máquina de Estados Finitos (2/6) Controle Máquina de Estados Finitos (3/6) Controle Máquina de Estados Finitos (4/6) Controle Máquina de Estados Finitos (5/6) Máquina de Estados Finitos Completa (6/6) Implementação do Controle Microprogramação • A implementação real do MIPS possui um conjunto com cerca de 100 instruções; • Cada gasta de 1 a 20 ciclos de clock para ser executada; • Naturalmente, a função de controle será bem mais complexa, o que dificulta a sua especificação de forma gráfica; • Microprogramação é o projeto de controle como um programa que implementa instruções de máquina em termos de estruturas mas simples (microinstruções). Microprogramação • Na microprogramação temos a representação simbólica dos valores das linhas de controle; • Assim, um microprograma está para os sinais de controle (microinstruções) assim como a linguagem de montagem está para as instruções de máquina. Armazenamento de um Microcódigo Formato da microinstrução • Deve seguir padrões de projeto de linguagens de programação; • Cada campo deve ser responsável por um conjunto de sinais que não se sobreponham; • Do formato apresentado no livro, temos 6 campos que controlam o caminho de dados e 1 que controla o seqüenciamento das microinstruções. Formato da microinstrução (1/4) • Controle da UAL (operação da UAL) – Valores: • Soma: faz com o que a UAL some • Subtração: idem para subtração • Código de função: usa o campo de função da instrução • SRC1 (entrada 1 da UAL) – Valores: • PC: PC como primeira entrada da UAL • A: A como primeira entrada da UAL Formato da microinstrução (2/4) • SRC2 (entrada 2 da ual) – Valores: • • • • B: B como segunda entrada da UAL 4: B constante 4 como segunda entrada da UAL Estendido: saída da extensão de sinal Estendido/deslocado: saída da extensão com deslocamento de 2 bits • Controle de Registrador (leitura/escrita) – Valores: • Leitura: atualiza A e B com campos do IR • Escrita da UAL: Escreve no banco com campo do IR (rd) e UALSaida como dado • Escrita do MDR: Escreve no banco com campo do IR (rt) e MDR como dado Formato da microinstrução (3/4) • Memória (leitura/escrita na memória) – Valores: • Leitura à partir do PC: Lê da memória usando o PC e escreve resultado no IR • Leitura à partir do UAL: Lê da memória usando o UALSaida e escreve resultado no MDR • Escrita à partir da UAL: Escreve na memória usando UALSaida como endereço e B como dado • Controle PCEsc (Escrita no PC) – Valores: • UAL: Escreve a saída da UAL no PC • UALOut-cond: Se saída Z da UAL ativa, atualiza PC com UALSaida • End. Desvio Incondicional: Atualiza PC com endereço incondicional da instrução Formato da microinstrução (4/4) • Seqüenciamento (Como escolher a próxima microinstrução) – Valores: • Seq: Escolhe a próxima microinstrução sequencialmente • Busca: Desvia para a primeira microinstrução • Despacho i: Despacha de acordo com o tipo de instrução (opcode) Arquitetura Multiciclo Microprograma Ident Ual Busca Soma Soma Soma PC PC A Func A B Sub A B Mem1 LW2 SW2 Rform1 Beq1 Jump1 Src1 Src2 Regs 4 ExtDes Leitura Ext Mem PC PcEsc Seq Ual Seq Desp1 Desp2 LerUal Seq EscMdr Busca EscUal Busca Seq EscUal Busca UalOut Busca Incond Busca Bibliografia • Organização e projeto de computadores David A. Patterson & John L. Hennessy LTC