Skip to content

PedroVentura21/myRV32Iv1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Processador myRISCVv1

INDICES

CRÉDITOS

Este projeto tem como base o processador RISC-V single-cycle, precisamente o RV32I com Immediate Encoding Variants (The RISC-V Instruction Set Manual Volume I: Unprivileged ISA, v. 20240411, p. 2.3)

Requisitos do projeto: docs

Disciplina: Laboratório de Organização e Arquitetura de Computadores (CCMP0250) UNIVASF Campus Juazeiro 2025.1

Discente desenvolvedor: Pedro Giovanni Ventura


ARQUITETURA

Na atual versão do repositório, o processador segue a seguinte arquitetura:

image link lucid

COMPONENTES

Considerações:

  • Os componentes estão todos agrupados para melhor manutenção.
  • Textos em vermelho são entradas (input);
  • Textos em azul são saídas (output);
  • quando tiver indice (texto), interprete indice como relação entre os componetes e texto como o nome dado ao instanciar o componente;

0. testbench

0 - testbench.vhd

1. Design

1.0 - design.vhd

image

fig 1: arquitetura do design

1.1 - Instruction Memory (IM)

1.2 - Data Memory (DM)

1.3 - myRISCVv1 (myRV)

image

fig 2: arq. do myRISCVv1

obs.: também está assim na organização dos arquivos na pasta cod_vhdl.


LISTA DE INSTRUÇÕES BASE QUE O PROCESSADOR myRISCVv1 COMPORTA

Salto e Desvio (Jumps and Branches)

Sintaxe Operação
jal rd, label Salva o endereço pc + 4 em rd e salta para o endereço label.
jalr rd, rs1, imm Salva pc + 4 em rd e salta para o endereço calculado por rs1 + imm.
beq rs1, rs2, label Salta para label se o valor de rs1 for igual ao de rs2.
bne rs1, rs2, label Salta para label se o valor de rs1 for diferente do de rs2.

Acesso à Memória

Sintaxe Operação
lw rd, imm(rs1) Carrega a palavra do endereço rs1 + imm da memória e armazena em rd.
sw rs2, imm(rs1) Armazena a palavra do registrador rs2 no endereço rs1 + imm da memória.

Aritmética e Lógica (Tipo-I: com Imediato)

Sintaxe Operação
addi rd, rs1, imm Soma rs1 com o valor imm e armazena o resultado em rd.
slti rd, rs1, imm Se rs1 é menor que imm (com sinal), armazena 1 em rd; senão, 0.
xori rd, rs1, imm Realiza rs1 XOR imm e armazena o resultado em rd.
ori rd, rs1, imm Realiza rs1 OR imm e armazena o resultado em rd.
andi rd, rs1, imm Realiza rs1 AND imm e armazena o resultado em rd.

Aritmética e Lógica (Tipo-R: Registrador-Registrador)

Sintaxe Operação
add rd, rs1, rs2 Soma rs1 com rs2 e armazena o resultado em rd.
sub rd, rs1, rs2 Subtrai rs2 de rs1 e armazena o resultado em rd.
slt rd, rs1, rs2 Se rs1 é menor que rs2 (com sinal), armazena 1 em rd; senão, 0.
xor rd, rs1, rs2 Realiza rs1 XOR rs2 e armazena o resultado em rd.
or rd, rs1, rs2 Realiza rs1 OR rs2 e armazena o resultado em rd.
and rd, rs1, rs2 Realiza rs1 AND rs2 e armazena o resultado em rd.

COMO USAR

Só simulei através do site EDA Playground, usando o Aldec Riviera Pro 2023.04, então talvez precise fazer adaptações no código para funcionar em outros ambientes. Ademais, basta adicionar os arquivos com os códigos VHDL de cada componente explicado na seção módulos.

Em relação as instruções, você deve aplicar no arquivo prog.bin o código binário com a disposição dos bits de uma instrução de 32'b no seguinte formato:

format: (31 downto 0)
instr: vutsrqponmlkjihgfedcba9876543210
obs.: só '0' e '1', os outros digitos e letras são meramente ilustrativos ._.

prog.bin:

76543210 [7:0]
fedcba98 [15:8]
nmlkjihg [23:15] 
vutsrqpo [31:24]

Exemplo

instr: addi x9,  x0,  10
bin: 00000000101000000000010010010011

prog.bin:

10010011
00000100
10100000
00000000

Observações:

  • Lembre que o processador atual somente aceitas as instruções dadas na seção lista de instruções.
  • Além disso, há exemplos de binários (.bin) para teste com seus respectivos códigos assembly (.asm) na pasta exemplos_bin.

About

Simulação do processador RV32I em VHDL para fins acadêmicos.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors