Este repositório contém a implementação para o projeto da disciplina Infraestrutura de Hardware (IF674) no CIn-UFPE.
A tabela abaixo mostra o status das instruções implementadas até o momento:
# | Instrução | Implementada | Testada | Funcionando |
---|---|---|---|---|
1 | BEQ |
✅ | ✅ | ✅ |
2 | LW |
✅ | ✅ | ✅ |
3 | SW |
✅ | ✅ | ✅ |
4 | ADD |
✅ | ✅ | ✅ |
5 | AND |
✅ | ✅ | ✅ |
Seu objetivo é implementar as instruções restantes listadas abaixo:
# | Instrução | Implementada | Testada | Funcionando |
---|---|---|---|---|
1 | JAL |
✅ | ✅ | ✅ |
2 | JALR |
✅ | ✅ | ✅ |
3 | BNE |
✅ | ✅ | ✅ |
4 | BLT |
✅ | ✅ | ✅ |
5 | BGE |
✅ | ✅ | ✅ |
6 | LB |
✅ | ✅ | ✅ |
7 | LH |
✅ | ✅ | ✅ |
8 | LBU |
✅ | ✅ | ✅ |
9 | SB |
✅ | ✅ | ✅ |
10 | SH |
✅ | ✅ | ✅ |
11 | SLTI |
✅ | ✅ | ✅ |
12 | ADDI |
✅ | ✅ | ✅ |
13 | SLLI |
✅ | ✅ | ✅ |
14 | SRLI |
✅ | ✅ | ✅ |
15 | SRAI |
✅ | ✅ | ✅ |
16 | SUB |
✅ | ✅ | ✅ |
17 | SLT |
✅ | ✅ | ✅ |
18 | XOR |
✅ | ✅ | ✅ |
19 | OR |
✅ | ✅ | ✅ |
20 | HALT |
✅ | ✅ | ✅ |
21 | LUI |
✅ | ✅ | ✅ |
-
As instruções de 1 a 19 são parte oficial do conjunto RV32I. A pseudo-instrução
HALT
é uma instrução usada em linguagens de montagem para indicar o fim de um programa ou pausar sua execução. Quando o processador encontra a instruçãoHALT
, geralmente é acionada uma ação específica, como inserir zeros (ou outro valor pré-determinado) no pipeline do processador e interromper o contador de programa (PC), impedindo a execução de novas instruções. Essa funcionalidade permite que o programador tenha controle sobre o fluxo do programa, indicando explicitamente quando o programa deve terminar. -
Você tem permissão para modificar a implementação do processador como desejar (por exemplo, incluir fios, alterar tamanhos, modificar sinais, remover ou adicionar módulos, etc.), desde que o resultado final continue funcionando como um pipeline e produza os resultados corretos. Suas decisões de projeto devem ser adequadamente documentadas.
A data de entrega do projeto será especificada no Classroom, assim como a quantidade de pessoas por grupo.
A entrega consiste no link do fork do repositório no GitHub, contendo o código-fonte do projeto e o relatório.
-
Faça um fork desse repositório e inclua as alterações necessárias (todos os integrantes do grupo devem contribuir!).
- Além das implementações, fique à vontade para alterar o README.md como achar melhor.
-
O relatório deve estar no formato PDF ou como link de um Google Docs. Ele deve conter:
- Nome dos integrantes do grupo.
- Link para o fork do repositório no GitHub.
- Descrição das escolhas de projeto.
- Descrição dos testes realizados.
- Resultados obtidos.
- Dificuldades encontradas.
- Conclusão.
O relatório não deve ser extenso, mas deve conter todas as informações necessárias para a avaliação do projeto.
A avaliação do projeto será baseada na implementação correta das instruções, nos testes realizados e no funcionamento adequado do processador.
- O projeto será submetido a casos de teste para verificar seu funcionamento, mas o processo de avaliação também levará em conta a qualidade do código e do relatório.
O repositório está organizado da seguinte forma:
design
: Contém o código-fonte do projeto do processador RISC-V.doc
: Contém mais explicações sobre a implementação.sim
: Contém os arquivos de simulação e os resultados, para uso nos testes.verif
: Contém os arquivos de testbench e as instruções de como testar o projeto.
-
Para iniciar o estudo do conjunto de instruções RISC-V, consulte:
-
Para simular e testar o projeto do processador RISC-V, utilize:
-
Para verificar os resultados:
- Compare seus resultados com os exemplos fornecidos em
sim
- Utilize o simulador CompSim
- Utilize o RISC-V Interpreter, by Cornell University
- Compare seus resultados com os exemplos fornecidos em
Em caso de dúvidas ou dificuldades, entre em contato com os monitores da disciplina:
Encorajamos os alunos a procurarem por bugs e sugerirem melhorias para o projeto, visando aperfeiçoá-lo para as próximas edições da disciplina. Se você identificou algum bug ou possui uma ideia para melhorar o projeto, ficaremos felizes em receber sua contribuição!
Existem duas maneiras de nos enviar suas sugestões:
-
Issue: Abra uma issue detalhando o problema ou a melhoria proposta. Certifique-se de fornecer informações claras e específicas para facilitar a compreensão do que precisa ser corrigido ou aprimorado.
-
Pull Request: Se você é familiarizado com o processo de pull requests, sinta-se à vontade para enviar suas alterações diretamente por meio de um pull request. Certifique-se de descrever claramente as alterações realizadas e o motivo por trás delas.