14P by khwl1026 2일전 | ★ favorite | 댓글 1개

4가지 CPU와 2개의 SoC 설계를 통한 실습으로 RISC-V CPU 설계의 기초를 익힐 수 있는 basic_RV32s 를 소개합니다.

basic_RV32s 요약

  • 군복무중 6개월동안 만든 FPGA 동작 가능한 softcore RISC-V RV32I CPU
  • Dhrystone 1.11 DMIPS/MHz, Coremark 1.10 Coremark/MHz 성능 달성
    국내에서 설계된 RV32I기반 CPU 논문들 중 최상위권 성능.
    (RISS 126편의 논문 중 RV32I benchmark 가 포함된 11편 참조, 작성일기준)
    (@50MHz 구동)
  • 점진적인 CPU 설계 과정과 SoC 설계
    • 3개의 싱글사이클 코어, (37F, 43F, 46F)
    • 1개의 5단계 파이프라인 코어, (46F5SP)
    • 파이프라인 코어를 탑재한 2가지 SoC 설계
      (46F5SP_SoC - Debug, Benchmark)
  • 직관적으로 이해하기 쉬운 하이레벨 수준 모듈 추상화 및 설계
  • RISC-V CPU 설계를 학습 할 수 있는 여러 문서 제공
    • RV32I Cheatsheet 액셀
    • 개발일지, 디버그 기록
    • 아키텍처 설계 가이드라인
    • 모든 아키텍처 및 모듈별 로직 설명 문서
    • 베어메탈 포팅 가이드라인
      • RISC-V GNU GCC Toolchain RV32I 빌드 가이드라인
      • Dhrystone 벤치마크 RV32I 베어메탈 구동 가이드라인 등
  • 주석 없는 클린코드와 주석이 포함된 듀얼 포맷 구조 코드 제공
  • 신호 수준 아키텍처 블럭 다이어그램 제공
  • 학부생 2학년 두명이 단독으로 논문 투고하여 ISOCC 2025에 학회 발표
  • RISC-V 공식 학습 레포지토리 riscv/learn 등재
    • Learning Resources - Intermediate-Level Resource

개발 배경

2024년 12월 15일, 군 복무중 동기 한 명과 함께 CPU 를 직접 만드는 프로젝트를 시작했었습니다. 얼마 전에 1주년이었네요!

기초적인 컴퓨터 구조론에 입각한 RISC-V CPU 를 만드는 것은 이론이 매우 풍부하고, 교재들도 많아 비교적 쉽게 익힐 수 있었습니다. 하지만 키보드 앞에 서니 이는 다른 문제로 다가왔습니다.

학교에서 얕게 배운 VerilogHDL 로 제대로된 프로젝트를 시작하는 것은 처음이었지만, 코딩능력을 넘어 RISC-V CPU 를 만들기 위한 문서와 매뉴얼, 가이드라인이 포함된 실제 오픈 소스 RISC-V 예제가 거의 없다는 것을 알게 되었습니다. (riscv/learn - open implementations 기준.)

물론, NEORV32DarkRISCV 등 이미 구현된 코어들을 분해하고 분석하는 것이 학습하기에 좋은 방법이지만, 설계 철학, 개발기록 등 설계 문제에 있어서 그 설계를 한 근거나 이유를 정확히 이해하고 찾는 것이 꽤나 힘들었습니다.

그래서 저는 단순히 이 프로젝트를 오픈소스 RISC-V CPU 의 구현뿐만 아니라, RISC-V RV32I CPU 를 만들기 위한 전체 오픈 소스 가이드라인으로 확장하기로 했습니다. 초보가 성장하는 기록을 담은게 다음 초보들에게 좋은 발자취가 되지 않을까 싶었습니다.

basic_RV32s 소개

위 요약에 적힌 것 처럼, 개발 로그와 코어 설계에 관한 문서, RISC-V CPU 제작에 대한 오답노트 등이 포함되어 있으며, 패터슨-헤네시 방법론을 기반 아키텍처로 하여 저와 같은 RISC-V 하드웨어 설계 초보자들을 타겟하였습니다.

핵심 설계는 RV32I에서 37개의 명령어를 지원하는 37F 아키텍처로 시작하여 다음과 같이 확장되는 점진적 형태로 제공됩니다.

  • 37F : 베이스 아키텍처, 싱글사이클.
  • 43F : 6개 Zicsr 확장 명령어 지원
  • 46F : EBREAK, ECALL, mret 명령어 지원
  • 46F5SP : 데이터 포워딩과 2비트 FSM 동적 분기 예측기를 갖춘 5단계 파이프라인 확장

코어를 FPGA에 구현하기 위해 46F5SP_SoC 를 설계했고, 두가지 버전으로 만들었습니다.

  • 디버깅 버전
    명령어를 디버깅하며 단계별로 수행과정을 버튼을 눌러 UART 통신으로 볼 수 있습니다.
  • 벤치마킹 버전
    Dhrystone이나 Coremark 등을 실행하여 UART 를 통해 직접 결과를 얻을 수 있습니다.

최근 업데이트된 46F5SP_MMIO_SoC는 UART 출력을 지원하는 MMIO를 구현해 printf 기능을 지원합니다. 이 SoC는 적합하게 링커, 부트 스크립트, syscall 등 BSP 파일들 등을 통해 컴파일되면 Dhrystone 2.1이나 Coremark 등 여러 C 프로그램들의 결과를 직접 얻을 수 있습니다.

마치며

RISC-V 에 대한 저희의 열정이 초보자들이 시작하는 데 도움이 되길 바랍니다. 그리고 가장 중요한 부분은 이 전체 프로젝트가 오픈 소스라는 점입니다!
이 프로젝트를 활용하여 RISC-V 커뮤니티에 더 나은 학습 튜토리얼과 문서, 프로세서 디자인을 만들어 누구나 자유롭게 기여할 수 있다는 뜻입니다.

저는 이 프로젝트의 목적을 위해 더 많은 것이 필요하다고 느낍니다. 프로젝트를 수행하며 검증엔 끝이 없다는 걸 알게 되었고, 저는 전문가가 아니기에 여러 해저드를 포함하여 제가 모르는 오류가 많이 포함되어 있을 수 있습니다. 때문에 레포는 frozen 되지 않았고 계속 열려있습니다! 부디 고수분들께서 부디 저희의 작품을 봐주시고 피드백해주시면 큰 도움이 될 것입니다. 저희 뿐만 아니라 이 프로젝트를 보고 학습하는 모두에게도요.

이후

지금은 RV32I 이후 RV64I 확장을 마쳐 RV64IM으로의 확장과 더 나아가 원래 꿈이었던, 대한민국의 범용 CPU(RVA23)를 만들고자하는 목표를 향해 정진하고 있습니다. ima_make_rv64라는 레포지토리로 현재 RV64IMA 확장까지의 개발에 전념하고 있습니다. 지켜봐주시면 정말 감사하겠습니다.

CPU 연구하는 학생인데 좋은 자료 감사합니다! 응원하겠습니다!