/riscv-multicycle

Primary LanguageVHDLGNU General Public License v3.0GPL-3.0

RISC SoftCore


RISC SoftCore é uma implementação em VHDL com fins diádicos do conjunto de instruções RISCV RV32I. Essa versão particular não implementa um pipeline. A ideia é criar um microcontrolador com periféricos comuns como I2C, USART, SPI e GPIOs inicialmente utilizado para disciplina de Dispositivos Lógicos Programáveis.

Ferramentas de programação podem ser obtidas no Compliler.

Animação do funcionamento da arquitetura em Virgularor: minimum RISC-V

Getting Started (hardware):

  • Simulação:

    • ModelSim: execução do script testbench.do
    • testbench: ./core/testbench.vhd
    • Utilizar uma memória SRAM IP (32-bits x 1024 words):
      • Quartus RAM: catálogo de IPS, RAM 1-port
      • Na aba de confguração Regs/Clken/Byte Enable/AClrs, desabilite 'q' output port e habilite Create byte enable for port A
      • Na aba de configuração Mem Init, habilite e configure o arquivo de inicialização da memória de instruções para quartus.hex
      • Na aba de configuração Mem Init, habilite Allow In-System Memory Content Editor.
    • Se necessário, altere o caminho do arquivo de inicialização de memória (quartus.hex) no arquivo iram_quartus.vhdl
  • Síntese: Quartus 15 ou superior (testado no Kit de desenvolvimento DE10-Lite)

    • Projeto: utilize ./sint/de10_lite
    • Para gravação do programa pós síntese:
      • Utilizar uma memória SRAM IP (32-bits x 1024 words Quartus RAM
      • Gravação pelo Tools -> In-System Memory Editor
    • Utilize uma PLL para ajuste do clock

Getting Started (software):

A compilação de programas necessita do toolchain riscv32-unknown-elf (ou riscv-none-embed) suportando o subconjunto RV32I, sem ABI. Em ./tests/ há um exemplo bem simples de Makefile. Perceba que na fase atual do projeto utilizamos um script de linker customizado (sections.ld). libc ainda não foi testado/suportado.

Instalação do compilador no Linux

Guia para instalação no gnu-mcu-eclipse.github.io

Toolchain Release: riscv-none-gcc Github.

Na utilização do xPacks talvez seja necessário exportar o XPACKS_REPO_FOLDER:

export XPACKS_REPO_FOLDER=~/opt/xPacks/

Instruções para Arch Linux (adaptar para outras distribuições):

sudo pacman -Syyu npm
sudo npm install --global xpm@latest
export XPACKS_REPO_FOLDER=~/opt/xPacks/
mkdir -p $XPACKS_REPO_FOLDER
xpm install --global @xpack-dev-tools/riscv-none-embed-gcc@latest
export MY_PLD_WORKSPACE=~/workspace_vhdl
mkdir -p $MY_PLD_WORKSPACE
cd $MY_PLD_WORKSPACE
git clone https://github.com/xtarke/riscv-multicycle
cd $MY_PLD_WORKSPACE/riscv-multicycle/tests
  1. Atualizar Makefile com o diretório da toolchain.

Exemplo:

RISCV_TOOLS_PREFIX = ~/opt/xPacks/@xpack-dev-tools/riscv-none-embed-gcc/8.3.0-1.1.1/.content/bin/riscv-none-embed-

  1. Para compilar, make.

Instalação do compilador no Windows (Windows Subsystem for Linux)

  1. Instalar o WSL: Microsoft Docs

  2. Instalar o Ubuntu no WSL

    • Para integrar o Visual Code com o compilador interno ao WSL, siga esse link
  3. No shell Ubuntu (busque Ubuntu no Iniciar do Windows):

  4. Instalar os pacotes para o nodejs:

sudo apt upgrade
sudo apt install nodejs
sudo apt install npm
sudo npm --global install xpm
  1. Instalar por xmp GNU Eclipse:

xpm install --global @gnu-mcu-eclipse/riscv-none-gcc

  1. Altere o caminho do compilador no Makefile:

    • de: RISCV_TOOLS_PREFIX = riscv32-unknown-elf-
    • para: RISCV_TOOLS_PREFIX = ~/opt/xPacks/@<versão compilador>/.contents/bin/riscv-none-embed-
  2. Utilizando o shell Ubuntu, mude o diretório atual para o repositório:

cd /mnt/c/<caminho sistema arquivos Windows>

  1. Para compilar, make.

Após a compilação, mova, copie ou faça um link simbólico de ./tests/quartus.hex para a raiz do projeto.

Simulador Assembly:

RISV baseado no MARS: RARS