17 pontos por khwl1026 2026-01-07 | Ainda não há comentários. | Compartilhar no WhatsApp

Apresentamos o basic_RV32s, com o qual é possível aprender os fundamentos do projeto de CPUs RISC-V por meio de prática com 4 CPUs e 2 projetos de SoC.

Resumo do basic_RV32s

  • Softcore RISC-V RV32I capaz de rodar em FPGA, criado ao longo de 6 meses durante o serviço militar
  • Alcançou desempenho de Dhrystone 1.11 DMIPS/MHz e Coremark 1.10 Coremark/MHz
    Desempenho entre os melhores entre artigos de CPU baseadas em RV32I projetadas na Coreia.
    (com referência a 11 artigos dentre 126 do RISS que incluem benchmark RV32I, na data de redação)
    (rodando a @50MHz)
  • Processo gradual de projeto de CPU e projeto de SoC
    • 3 núcleos single-cycle, (37F, 43F, 46F)
    • 1 núcleo com pipeline de 5 estágios, (46F5SP)
    • 2 projetos de SoC com o núcleo pipeline embarcado
      (46F5SP_SoC - Debug, Benchmark)
  • Abstração de módulos em alto nível, intuitiva e fácil de entender, e projeto correspondente
  • Fornece vários documentos para aprender projeto de CPU RISC-V
    • planilha Excel RV32I Cheatsheet
    • diário de desenvolvimento, registros de depuração
    • diretrizes de projeto de arquitetura
    • documentos com explicação da lógica de toda a arquitetura e de cada módulo
    • diretrizes de porting bare-metal
      • diretrizes de build do RISC-V GNU GCC Toolchain RV32I
      • diretrizes para execução bare-metal do benchmark Dhrystone em RV32I, entre outras
  • Fornece código em estrutura de formato duplo: clean code sem comentários e código com comentários
  • Fornece diagramas de blocos da arquitetura em nível de sinal
  • Dois estudantes do 2º ano da graduação submeteram um artigo por conta própria e apresentaram na ISOCC 2025
  • Incluído no repositório oficial de aprendizado de RISC-V, riscv/learn
    • Learning Resources - Intermediate-Level Resource

Contexto do desenvolvimento

Em 15 de dezembro de 2024, durante o serviço militar, comecei com um colega do mesmo período um projeto para criar uma CPU do zero. Há pouco tempo completou 1 ano!

Criar uma CPU RISC-V com base em fundamentos de arquitetura de computadores era algo relativamente fácil de aprender, já que existe muita teoria e muitos materiais didáticos. Mas, quando fui para o teclado, a situação pareceu bem diferente.

Embora fosse a primeira vez que eu iniciava um projeto de verdade com VerilogHDL, aprendido superficialmente na faculdade, percebi que quase não havia exemplos reais open source de RISC-V que incluíssem documentos, manuais e diretrizes para construir uma CPU RISC-V, indo além da codificação em si. (com base em riscv/learn - open implementations.)

Claro, decompor e analisar núcleos já implementados, como NEORV32 ou DarkRISCV, é uma ótima forma de aprender, mas era bastante difícil entender com precisão ou encontrar os fundamentos e as razões por trás daquele projeto em questões como filosofia de design e histórico de desenvolvimento.

Por isso, decidi expandir este projeto para algo além de uma implementação open source de CPU RISC-V: um guia open source completo para criar uma CPU RISC-V RV32I. Achei que registrar a trajetória de crescimento de um iniciante poderia virar um bom rastro para os próximos iniciantes.

Introdução ao basic_RV32s

Como está escrito no resumo acima, ele inclui logs de desenvolvimento, documentação sobre o projeto dos núcleos e anotações de erros sobre a criação de CPUs RISC-V, tendo como base a metodologia Patterson-Hennessy e mirando iniciantes em projeto de hardware RISC-V como eu.

O projeto central começa com a arquitetura 37F, que suporta 37 instruções em RV32I, e é fornecido em uma forma progressiva que se expande da seguinte maneira.

  • 37F : arquitetura base, single-cycle
  • 43F : suporte a 6 instruções de extensão Zicsr
  • 46F : suporte às instruções EBREAK, ECALL e mret
  • 46F5SP : extensão com pipeline de 5 estágios com data forwarding e preditor dinâmico de desvio FSM de 2 bits

Para implementar o núcleo em FPGA, foi projetado o 46F5SP_SoC, criado em duas versões.

  • Versão de depuração
    É possível depurar instruções e ver o processo de execução passo a passo por UART ao apertar botões.
  • Versão de benchmark
    É possível executar Dhrystone ou Coremark e obter diretamente os resultados por UART.

O 46F5SP_MMIO_SoC, atualizado recentemente, implementa MMIO com suporte a saída UART, oferecendo a funcionalidade de printf. Se esse SoC for compilado adequadamente com arquivos BSP como linker, script de boot e syscall, será possível obter diretamente os resultados de vários programas em C, como Dhrystone 2.1 e Coremark.

Encerrando

Esperamos que nossa paixão por RISC-V ajude iniciantes a dar os primeiros passos. E o ponto mais importante é que todo este projeto é open source!
Isso significa que, usando este projeto, é possível criar melhores tutoriais de aprendizado, documentação e designs de processadores para a comunidade RISC-V, e que qualquer pessoa pode contribuir livremente.

Sinto que ainda é preciso muito mais para atingir o objetivo deste projeto. Ao realizá-lo, percebi que a verificação nunca termina e, como não sou especialista, pode haver muitos erros que desconheço, inclusive vários hazards. Por isso, o repositório não foi congelado e continua aberto! Ficaríamos muito gratos se pessoas mais experientes pudessem olhar nosso trabalho e nos dar feedback. Isso ajudaria não apenas a nós, mas também todos que estudarem por meio deste projeto.

Daqui para frente

Agora, após concluir a extensão de RV32I para RV64I, estamos avançando rumo à expansão para RV64IM e, mais adiante, ao objetivo que era nosso sonho original: criar uma CPU de uso geral da Coreia do Sul (RVA23). No momento, estamos nos dedicando ao desenvolvimento até a extensão RV64IMA no repositório ima_make_rv64. Ficaremos realmente agradecidos se vocês acompanharem.

Ainda não há comentários.

Ainda não há comentários.