RISC-V (вимовляється «risk-five») — відкрита архітектура інструкцій центрального процесора, що базується на принципах RISC. Проєкт розпочався у 2010 році в Університеті Каліфорнії (Берклі), до роботи долучилися також багато ентузіастів поза межами університету.

Станом на червень 2020 року, архітектура команд для програм користувача має версію 2.2, а привілейована частина (для використання ядром операційної системи) — версію 1.11.

Історія

Термін «RISC» вперше з'явився на початку 1980-х років. До цього існували деякі ідеї, що процесори з простою архітектурою можуть бути ефективними, але дизайн таких процесорів детально описаний не був.

Набір процесорних інструкцій DLX з'явився у 1990-му році для першого видання книги Computer Architecture: A Quantitative Approach і позиціонувався в основному для навчальних цілей. Автором розробки був Девід Паттерсон; у академічних колах і серед ентузіастів було здійснено кілька реалізацій DLX для FPGA. Комерційного застосування DLX не мав.

Набір команд процесорів ARM версії 2 і старіших є суспільним надбанням, і все ще підтримується набором компіляторів gcc. Існує три описи апаратної частини цієї архітектури, але реалізація їх «у кремнії» відсутня.

Існує також дизайн OpenRISC (також базується на DLX), що є продуктом з відкритим кодом і також підтримується gcc. Втім, кількість комерційних реалізацій OpenRISC також незначна.

Особливості дизайну

Набори регістрів RISC-V має 32 (у вбудовуваному варіанті — 16) регістрів для зберігання цілих чисел. Якщо підтримується розширення з рухомою комою, процесор має підтримувати 32 регістри з рухомою комою. Інструкції процесора (за винятком тих, що здійснюють доступ до пам'яті) оперують лише з регістрами.

Перший цілочисельний регістр завжди повертає нуль при читанні, а запис у нього не має ефекту. Решта регістрів — загального призначення. Використання нульового регістра дає змогу реалізувати компактніший набір інструкцій (наприклад, інструкцію можна замінити еквівалентною ).

Існують також регістри керування і статусу. Програми користувача мають доступ лише до тих з них, що пов'язані з вимірюванням швидкодії і керуванням обчислень з рухомою комою.

Інструкції, що зчитують або записують багато регістрів за раз, відсутні: проектанти дійшли до висновку, що такі команди не є необхідними, складні у реалізації і занадто повільні.

Виклик підпрограм, переходи і розгалуження Для виклику підпрограм архітектура RISC-V має інструкцію (); адреса для повернення з підпрограми записується у наданий регістр. Такий підхід є швидшим, ніж запис адреси у пам'ять (стек). Зміщення у інструкції кодується 20-бітним знаковим числом, яке множиться на 2 і додається до поточного лічильника команд. Якщо обчислене таким чином значення не є кратним 4, процесор може згенерувати виняток.

Непрямий перехід здійснюється інструкцією (), яка схожа на , але адреса обчислюється шляхом додавання значення базового регістра і 12-бітного зміщення ( додає 20-бітне зміщення до PC).

Бітовий формат інструкції схожий на інструкції завантаження і зберігання (load-store) з відносною адресацією. Інструкція () заповнює верхні 20 біт регістра заданим значенням (нижні 12 біт обнулюються), а () — додатково складає результат з поточним значенням PC. Ці інструкції корисні при генерації позиційно-незалежного коду.

Для реалізації безумовних переходів RISC-V також використовує інструкції і . У такому випадку нульовий регістр виступає як регістр зв'язку, і таким чином адреса повернення не зберігається.

Реалізації

Станом на вересень 2018 року існують наступні реалізації процесорної архітектури RISC-V: Ядра N25 і NX25 від компанії Чотириядерна 64-бітна система на кристалі U54 від компанії SiFive 32-розрядний контролер GAP8 від фірми GreenWaves Technologies

Програмне забезпечення Для роботи над дизайном процесора існує компілятор зі спеціалізованої мови програмування , результатом виконання якого є код на Verilog.

Для розробки прикладного і системного програмного забезпечення існує порт GNU Compiler Collection (GCC) для RISC-V, включно зі налагоджувачем GDB. Також цю архітектуру підтримує LLVM, симулятор OVPsim, симулятор Spike, і симулятор у QEMU.

На RISC-V портовано ядро ОС Linux, а також операційні системи FreeBSD і NetBSD. Чорновий варіант порту FreeBSD було здійснено у лютому 2016, стабілізація відбулася у FreeBSD 11.0.

Джерела