17 puan yazan khwl1026 2026-01-07 | Henüz yorum yok. | WhatsApp'ta paylaş

4 CPU ve 2 SoC tasarımı üzerinden yapılan uygulamalarla RISC-V CPU tasarımının temellerini öğrenmeyi sağlayan basic_RV32s’i tanıtıyoruz.

basic_RV32s özeti

  • Askerlik hizmeti sırasında 6 ayda yapılmış, FPGA üzerinde çalışabilen softcore RISC-V RV32I CPU
  • Dhrystone 1.11 DMIPS/MHz, Coremark 1.10 Coremark/MHz performansına ulaşıyor
    Yurt içinde tasarlanan RV32I tabanlı CPU makaleleri arasında en üst sıralarda yer alan performans.
    (Yazı tarihi itibarıyla RISS’teki 126 makale içinde RV32I benchmark içeren 11 makale referans alındı.)
    (@50MHz çalışmada)
  • Kademeli CPU tasarım süreci ve SoC tasarımı
    • 3 tek çevrimli çekirdek, (37F, 43F, 46F)
    • 1 adet 5 aşamalı pipeline çekirdeği, (46F5SP)
    • Pipeline çekirdeğini içeren 2 SoC tasarımı
      (46F5SP_SoC - Debug, Benchmark)
  • Sezgisel ve anlaşılması kolay yüksek seviyeli modül soyutlaması ve tasarım
  • RISC-V CPU tasarımını öğrenmek için çeşitli belgeler sunuluyor
    • RV32I Cheatsheet Excel
    • Geliştirme günlüğü, debug kayıtları
    • Mimari tasarım kılavuzları
    • Tüm mimari ve modül bazlı mantık açıklama belgeleri
    • Bare-metal portlama kılavuzları
      • RISC-V GNU GCC Toolchain RV32I build kılavuzu
      • Dhrystone benchmark RV32I bare-metal çalıştırma kılavuzu vb.
  • Yorumsuz temiz kod ile yorum eklenmiş çift formatlı yapıdaki kod birlikte sunuluyor
  • Sinyal seviyesinde mimari blok diyagramları sunuluyor
  • İkinci sınıfta okuyan iki lisans öğrencisi, tek başlarına makale göndererek ISOCC 2025’te konferans sunumu yaptı
  • RISC-V resmi öğrenme deposu riscv/learn içine eklendi
    • Learning Resources - Intermediate-Level Resource

Geliştirme arka planı

15 Aralık 2024’te, askerlik hizmeti sırasında bir dönem arkadaşımla birlikte doğrudan CPU yapma projesine başlamıştık. Kısa süre önce de 1. yıl dönümünü geride bıraktık!

Temel bilgisayar mimarisi kuramına dayalı bir RISC-V CPU yapmak, kuramsal kaynakların ve ders kitaplarının bolluğu sayesinde nispeten kolay öğrenilebiliyordu. Ancak klavyenin başına geçince bu bambaşka bir meseleye dönüştü.

Okulda yüzeysel olarak öğrendiğimiz VerilogHDL ile ciddi bir projeye ilk kez başlıyorduk; fakat kodlama becerisinin ötesinde, RISC-V CPU yapmak için gereken dokümanları, kılavuzları ve rehberleri içeren gerçek açık kaynaklı RISC-V örneklerinin neredeyse hiç olmadığını fark ettik. (riscv/learn - open implementations ölçütüne göre.)

Elbette NEORV32 ya da DarkRISCV gibi halihazırda uygulanmış çekirdekleri parçalayıp analiz etmek öğrenmek için iyi bir yöntem; ancak tasarım felsefesi, geliştirme kayıtları gibi tasarım meselelerinde, o tasarımın hangi gerekçeyle ve neden yapıldığını doğru biçimde anlamak ve bulmak oldukça zordu.

Bu yüzden bu projeyi yalnızca açık kaynaklı bir RISC-V CPU uygulaması olarak bırakmayıp, RISC-V RV32I CPU yapmak için uçtan uca açık kaynaklı bir kılavuz haline getirmeye karar verdim. Bir aceminin gelişim kaydının, ardından gelecek diğer acemiler için iyi bir iz bırakabileceğini düşündüm.

basic_RV32s tanıtımı

Yukarıdaki özette yazdığı gibi, geliştirme günlükleri, çekirdek tasarımına ilişkin belgeler ve RISC-V CPU üretimiyle ilgili hata notları da yer alıyor; temel mimari olarak Patterson-Hennessy metodolojisini esas alıyor ve benim gibi RISC-V donanım tasarımına yeni başlayanları hedefliyor.

Temel tasarım, RV32I içinde 37 komutu destekleyen 37F mimarisiyle başlıyor ve aşağıdaki gibi kademeli olarak genişliyor.

  • 37F : temel mimari, tek çevrimli.
  • 43F : 6 adet Zicsr genişletme komutunu destekler
  • 46F : EBREAK, ECALL, mret komutlarını destekler
  • 46F5SP : veri forwarding ve 2 bit FSM dinamik branch predictor içeren 5 aşamalı pipeline genişletmesi

Çekirdeği FPGA üzerinde gerçeklemek için 46F5SP_SoC tasarlandı ve iki sürüm hazırlandı.

  • Debug sürümü
    Komutları debug ederken, adım adım yürütme süreci bir düğmeye basılarak UART iletişimi üzerinden görülebiliyor.
  • Benchmark sürümü
    Dhrystone ya da Coremark gibi testler çalıştırılarak sonuçlar doğrudan UART üzerinden alınabiliyor.

Yakın zamanda güncellenen 46F5SP_MMIO_SoC, UART çıktısını destekleyen MMIO gerçekleştirmesi ile printf işlevini destekliyor. Bu SoC, uygun linker, boot script, syscall gibi BSP dosyalarıyla derlendiğinde Dhrystone 2.1 ya da Coremark gibi çeşitli C programlarının sonuçlarını doğrudan alabiliyor.

Kapanış

RISC-V konusundaki tutkumuzun yeni başlayanların ilk adımı atmasına yardımcı olmasını umuyoruz. Ve en önemli nokta şu: bu projenin tamamı açık kaynak!
Bu da, bu projeyi kullanarak RISC-V topluluğu için daha iyi öğrenme eğitimleri, belgeler ve işlemci tasarımları üretilebileceği ve herkesin özgürce katkı sunabileceği anlamına geliyor.

Bu amaca ulaşmak için daha fazlasına ihtiyaç olduğunu hissediyorum. Proje boyunca doğrulamanın sonu olmadığını öğrendim; ayrıca uzman olmadığım için, çeşitli hazard’lar dahil bilmediğim birçok hata içerebilir. Bu nedenle depo frozen durumda değil ve açık kalmaya devam ediyor! Uzman kişilerin çalışmamıza bakıp geri bildirim vermesi gerçekten çok yardımcı olacaktır. Bu yalnızca bize değil, projeyi görüp bundan öğrenen herkese de katkı sağlar.

Sonrası

Şu anda RV32I sonrasında RV64I genişletmesini tamamlamış durumdayız; sıradaki hedefimiz RV64IM’e genişlemek ve daha da ileride asıl hayalimiz olan Güney Kore’nin genel amaçlı CPU’sunu (RVA23) yapmak. Şu an ima_make_rv64 adlı depoda RV64IMA genişletmesine kadar olan geliştirmeye odaklanıyoruz. Takip ederseniz gerçekten çok seviniriz.

Henüz yorum yok.

Henüz yorum yok.