Skip to content

Commit 8d89097

Browse files
authored
descricao do projeto
1 parent 44c91ca commit 8d89097

1 file changed

Lines changed: 100 additions & 1 deletion

File tree

README.md

Lines changed: 100 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,101 @@
1-
# RISC-V-python
1+
# Simulador de Processador RISC-V (RV32I)
22
Simulador do funcionamento de um processador RISC V em python
3+
## Autores
4+
* Raul Santos da Silva - RA: 8883414
5+
6+
Projeto final da disciplina de Organização de Computadores - Universidade Católica de Santos (UniSantos).
7+
8+
## Sobre o Projeto
9+
Este codigo contem a implementação de um simulador de um processador RISC-V 32bits I, versão do processador de 32 bits focada em instruções de numeros inteiros, **python**.
10+
11+
## Tecnologias Utilizadas
12+
* Linguagem: Python
13+
14+
## Como Executar
15+
Basta iniciar o arquivo **main.py** para rodar com o codigo default
16+
17+
### Pré-requisitos
18+
Como o projeto não utiliza bibliotecas externas, basta ter o compilador/interpretador da linguagem instalada.
19+
20+
O ciclo de funcionamento do simulador imita um processador RISC-V real:
21+
1. O ciclo inicia com a extração da informação da memória (Instruction Fetch).
22+
2. O ciclo de busca padrão é executado de forma contínua (sem interrupções no fluxo básico).
23+
3. Segue-se para a decodificação e execução conforme a especificação da arquitetura.
24+
25+
Ciclo_de_busca.png
26+
27+
## Funcionalidades Implementadas
28+
29+
### 1. CPU (RV32I)
30+
Abaixo, a lista completa das instruções implementadas no decodificador, organizadas por categoria e formato de instrução.
31+
32+
### Tabela de Instruções Suportadas (Detalhada)
33+
34+
| Opcode (Hex) | Funct3 | Funct7 | Instrução | Tipo | Descrição |
35+
| :---: | :---: | :---: | :--- | :---: | :--- |
36+
| **`0x03`** | `000` | - | `LB` | I | Load Byte |
37+
| | `001` | - | `LH` | I | Load Half |
38+
| | `010` | - | `LW` | I | Load Word |
39+
| | `100` | - | `LBU` | I | Load Byte Unsigned |
40+
| | `101` | - | `LHU` | I | Load Half Unsigned |
41+
| **`0x13`** | `000` | - | `ADDI` | I | Add Immediate |
42+
| | `001` | `0000000` | `SLLI` | I | Shift Left Logical Imm |
43+
| | `010` | - | `SLTI` | I | Set Less Than Imm |
44+
| | `011` | - | `SLTIU` | I | Set Less Than Imm Unsigned |
45+
| | `100` | - | `XORI` | I | XOR Immediate |
46+
| | `101` | `0000000` | `SRLI` | I | Shift Right Logical Imm |
47+
| | `101` | `0100000` | `SRAI` | I | Shift Right Arith Imm |
48+
| | `110` | - | `ORI` | I | OR Immediate |
49+
| | `111` | - | `ANDI` | I | AND Immediate |
50+
| **`0x17`** | - | - | `AUIPC` | U | Add Upper Imm to PC |
51+
| **`0x23`** | `000` | - | `SB` | S | Store Byte |
52+
| | `001` | - | `SH` | S | Store Half |
53+
| | `010` | - | `SW` | S | Store Word |
54+
| **`0x33`** | `000` | `0000000` | `ADD` | R | Add |
55+
| | `000` | `0100000` | `SUB` | R | Subtract |
56+
| | `001` | `0000000` | `SLL` | R | Shift Left Logical |
57+
| | `010` | `0000000` | `SLT` | R | Set Less Than |
58+
| | `011` | `0000000` | `SLTU` | R | Set Less Than Unsigned |
59+
| | `100` | `0000000` | `XOR` | R | XOR |
60+
| | `101` | `0000000` | `SRL` | R | Shift Right Logical |
61+
| | `101` | `0100000` | `SRA` | R | Shift Right Arithmetic |
62+
| | `110` | `0000000` | `OR` | R | OR |
63+
| | `111` | `0000000` | `AND` | R | AND |
64+
| **`0x37`** | - | - | `LUI` | U | Load Upper Immediate |
65+
| **`0x63`** | `000` | - | `BEQ` | B | Branch == |
66+
| | `001` | - | `BNE` | B | Branch != |
67+
| | `100` | - | `BLT` | B | Branch < |
68+
| | `101` | - | `BGE` | B | Branch >= |
69+
| | `110` | - | `BLTU` | B | Branch < Unsigned |
70+
| | `111` | - | `BGEU` | B | Branch >= Unsigned |
71+
| **`0x67`** | `000` | - | `JALR` | I | Jump & Link Register |
72+
| **`0x6F`** | - | - | `JAL` | J | Jump & Link |
73+
74+
### 2. Barramento
75+
Dentro do codigo implementado um barramento que simula o funcionamento dos três tipos de barramentos:
76+
* Dados
77+
* Endereço
78+
* Controle
79+
80+
### 3. Sistema de Memória
81+
A memória foi implementada como uma matriz de endereçamento, respeitando o seguinte mapeamento exigido no projeto:
82+
83+
| Faixa de Endereço (Hex) | Descrição |
84+
|:-----------------------:|:----------|
85+
| 0x00000 - 0x7FFFF | RAM Principal (Programa, Dados, Pilha, Heap) |
86+
| 0x80000 - 0x8FFFF | VRAM (Vídeo RAM) |
87+
| 0x90000 - 0x9FBFF | Área Reservada para Expansões Futuras |
88+
| 0x9FC00 - 0x9FFFF | Periféricos (E/S Mapeada) |
89+
90+
Nota: A implementação no codigo não possui componentes que usam a Área Reservada e Periféricos (E/S Mapeada) estão apenas com seus endereços reservados porem sem utilização
91+
92+
### 4. Entrada e Saída (VRAM)
93+
O simulador lê periodicamente a região da VRAM (0x80000) e exibe os caracteres ASCII correspondentes no terminal.
94+
95+
## 5. Programa de teste
96+
O codigo conta com um programa de teste dentro do **main.py**
97+
Esse codigo se traduz para um codigo em **python**:
98+
99+
100+
101+

0 commit comments

Comments
 (0)