- Ini adalah unit pemrosesan grafis kustom yang dibuat sendiri mulai dari hardware hingga driver agar dapat digunakan seperti GPU sungguhan di PC modern
- Implementasi intinya dilakukan di atas Xilinx Zynq UltraScale+ FPGA, dan dipasang pada PCB kustom
- Terhubung ke komputer host melalui PCIe, sehingga berfungsi sebagai GPU hardware sungguhan, bukan eksperimen software
- Fitur yang didukung disesuaikan dengan level kartu grafis kelas atas pertengahan 1990-an, dengan target rendering game pada era tersebut
- Dengan dukungan hingga stack driver Windows modern, GPU ini dapat merender game sungguhan dari era tersebut pada frame rate di atas real-time
Konfigurasi hardware
- FuryGpu adalah GPU sepenuhnya kustom yang dibuat dari awal untuk digunakan di komputer modern
- Logika pemrosesan grafis diimplementasikan di atas Xilinx Zynq UltraScale+ FPGA
- Dipasang pada PCB kustom dan terhubung ke komputer host melalui PCIe
Fitur grafis dan driver
- Fitur hardwarenya mendukung kemampuan setara kartu grafis kelas atas pertengahan 1990-an
- Disediakan bersama stack driver software Windows modern sehingga dapat digunakan sebagai GPU di lingkungan nyata
Tugas yang dapat dijalankan
- FuryGpu dapat merender game sungguhan dari era tersebut
- Performa renderingnya dapat mencapai frame rate di atas real-time
1 komentar
Opini Hacker News
Untuk menjawab pertanyaan yang paling sering saya terima: suatu hari nanti saya berniat merilis seluruh stack sebagai open source. Ini mencakup skematik/layout PCB, semua HDL, driver Windows WDDM, driver runtime API, bahkan Quake yang saya port agar memakai API tersebut
Namun saya harus membereskan urusan hukum terkait pekerjaan saya, dan juga memutuskan detail seperti lisensi. Ini bukan pekerjaan utama saya, tetapi bidangnya cukup berdekatan, jadi saya harus berhati-hati
Commit pertama proyek ini dibuat pada 22 Agustus 2021, dan saya sudah mengerjakannya sedikit lebih dari dua setengah tahun. Saya tidak menulis selama prosesnya, tetapi di playlist YouTube FuryGpu (https://www.youtube.com/playlist?list=PL4FPA1MeZF440A9CFfMJ7...) ada cukup banyak video yang kira-kira menunjukkan progresnya
Tulisan blog berikutnya akan membahas antarmuka PCIe, dan sepertinya akan menjadi seri beberapa bagian yang dimulai dari skematik/layout PCB, lalu desain FPGA, hingga driver Windows. Setelah menulis satu artikel tentang Texture Unit saja, saya jadi makin menghormati orang-orang yang rutin menulis artikel teknis seperti ini dengan jadwal yang konsisten
Saya sangat menginginkan sesuatu yang mudah dipasang seperti 6502, tetapi dengan beberapa register tambahan dan sedikit fitur lain seperti pembagian hardware, namun itu benar-benar pekerjaan yang tidak mudah
Pada akhirnya saya kembali ke “pakai MCU saja dan selesai”, lalu setelah itu mentok di masalah menghasilkan grafis
Karena sulit melakukan banyak pemrosesan berkecepatan tinggi hanya dengan gerbang logika diskret, saya pikir akan jauh lebih menarik belajar apa yang bisa dilakukan dengan FPGA
Untuk grafis, awalnya bisa mulai dengan output serial. Anggap saja masalahnya diabstraksikan sampai siap menanganinya. Jika Arduino dipaksa semaksimal mungkin, ia bisa dijadikan kartu grafis VGA yang sangat dasar [1]. ESP32 to VGA lebih mudah lagi, dan juga menyediakan keyboard serta mouse [2]
[1] https://www.instructables.com/Arduino-Basic-PC-With-VGA-Outp...
[2] https://www.aliexpress.us/item/1005006222846299.html
Output video adalah masalah besar karena bandwidth yang dibutuhkan untuk output digital. Untuk output komposit atau VGA, mungkin masih bisa dilakukan dengan chip yang mudah didapat. Commander X16 terbaru memilih FPGA untuk masalah ini
Sepertinya orang yang benar-benar menonton video sampai selesai kurang dari 100 ribu, dan di antara mereka yang benar-benar mencoba membuat sesuatu sendiri lebih sedikit lagi. Untuk zaman sekarang, elektronika hobi terasa mengejutkan kecil
Setelah membacanya, tampaknya ini terutama proyek hobi yang dikerjakan demi kesenangan, dan ia berencana menulis banyak tentang cara pembuatannya
Yang terutama mengesankan adalah seluruh stack-nya berfungsi. Driver Windows mengimplementasikan API grafis kustom, dan Quake berjalan di atasnya. Sayang tidak ada dukungan DX/GL, tetapi saya sangat memahami mengapa ia memilih jalur API kustom
Saya penasaran apakah desainnya akan dirilis sebagai open source
Masalahnya bukan sekadar “shader”; bahkan window manager OS saja punya cukup banyak persyaratan agar bisa berjalan. Para pemain umum di bidang ini—AMD, Nvidia, Intel, Imagination, dan lainnya—membangunnya secara bertahap di atas teknologi yang sudah berkembang lebih dari 20 tahun
Selama setahun terakhir saya mengerjakan GPU berfokus 2D untuk mikrokontroler dengan keterbatasan I/O yang besar (https://github.com/KallDrexx/microgpu). Saya membuatnya agar bisa merender antarmuka pengguna pada layar besar bahkan lewat perangkat SPI yang lambat, dan pekerjaannya sangat menarik
Namun, melihat batasan pipeline prosesor, saya terus berpikir bahwa dengan FPGA ini bisa dibuat lebih cepat. Baru-baru ini saya mendapatkan beberapa FPGA murah dan mulai belajar untuk mencoba mengubah microgpu berbasis ESP32 menjadi berbasis FPGA
Karena anak-anak dan keterbatasan waktu luang, saya tidak tahu apakah bisa mencapai level ini, tetapi saya ingin mencoba setidaknya seperseratus dari level ini
Bahkan sinyal RGB 1080p 60Hz yang “dasar” saja memerlukan pemrosesan sinyal frekuensi tinggi yang sangat sulit ditangani hanya dengan logika FPGA murni
Hampir tidak ada GPU perangkat keras terbuka yang layak disebut. Tergantung lisensinya, tetapi saya tidak menemukan informasinya, dan ini bisa menjadi contoh pertama sekaligus titik awal untuk lebih banyak pekerjaan
https://github.com/asicguy/gplgpu
https://github.com/schlae/graphics-gremlin adalah adaptor kompatibel MDA/CGA
https://github.com/OmarMongy/VGA adalah core VGA
https://github.com/archlabo/Frix adalah SoC lengkap yang kompatibel dengan IBM PC, termasuk VGA
Yang saya inginkan hanyalah satu GPU M.2 mandiri. Performanya boleh modest, cukup setara GPU terintegrasi seperti Intel UHD Graphics, AMD Radeon, atau Qualcomm Adreno
Saya punya ide produk embedded kecil yang membutuhkan banyak komputasi dan jaringan, tetapi kemampuan grafisnya hanya sangat sedikit. NXP Layerscape LX2160A [1] nyaris sempurna, tetapi harus saya tinggalkan karena tidak punya GPU terintegrasi. Saya hanya butuh GPU kecil
[1]: https://www.nxp.com/products/processors-and-microcontrollers...
Performanya sama sekali tidak mendekati GPU terintegrasi modern. GPU terintegrasi bisa memanfaatkan memori sistem, cache, dan anggaran daya semuanya, sementara perangkat M.2 sederhana tidak punya semua itu. GPU PCIe kelas bawah, bahkan kartu single-slot half-length/half-height, sulit melampaui GPU terintegrasi yang bagus, dan hanya masuk akal ketika fungsi display dasar benar-benar diperlukan
Sebagai bahan untuk dilihat bersama, ada proyek Vortex dari Georgia Tech[1]. Tampaknya ini pendekatan yang menatap masa depan, alih-alih mengulang masa lalu GPU dengan fungsi tetap. Intinya adalah komputer sangat paralel berbasis RISC-V, dengan ekstensi untuk menangani pekerjaan GPU dengan lebih baik
Board untuk menjalankannya berharga ribuan dolar, jadi tidak terlalu ramah untuk hobi, tetapi jelas lebih mudah diakses daripada pengembangan proprietary tertutup. Rilis 2.0 juga keluar beberapa bulan lalu
[1]: https://vortex.cc.gatech.edu/
Di blog disebut Xilinx Kria SoM, tetapi saat mengikuti tautan dan melihat spesifikasi modulnya, tampaknya yang ada di dalamnya adalah ARM SoC, bukan Xilinx FPGA. Saya tidak familier dengan dunia FPGA, jadi mungkin ada sesuatu yang saya lewatkan
https://www.amd.com/en/products/system-on-modules/kria/k26/k...
Seperti yang saya katakan di bagian lain utas ini, Kria SoM memiliki struktur yang menggabungkan fabric FPGA dengan core ARM keras yang menangani kontrol. Selain karena saat itu tersedia dan board pengembangan Kria sangat murah, sekitar 350 dolar, perangkat ini juga menyertakan hal-hal seperti hard DisplayPort IP yang terhubung ke core ARM, sehingga pekerjaan seperti output video dan audio bisa dialihkan ke firmware
Versi sebelumnya dari proyek ini berjalan di Zynq 7020, dan saat itu bagian terkait HDMI harus ditulis sendiri. Tidak terlalu rumit, tetapi memakan cukup banyak logic, dan menjadi jauh lebih rumit jika dibuat dapat dikonfigurasi
Seperti di posting blog, merancang dan melakukan bring-up board FPGA saja sudah merupakan hambatan yang tinggi. Semoga suatu saat skematik dan source-nya dibuka
[1] https://docs.amd.com/v/u/en-US/zynq-ultrascale-plus-product-...