Processador MIPS, Hierarquia de Memória e Coprocessador
Por: Gabriel Justino Ribeiro • 2/11/2019 • Projeto de pesquisa • 6.225 Palavras (25 Páginas) • 203 Visualizações
Escola Politécnica da Universidade de São Paulo
PCS3412 - Organização e Arquitetura de Computadores I
Projeto Final
Processador MIPS, Hierarquia de Memória e Coprocessador
Diego Sulzbeck Villalobos 8041904
Gabriel Henrique Justino Ribeiro 9837733
Gabriela von Staa Guedes 9853248
Luana Vicente Leite 9281074
Michel Chieregato Gretschischkin 9042790
São Paulo
2019
SUMÁRIO
SUMÁRIO 2
1 RESUMO 3
2 PROCESSADOR 4
2.1 PROCESSADOR MIPS 6
2.2 FLUXO DE DADOS 6
2.2.1 ESTÁGIOS DO FLUXO DE DADOS 8
2.2.1.1 ESTÁGIO DE BUSCA 9
2.2.1.2 ESTÁGIO DE DECODIFICAÇÃO 11
2.2.1.3 ESTÁGIO DE EXECUÇÃO 11
2.2.1.4 ESTÁGIO DE ACESSO À MEMÓRIA 12
2.2.1.5 ESTÁGIO DE WRITE-BACK 14
2.3 UNIDADE DE CONTROLE 14
2.3.1 ASM DAS INSTRUÇÕES 17
2.4 TESTES 19
2.4.1 OP E FUNC 19
2.4.1.1 TIPO R 20
2.4.1.2 TIPO I 20
2.4.1.3 TIPO J 21
2.4.1.4 TABELA DE CONVERSÃO DAS INSTRUÇÕES 22
2.4.2 SINAIS AUXILIARES 22
2.4.3 ADDI E ADD 24
2.4.4 JUMP 25
2.4.5 DUPLO LW 26
2.4.6 LW E ADD 27
2.5 DIFICULDADES ENCONTRADAS 28
3 HIERARQUIA DE MEMÓRIA 29
3.1 CACHE DE INSTRUÇÕES 29
3.1.1 VERIFICADOR DE HIT 30
3.1.2 CONTROLE DE FLUXO UCCI 31
3.1.3 UCCI 32
3.1.3.a TESTBENCH UCCI 33
3.2 CONTROLE DE POOLING 35
3.3 MEMÓRIA PRINCIPAL 36
3.3.1 UCMP 36
3.4 MP + CI TESTBENCH 37
3.5 CACHE DE DADOS 38
3.5.1 CONTROLE DE FLUXO UCCD 39
3.5.2 WRITE STATE CONTROLLER 40
3.5.3 WRITE CONTROLLER 41
3.5.4 UCCD 42
4 COPROCESSADOR 42
4.1 ALGORITMO DE CÁLCULO DA RAIZ QUADRADA 42
4.2 ORGANIZAÇÃO 46
4.3 ALGORITMO DE MULTIPLICAÇÃO COMBINATÓRIO 47
4.4 FLUXO DE DADOS 49
4.5 UNIDADE DE CONTROLE 50
1 RESUMO
Este trabalho tem como objetivo implementar um processador em três partes: o processador, a hierarquia de memória e o coprocessador. Para isso, dividimos o grupo em três subunidades para que pudéssemos nos aprofundar em um componente a fim de agilizar sua produção.
Os subgrupos produziram componentes capazes de operar separadamente. O processador foi implementado, a princípio, por estágios para que, no final, fosse necessário somente agrupá-los de maneira a formar uma pipeline. Contudo, em decorrência do surgimento de alguns erros, essa metodologia foi abandonada para que pudéssemos apresentar um processador capaz de interpretar e operar adequadamente com as instruções apresentadas, o que acarretou na produção de um processador com a arquitetura de monociclo e sem pipeline.
A produção da hierarquia de memória foi afetada pelo abandono de um membro do grupo na reta final do projeto, fato que acarretou na não elaboração completa e funcional de uma memória cache D e do write back na memória. Em vista disso, a hierarquia de memória se apresenta incompleta, porém seus demais componentes foram testados e funcionam corretamente.
Por fim, o coprocessador foi implementado de maneira completa e responde aos comandos requeridos. No entanto, houve alguns problemas em relação ao tempo de execução de comandos, dado que ele se mostrou demasiado longo.
Quando todos os componentes separados estavam quase completos, tentamos fazer a integração. Iniciamos pela integração com a memória, que só poderia ser feita com o cache I, dado que o cache D não estava completo. Conseguimos algum avanço porém sem efeito completo e, dado que não conseguiríamos integrar completamente com a memória, esta parte foi abandonada.
A integração com o coprocessador foi impossibilitada pelo fato de o processador ser monociclo e o coprocessador requisitar três valores a serem passados em um único sinal, em três clocks sequenciais. Tentamos utilizar um divisor de clock para transpor esta questão, mas o final se mostrou inconsistente.
Por fim, apesar de termos alguns problemas em cada um dos componentes, acreditamos que o aprendizado no desenvolvimento desse projeto foi alto e possibilitou um maior entendimento da teoria. Mesmo com os defeitos, conseguimos realizar três componentes separados que conseguem funcionar em seus objetivos individuais.
2 PROCESSADOR
Para implementar um processador completo, usamos como base as instruções do capítulo 4 do livro Organização e Projeto de Computadores, de Patterson e Hannessy, principalmente do item 4.3 (construindo um caminho de dados), tentando implementar estágio por estágio antes de testar a funcionalidade completa do processador.
Seguindo o item da criação do fluxo de dados, no livro, criamos cada componente separadamente. A maioria, como são componentes comumente implementados em diversos projetos, pudemos obter por meio da Biblioteca de Componentes disponibilizada pela disciplina. Em alguns, fizemos alterações para permitir uma
...