- 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
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
Bu geliştirici, RP2040 ile DVI/HDMI gerçekleştiren PicoDVI'ı da tasarladı
https://github.com/Wren6991/PicoDVI
Hazard5çekirdeğinden ayrılan bir projeydiGBA, ö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
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
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