RISC-V (вимовляється "risk-five") — відкрита архітектура інструкцій центрального процесора, що базується на принципах RISC. Проект розпочався у 2010 році в Університеті Каліфорнії (Берклі), до роботи долучилися також багато ентузіастів поза межами університету.
Розробка | Університет Каліфорнії (Берклі) |
---|---|
Розрядність | 32, 64 або 128 біт |
Поява | 2010 |
Версія | 2.2 |
Тип архітектури | RISC |
Інструкції | змінної довжини |
Реалізація переходів | Compare-and-branch |
Розширення | M, A, F, D, Q, C, P |
Відкритий дизайн | так |
Регістри | |
Загального призначення | 16, 32 (включно з одним регістром, що завжди повертає нуль при читанні) |
Рухома кома | 32 (опційно) |
Станом на травень 2017 року, архітектура команд для програм користувача має версію 2.2, в той час як привілейована частина (для використання ядром операційної системи) поки є чорновою версією 1.10.
Історія Редагувати
Термін «RISC» вперше з'явився на початку 1980-х років. До цього існували деякі[які?] ідеї, що процесори з простою архітектурою можуть бути ефективними, але дизайн таких процесорів детально описаний не був.
Набір процесорних інструкцій DLX з'явився у 1990-му році для першого видання книги Computer Architecture: A Quantitative Approach і позиціонувався в основному для навчальних цілей. Автором розробки був Девід Паттерсон; у академічних колах і серед ентузіастів було здійснено кілька реалізацій DLX для FPGA. Комерційного застосування DLX не мав.
Набір команд процесорів ARM версії 2 і старіших є суспільним надбанням, і все ще[коли?] підтримується набором компіляторів gcc. Існує три описи апаратної частини цієї архітектури, але реалізація їх «у кремнії» відсутня.
Існує також дизайн OpenRISC (також базується на DLX), що є продуктом з відкритим кодом і також підтримується gcc. Втім, кількість комерційних реалізацій OpenRISC також незначна.
Особливості дизайну Редагувати
Набори регістрів Редагувати
RISC-V має 32 (у вбудовуваному варіанті — 16) регістрів для зберігання цілих чисел. Якщо підтримується розширення з рухомою комою, процесор має підтримувати 32 регістри з рухомою комою. Інструкції процесора (за винятком тих, що здійснюють доступ до пам'яті) оперують лише з регістрами.
Перший цілочисельний регістр завжди повертає нуль при читанні, а запис у нього не має ефекту. Решта регістрів — загального призначення. Використання нульового регістра дає змогу реалізувати компактніший набір інструкцій (наприклад, інструкцію RY := RX
можна замінити еквівалентною RY := RX + R0
).
Існують також регістри керування і статусу. Програми користувача мають доступ лише до тих з них, що пов'язані з вимірюванням швидкодії і керуванням обчислень з рухомою комою.
Інструкції, що зчитують або записують багато регістрів за раз, відсутні: проектанти дійшли до висновку, що такі команди не є необхідними, складні у реалізації і занадто повільні.
Виклик підпрограм, переходи і розгалуження Редагувати
Для виклику підпрограм архітектура RISC-V має інструкцію jal
(англ. jump and link); адреса для повернення з підпрограми записується у наданий регістр. Такий підхід є швидшим, ніж запис адреси у пам'ять (стек). Зміщення у інструкції jal
кодується 20-бітним знаковим числом, яке множиться на 2 і додається до поточного лічильника команд. Якщо обчислене таким чином значення не є кратним 4, процесор може згенерувати виняток.
Непрямий перехід здійснюється інструкцією jalr
(англ. jump and link-register), яка схожа на jal
, але адреса обчислюється шляхом додавання значення базового регістра і 12-бітного зміщення (jal
додає 20-бітне зміщення до PC).
Бітовий формат інструкції jalr
схожий на інструкції завантаження і зберігання (load-store) з відносною адресацією. Інструкція lui
(англ. load upper immediate) заповнює верхні 20 біт регістра заданим значенням (нижні 12 біт обнулюються), а auipc
(англ. add upper immediate to PC) — додатково складає результат з поточним значенням PC. Ці інструкції корисні при генерації позиційно-незалежного коду[en].
Для реалізації безумовних переходів RISC-V також використовує інструкції jal
і jalr
. У такому випадку нульовий регістр виступає як регістр зв'язку, і таким чином адреса повернення не зберігається.
Реалізації Редагувати
Станом на вересень 2018 року існують наступні реалізації процесорної архітектури RISC-V:
- Ядра N25 і NX25 від компанії Andes Technology[en]
- Чотириядерна 64-бітна система на кристалі U54 від компанії SiFive
- 32-розрядний контролер GAP8 від фірми GreenWaves Technologies
Програмне забезпечення Редагувати
Для роботи над дизайном процесора існує компілятор зі спеціалізованої мови програмування Chisel[en], результатом виконання якого є код на Verilog.
Для розробки прикладного і системного програмного забезпечення існує порт GNU Compiler Collection (GCC) для RISC-V, включно зі налагоджувачем GDB. Також цю архітектуру підтримує LLVM, симулятор OVPsim, симулятор Spike, і симулятор у QEMU.
На RISC-V портовано ядро ОС Linux, а також операційні системи FreeBSD і NetBSD. Чорновий варіант порту FreeBSD було здійснено у лютому 2016, стабілізація відбулася у FreeBSD 11.0.
Джерела Редагувати
- . riscv.org. Regents of the University of California. Архів оригіналу за 13 червня 2018. Процитовано 25 серпня 2014.
- ↑ Waterman, Andrew; Asanović, Krste. . University of California, Berkeley. EECS-2016-118. Архів оригіналу за 28 серпня 2017. Процитовано 25 травня 2017.
- Patterson, David A; Ditzel, David R. (October 1980). The Case for the Reduced Instruction Set Computer. ACM SIGARCH Computer Architecture News 8 (6): 25. doi:10.1145/641914.641917.
- . OpenCores. OpenCores. Архів оригіналу за 10 жовтня 2014. Процитовано 26 серпня 2014.
- . OpenCores. OpenCores. Архів оригіналу за 6 липня 2014. Процитовано 26 серпня 2014.
- . UC Berkeley. Regents of the University of California. Архів оригіналу за 5 квітня 2015. Процитовано 12 лютого 2015.
- . Архів оригіналу за 25 серпня 2018. Процитовано 24 серпня 2018.
- . Архів оригіналу за 4 квітня 2018. Процитовано 24 серпня 2018.
Помилка цитування: Тег <ref>
з назвою "isacompressed", визначений у <references>
, не використовується в попередньому тексті.
Помилка цитування: Тег <ref>
з назвою "rocketsspeed", визначений у <references>
, не використовується в попередньому тексті.
Помилка цитування: Тег <ref>
з назвою "riscvc", визначений у <references>
, не використовується в попередньому тексті.
Помилка цитування: Тег <ref>
з назвою "shakti", визначений у <references>
, не використовується в попередньому тексті.
Помилка цитування: Тег <ref>
з назвою "iitmadrasospp", визначений у <references>
, не використовується в попередньому тексті.
<ref>
з назвою "lowrisc", визначений у <references>
, не використовується в попередньому тексті.Це незавершена стаття про апаратне забезпечення. Ви можете допомогти проєкту, виправивши або дописавши її. |
Ця стаття потребує додаткових посилань на джерела для поліпшення її перевірності. (жовтень 2019) |