A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

MIPS Multiciclo João Cláudio Otero

Apresentações semelhantes


Apresentação em tema: "MIPS Multiciclo João Cláudio Otero"— Transcrição da apresentação:

1 MIPS Multiciclo João Cláudio Otero

2 Considerações Motivação: continuação de trabalho do Lisboa, dada afinidade com arquitetura do MIPS Motivação: continuação de trabalho do Lisboa, dada afinidade com arquitetura do MIPS trabalho realizado com ferramenta Quartus trabalho realizado com ferramenta Quartus

3 Início da Modelagem… Primeira abordagem: modelagem estrutural Primeira abordagem: modelagem estrutural –Criação de componentes, máquina de controle e geração de sinais de controle e geração de sinais de controle –Demorada –Teste difícil Segunda abordagem: modelagem funcional Segunda abordagem: modelagem funcional –Grande máquina de estados –Operações diretamente nos sinais

4 aluout = a + sigext(ir[15..0]) a = reg(ir[25..21]) aluout = pc + (sigext(ir[15..0]) << 2) b = reg(ir[20..16]) ir = mem(pc) pc = pc + 4 aluout = a op bif (a == b) pc = aluout pc = pc[31..28] || (ir[25..0]<<2) mdr = mem(aluout) reg(ir[20..16]) = mdr mem(aluout) = b reg(ir[15..11]) = aluout LW SW MEM R-TYPE BRN JMP

5 Modelagem funcional

6 Primeira versão Máquina de Estados com 2 processos Máquina de Estados com 2 processos –Problemas na compilação Alteração para Máquina com 1 processo Alteração para Máquina com 1 processo Primeiro teste: Primeiro teste: –Estado por estado –Problemas no acesso à memória –Processo para preparação da memória

7 Preparação da Memória OBS: assíncrona, palavras 32 bits, endereço de 8 bits. OBS: assíncrona, palavras 32 bits, endereço de 8 bits. O problema: when fetch => mem_address <= pc; mem_write <= 0; ir <= mem_contents …

8 Preparação da Memória A solução: mem_proc: PROCESS (state) BEGIN mem_proc: PROCESS (state) BEGIN if state = fetch then if state = fetch then mem_write <= '0'; mem_write <= '0'; mem_address <= pc; mem_address <= pc; elsif state = mem_lw then elsif state = mem_lw then mem_write <= '0'; mem_write <= '0'; mem_address <= aluout; mem_address <= aluout; elsif state = mem_sw then elsif state = mem_sw then mem_write <= '1'; -- '1'; mem_write <= '1'; -- '1'; mem_address <= aluout; mem_address <= aluout; end if; end if; END PROCESS mem_proc; END PROCESS mem_proc;

9 Segunda versão Acesso à memória funcionou, mas houve outros problemas de compilação… Acesso à memória funcionou, mas houve outros problemas de compilação… –Ciclos de inicialização –Eliminou-se processo de preparação à memória e acrescentou-se mais estados Alteração da memória para síncrona Alteração da memória para síncrona

10 Segunda versão

11 Correções na segunda versão Nos testes, nada funcionou… Nos testes, nada funcionou… Estados de espera para leitura e escrita na memória Estados de espera para leitura e escrita na memória

12 Correções na segunda versão

13 O programa de teste lw $1,0 ($zero) lw$2,2 ($zero) lw$3,4 ($zero) lw$4,6 ($zero) add$5,$1,$2 -- R5 := nop sub$6,$4,$3 -- R6 := nopnop add$7,$5,$6 -- R7 := R5 + R6 nopnop sw$7,8 ($zero) -- mem(8) := R7 = 4 A ram deve ser preenchida com: 0: 1 / 2: 2 / 4: 3 / 6: 4 / 8: reservado para o resultado.

14 Resultados do teste

15 Resultados Computer Architecture: Conjunto de instruções suportado pelo MIPS da seção 5.4 Computer Architecture: A Quantitative Approach, de Patterson & Hennessey A Quantitative Approach, de Patterson & Hennessey


Carregar ppt "MIPS Multiciclo João Cláudio Otero"

Apresentações semelhantes


Anúncios Google