basic_RV32s: guia open source de projeto de CPU RISC-V RV32I
(github.com/RISC-KC)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.