RISC-V (baca: Risk Five) adalah instruction set architecture (ISA) yang sifatnya terbuka, jadi yang mengimplementasikan ISA ini tidak perlu membayar royalti ke pihak tertentu. Ini tidak seperti ARM atau x86 di mana yang mengimplementasikan perlu membayar royalti. Mirip dengan ARM, ada berbagai versi ISA ini yang bisa dipakai mulai dari microcontroller sampai desktop.
Beberapa tahun terakhir sudah mulai ada yang mengimplementasikan RISC-V versi microcontroller (pernah saya bahas di sini) dengan harga relatif murah. Ini hanya bisa menjalankan Linux versi non-MMU. Kemudian sudah ada yang membuat versi desktop (SiFive HiFive Unmatched) tapi masih mahal. SBC dari Beaglebone sudah dibuat tapi masih untuk developer. Tapi bulan Mei lalu ada SBC baru yang relatif murah (99 USD) dan sudah bisa dipesan dari AliExpress.
Nama boardnya adalah Nezha (asal namanya dari sini), SOC-nya adalah AllWinner D1 yang memakai prosessor XuanTie C906 64 bit. RAM-nya hanya 1GB, tapi sudah cukup untuk menjalankan Debian desktop LXDE (walau cukup lambat). Daftar fiturnya cukup lengkap sebagai single board computer ada WIFI, Bluetooth, Port USB (termasuk juga USB C), ethernet dan juga audio jack.
Saat ini dari pengalaman saya: HDMI output kurang stabil. Display 4K saya hanya terdeteksi sebagai 1280×720, dan sudah beberapa kali outputnya display tiba-tiba hilang walau masih bisa diakses via SSH dan serial port (catatan: serial port defaultnya 9600 baud).
CPU
RISC-V memiliki instruksi dasar, dan juga extension tambahan. Sebagian sifatnya sudah frozen, tidak akan diubah lagi karena sudah disepakati bersama. Sebagian masih dibahas. Ini daftar extension yang saat ini ada di dalam standard RISC-V, yang saya tandai tebal didukung oleh XuanTie C906. Saat prosessornya dirancang ektensi vector baru versi 0.7, dan sekarang sudah versi 1.0, jadi tidak sepenuhnya kompatibel dengan standard terbaru.
- “M” Standard Extension for Integer Multiplication and Division
- “A” Standard Extension for Atomic Instructions
- “F” Standard Extension for Single-Precision Floating-Point
- “D” Standard Extension for Double-Precision Floating-Point
- “Q” Standard Extension for Quad-Precision Floating-Point
- “L” Standard Extension for Decimal Floating-Point
- “C” Standard Extension for Compressed Instructions
- “B” Standard Extension for Bit Manipulation
- “J” Standard Extension for Dynamically Translated Languages
- “T” Standard Extension for Transactional Memory
- “P” Standard Extension for Packed-SIMD Instructions
- “V” Standard Extension for Vector Operations
- “N” Standard Extension for User-Level Interrupts
CPU Allwinner D1 mengimplementasikan ekstensi M, A, F, D, C, V, dan U. Extension “U” belum ada di standard: untuk user mode execution. MMU-nya memakai standard sv39, artinya memakai 39 bit untuk virtual addressnya.
Software
Saya cukup kagum dengan progress RISC-V, saat ini banyak software yang sudah berjalan. Untuk interpreter yang cukup cross platform dan tidak memakai JIT (seperti Python, Ruby) saya tidak heran, tapi ternyata berbagai bahasa yang memiliki code generator custom (seperti Go) juga sudah berjalan. Yang sudah saya coba saat ini: C/C++, Python, Go, Rust, dan Java (walau Java sangat lambat).
Untuk pengguna awam, libreoffice belum diport, tapi alternatifnya seperti caligra, abiword dan gnumeric sudah tersedia. Meski sudah ada usaha untuk porting Firefox dan Chromium, saat ini belum ada precompiled package untuk Debian. Untuk saat ini, performa device ini masih lebih lambat dari ARM, jadi masih kurang cocok juga untuk end user.
Reverse Engineering
Karena reverse engineering adalah salah satu hobi saya, maka salah satu hal pertama yang saya coba adalah melakukan reverse engineering binary dengan Ghidra dan IDA Pro. IDA Pro 7.6 mendukung RISC-V tapi belum ada decompilernya, Ghidra terbaru juga sudah mendukung dan bahkan memiliki decompiler.
Secara umum instruction set RISC-V ini cukup sederhana dan logis (tidak seperti Intel x86 yang penuh dengan instruksi yang sifatnya historical supaya kompatibel dengan software lama). Jika sudah terbiasa melakukan reverse engineering berbagai arsitektur, maka kodenya cukup mudah dibaca, dari potongan kecil assembly di bawah ini, terlihat ada stack pointer (sp), ada instruksi mv yang seperti move di intel, li untuk meload immediate, ld untuk load data, dan sd untuk store data. Terlihat juga jal untuk melakukan subroutine call.
Hasil dekompilasi GHidra cukup baik. Arsitektur Ghidra memang sangat generik sehingga mudah mendukung prosessor baru baik di level disassembler maupun decompiler.
Dan karena Nezha ini bisa menjalan Linux, tentunya kita bisa menggunakan gdb untuk lebih memahami sifat berbagai instruksi. Dengan gdb, kita bisa melihat berbagai register yang dipengaruhi sebuah instruksi.
Bagian ini reverse engineering ini hanya sekedar perkenalan saja, mungkin di masa depan saya akan membahas lebih dalam lagi mengenai ISA ini.
Penutup
Setelah berbagai instruction set muncul dan mati, sepertinya RISC-V ini akan jadi instruction set architecture (ISA) terakhir. Membuat ISA baru sebenarnya sangat mudah, tapi membuat ekosistem software (dari mulai compiler sampai browser) yang mendukung ISA tersebut merupakan proses yang sulit.
RISC-V bisa didukung banyak orang karena sifatnya terbuka, sedangkan perusahaan lain (jika ISA-nya tidak terbuka dan gratis) akan kesulitan membayar banyak orang untuk mendukung ISA baru. Jika semua software penting sudah diport ke RISC-V, dan sudah dilakukan optimasi pada implementasi hardwarenya di masa depan sepertinya akan semakin banyak benda yang memakai RISC-V.
Satu tanggapan pada “Nezha Single Board Computer RISC-V 64 Bit”