1 puan yazan GN⁺ 4 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • RISCBoy, RISC-V uyumlu CPU’dan grafik işlem hattına, ekran denetleyicisine, bellek ve çevre birimi altyapısına ve KiCad PCB’ye kadar doğrudan tasarlanmış taşınabilir bir oyun konsoludur
  • 2001’de RISC-V var olsaydı ortaya çıkabilecek bir Game Boy Advance’i hedefler; sentezlenebilir Verilog 2005 ile yazılmıştır ve 7.680 mantık elemanına sahip iCE40-HX8k FPGA üzerinde 32 bitlik bir konsol uygular
  • İşlemci RV32IMC komut kümesini ve M-mode CSR’leri, istisnaları ve vektörlü harici kesmeleri destekler; RISC-V uygunluk testlerini ve riscv-formal doğrulamasını geçmiştir
  • Sentez için Yosys, nextpnr ve Project Icestorm açık kaynak araç zinciri kullanılır; ECP5 kartı ve daha küçük iCE40 UP5k için RV32I yapılandırması da desteklenir
  • Simülasyon ve resmi geliştirme ortamı ağırlıklı olarak Linux’u temel alır; PCB Rev B ile bootloader, gateware ve yazılım ağacının geliştirmesi hâlâ sürmektedir

Sıfırdan oluşturulmuş taşınabilir konsol

  • RISCBoy’un açık tasarım kapsamı şunları içerir
    • RISC-V uyumlu CPU
    • Raster grafik işlem hattı ve ekran denetleyicisi
    • Veri yolu fabric’i, bellek denetleyicisi, UART, GPIO gibi çip altyapısı
    • KiCad ile hazırlanmış PCB yerleşimi
  • Hedef, RISC-V’nin 2001’de var olduğu paralel bir evrendeki Game Boy Advance’tir; çocukluk döneminin taşınabilir konsollarına ve onları çalıştıran teknolojiye duyulan sevgiyi yansıtan bir projedir
  • Daha ayrıntılı tasarım bilgileri depodaki doc/riscboy_doc.pdf belgesinde bulunabilir

FPGA uygulaması ve işlemci

  • Tasarım sentezlenebilir Verilog 2005 ile yazılmıştır ve LUT4 tabanlı FPGA olan iCE40-HX8k’ye göre uyarlanmıştır
    • HX8k, 7.680 mantık elemanı sağlar
    • Sınırlı kaynaklara 32 bitlik bir oyun konsolu sığdırmak için dikkatli tasarım gerekir
  • HX8k, bir dönem açık kaynak Project Icestorm araç zincirinin desteklediği en büyük FPGA’ydı; sonrasında ilgili ekosistem Project Trellis ve Project X-Ray ile genişledi
  • İşlemci RV32IMC komut kümesini destekler
    • Bu komutlar için RISC-V uygunluk testlerini geçmiştir
    • riscv-formal doğrulama paketini geçmiştir
    • Komut frontend tutarlılığını ve temel veri yolu uyumluluğunu denetleyen kendi resmi özellik doğrulaması da uygulanır
  • M-mode CSR’leri ve istisnaları destekler; vektörlü harici kesmeler için basit bir uyumlu genişletme de sunar

Depoyu klonlama ve araç zinciri

  • HDL ve testlerde Git submodule kullanıldığı için aşağıdaki gibi özyinelemeli klonlama yapılmalıdır
git clone --recursive https://github.com/Wren6991/RISCBoy.git riscboy
  • Normal klonlamadan sonra submodule’ler ayrıca başlatılabilir
git clone https://github.com/Wren6991/RISCBoy.git riscboy
cd riscboy
git submodule update --init --recursive
  • Özyinelemeli submodule güncellemesi, işlemcinin bağımsız testleri için gereklidir ancak RISCBoy gateware derlemesi için gerekli değildir
  • Yazılım tabanlı testleri derlemek için RISC-V GNU Toolchain RV32IMC ve ILP32 yapılandırmasıyla derlenmelidir
./configure --prefix=/opt/riscv \
  --with-arch=rv32imc \
  --with-abi=ilp32 \
  --with-multilib-generator="rv32i-ilp32--;rv32ic-ilp32--;rv32im-ilp32--;rv32imc-ilp32--"
  • iCE40 UP5k gibi küçük FPGA’lerde yüksek performanslı RV32IMC yerine daha küçük RV32I işlemci varyantı kullanılabilir
  • Derleyici RISCBoy’un çeşitli ISA varyantlarını desteklese bile, her varyanta uygun standart kütüphanelerin oluşturulması için multilib yapılandırması gerekir
    • Yalnızca RV32I’ye yönelik bir işlemcide, RV32IMC standart kütüphanesine bağlanmış RV32I yürütülebilir dosyası çalıştırılırsa sorunlar ortaya çıkar

Simülasyon ve test

  • Simülasyon akışı Xilinx ISIM 14.x ve scripts/ dizinindeki Makefile’ı kullanır
    • Yalnızca Linux sürümü ISIM’de test edilmiştir
    • ISIM varsayılan yol dışında bir yere kurulduysa sourceme içindeki yolun ayarlanması gerekebilir
  • HDL düzeyi testleri çalıştırma süreci şöyledir
git submodule update --init --recursive
. sourceme
cd test
./runtests
  • Yazılım testleri için RV32IC araç zinciri gerekir
  • Tekil bir testi grafik ortamda hata ayıklamak için ilgili Makefile doğrudan çalıştırılır
cd system
make TEST=helloworld gui

PCB tasarımı

  • Rev A PCB, iTead’in 4 katmanlı 5×5 cm prototipleme servisiyle uyumludur
    • README’nin yazıldığı tarihte maliyeti 10 kart için 65 dolardır
    • Şema, depodaki board/fpgaboy.pdf dosyasında görülebilir
  • Rev B’nin Rev A’dan oldukça farklı bir biçimde olması planlanmaktadır; ilerlemeden önce gateware ve bootloader’ın olgunlaşması beklenmektedir
  • Mevcut geliştirme donanımı Snowflake FPGA board ile benzer yapıdadır

Sentez ve desteklenen kartlar

  • iCE40 için FPGA sentezinde şu açık kaynak araç zinciri kullanılır
  • Bu araçlar yalnızca Linux’ta doğrudan derlenip doğrulanmıştır; Windows derlemelerinin mümkün olduğu bilinmektedir ancak test edilmemiştir
  • Araç zinciri Raspberry Pi üzerinde de derlenebilir
  • Lattice HX8k değerlendirme kartı için FPGA imajı şu komutla oluşturulur
. sourceme
cd synth
make -f HX8k-EVN.mk bit
  • Lattice LEF5UM5G-85F-EVN değerlendirme kartı için ECP5 desteği de sunulur; ancak bu, ana geliştirme platformu olmayan, son derece deneysel bir yapılandırmadır
make -f ECP5-EVN.mk BUILD=full bit
  • ECP5 derlemesi, geliştirme donanımındaki harici 512 KiB, 16 bit SRAM’i dahili 256 KiB, 32 bit senkron bellek ile değiştirir
    • Bu bellek Trellis tarafından ECP5 sysmem blokları olarak yapılandırılır

Depo yapısı

  • board: RISCBoy ana PCB’sinin ve geliştirme sırasında kullanılan küçük kartların KiCad dosyaları
  • doc: belgenin LaTeX kaynakları ve diyagramları, en güncel derleme PDF’i
  • hdl: RISCBoy gateware’inin Verilog kaynakları
    • busfabric: AHB-lite crossbar ve APB çevre birimi fabric’i
    • graphics: piksel işleme birimi kaynakları
    • hazard5: tamamen bağımsız olarak yapılandırılmış RISC-V işlemci kaynakları
    • mem: bellek denetleyicisi ile bellek çıkarımı/enjeksiyon wrapper’ları ve modelleri
    • peris: UART, SPI, PWM gibi küçük çevre birimleri
    • riscboy_core: RISCBoy bileşenlerini örnekleyen ve bağlayan yapısal modül
    • riscboy_fpga: çeşitli FPGA ve kartların giriş/çıkış, saat ve reset hatlarını bağlayan üst seviye wrapper
  • reference: RISC-V komut kümesi gibi RISCBoy’da kullanılan standart PDF’ler
  • scripts: başka dizinlere ait olmayan betikler
  • software: sistem düzeyi testlerde kullanılan C dosyaları koleksiyonu; henüz pratik bir yazılım ağacı değildir
  • synth: tüm sistem sentezi için çalışma dizini; üst seviye Makefile’ı ve pin kısıt dosyalarını içerir
  • test: Verilog testbench’leri ile işlemci veya tüm sistem simülasyonlarında çalıştırılan yazılım test vakalarını içeren regresyon testi koleksiyonu

1 yorum

 
GN⁺ 4 시간 전
Hacker News görüşleri
  • GitHub sayfasında, RISC-V'in 2001'de var olduğu bir paralel evrendeki Game Boy Advance olarak tanıtılıyor
    Çocukluktaki elde taşınır konsollara yazılmış bir aşk mektubu ve o konsolu çalıştıran teknolojiye sabah 3'te sarhoşken atılan bir mesaj gibi bir proje olarak anlatılıyor

  • Bu, Luke Wren'in çalışması; kendisi Raspberry Pi'da ASIC tasarım mühendisi. Gerçekten harika bir proje

    • Ona sadece ASIC tasarım mühendisi demek, rolünü küçümsemek olur; CPU çekirdeği geliştirmeye de katkı veriyor
  • Bu geliştirici, RP2040 ile DVI/HDMI gerçekleştiren PicoDVI'ı da tasarladı
    https://github.com/Wren6991/PicoDVI

    • Raspberry Pi'da çalışırken RP2350'nin kalbinde yer alan Hazard3 RISC-V çekirdeğini tasarladı. Ancak Hazard3'ü boş zamanlarında geliştirdi; bu da RISCBoy için tasarladığı Hazard5 çekirdeğinden ayrılan bir projeydi
  • GBA, önbelleksiz bir yapı olarak tasarlanmıştı. Dahili RAM, video RAM, giriş/çıkış yazmaçları, BIOS, OAM, palet vb. dışında tüm erişimler harici veriyolundan geçiyor ve önbellek olmadan harici veriyolunu kullanmak sistemi fiilen 1980'ler bilgisayarı kadar yavaşlatıyor. Kartuştan komut alma hızı da GBC'nin yalnızca yaklaşık iki katı
    Bundan kaçınmak için, önbellek kullanıp birden fazla word'ü sıralı biçimde almak gerekir. Sıralı erişim hızlanırsa aktarım artar ve komutlar ile veriler yeterince önbelleğe alınabiliyorsa gecikme gizlenebilir. Bu sistemin tüm almaları bellek veriyoluna mı gönderdiğini, yoksa önbellek kullanıp kullanmadığını merak ediyorum

  • Bu tasarım, wafer.space'in ilk üretim çalışmasında tape-out edildi (https://github.com/wafer-space/ws-run1 bakın), ancak gerçekten düzgün çalışıp çalışmadığını duymadım

  • PDF'te tanıtılan programlanabilir scanline buffer tabanlı render pipeline, bu tür şeylerle ilgileniyorsanız okunmaya değer

  • Paralel evren donanımı hayal edilerek yapılan projeleri gerçekten seviyorum

  • Bu yeni donanım mimarisini benimserken en büyük engelin teknolojinin kendisi mi, yoksa yerleşik geliştirici ekosistemi ve yazılım araç zincirinin eksikliği mi olduğunu merak ediyorum

    • İkisi de sorun. Tam olarak ne yaptığınıza göre değişir ama genel olarak donanım geliştirmek, yazılım geliştirmekten daha zor ve daha maliyetlidir
      Yazılım araçlarının eksikliği aşılabilir, ama oyun kütüphanelerinin yokluğu daha büyük bir engel. Mevcut oyunları çok kolay taşımanın bir yolu yoksa özellikle zor
  • İçeride açık kaynak AHB/APB uygulaması kullanabilmeleri şaşırtıcı. Bunun ARM'ın tescilli teknolojisi olduğunu düşündüğüm için şimdiye kadar derinlemesine öğrenmemiştim

    • AMBA çok uzun zamandır açık bir standart; hatta sanırım ilk duyurulduğundan beri böyleydi
  • Bu projenin geliştiricisinin çağımızın en iyi mühendislerinden biri olduğunu düşünüyorum. Bu bile başlı başına etkileyici ama RP2350'nin Hazard3 çekirdeğini ve QSPI aygıtını da tasarladı
    Özellikle o QSPI aygıtı, şimdiye kadar kullandığım bellek eşlemeli QSPI aygıtları arasında çökertmeyi ya da kilitlemeyi başaramadığım tek ürün

    • QSPI hakkındaki değerlendirmeye katılıyorum ve RP2350 müthiş bir çip. Sayısız kullanım alanı var; veriyolu hackleme araçları için adeta sonik tornavida gibi