RISC-V
![]() | |
Розробка | Університет Каліфорнії (Берклі) |
---|---|
Розрядність | 32, 64 або 128 біт |
Поява | 2010 |
Версія | 2.2 |
Тип архітектури | RISC |
Інструкції | змінної довжини |
Реалізація переходів | Compare-and-branch |
Розширення | M, A, F, D, Q, C, P |
Відкритий дизайн | так |
Регістри | |
Загального призначення | 16, 32 (включно з одним регістром, що завжди повертає нуль при читанні) |
Рухома кома | 32 (опційно) |
RISC-V (вимовляється «risk-five») — відкрита архітектура інструкцій центрального процесора, що базується на принципах RISC. Проєкт розпочався у 2010 році в Університеті Каліфорнії (Берклі), до роботи долучилися також багато ентузіастів поза межами університету.[1]
Станом на червень 2020 року, архітектура команд для програм користувача має версію 2.2, а привілейована частина (для використання ядром операційної системи) — версію 1.11.[2]
Історія
![](http://upload.wikimedia.org/wikipedia/commons/thumb/7/7a/Yunsup_Lee_holding_RISC_V_prototype_chip.jpg/220px-Yunsup_Lee_holding_RISC_V_prototype_chip.jpg)
Термін «RISC» вперше з'явився на початку 1980-х років.[3] До цього існували деякі[які?] ідеї, що процесори з простою архітектурою можуть бути ефективними, але дизайн таких процесорів детально описаний не був.
Набір процесорних інструкцій DLX з'явився у 1990-му році для першого видання книги Computer Architecture: A Quantitative Approach і позиціонувався в основному для навчальних цілей. Автором розробки був Девід Паттерсон; у академічних колах і серед ентузіастів було здійснено кілька реалізацій DLX для FPGA. Комерційного застосування DLX не мав.
Набір команд процесорів ARM версії 2 і старіших є суспільним надбанням, і все ще[коли?] підтримується набором компіляторів gcc. Існує три описи апаратної частини цієї архітектури, але реалізація їх «у кремнії» відсутня.[4][5]
Існує також дизайн OpenRISC (також базується на DLX), що є продуктом з відкритим кодом і також підтримується gcc. Втім, кількість комерційних реалізацій OpenRISC також незначна.
Особливості дизайну
Набори регістрів
RISC-V має 32 (у вбудовуваному варіанті — 16) регістрів для зберігання цілих чисел. Якщо підтримується розширення з рухомою комою, процесор має підтримувати 32 регістри з рухомою комою. Інструкції процесора (за винятком тих, що здійснюють доступ до пам'яті) оперують лише з регістрами.
Перший цілочисельний регістр завжди повертає нуль при читанні, а запис у нього не має ефекту. Решта регістрів — загального призначення. Використання нульового регістра дає змогу реалізувати компактніший набір інструкцій (наприклад, інструкцію RY := RX
можна замінити еквівалентною RY := RX + R0
).[6]
Існують також регістри керування і статусу. Програми користувача мають доступ лише до тих з них, що пов'язані з вимірюванням швидкодії і керуванням обчислень з рухомою комою.
Інструкції, що зчитують або записують багато регістрів за раз, відсутні: проектанти дійшли до висновку, що такі команди не є необхідними, складні у реалізації і занадто повільні.[6]
Виклик підпрограм, переходи і розгалуження
Для виклику підпрограм архітектура RISC-V має інструкцію jal
(англ. jump and link); адреса для повернення з підпрограми записується у наданий регістр. Такий підхід є швидшим, ніж запис адреси у пам'ять (стек). Зміщення у інструкції jal
кодується 20-бітним знаковим числом, яке множиться на 2 і додається до поточного лічильника команд. Якщо обчислене таким чином значення не є кратним 4, процесор може згенерувати виняток.[6]
Непрямий перехід здійснюється інструкцією 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
. У такому випадку нульовий регістр виступає як регістр зв'язку, і таким чином адреса повернення не зберігається.[6]
Реалізації
Станом на вересень 2018 року існують наступні реалізації процесорної архітектури RISC-V:
- Ядра N25 і NX25 від компанії Andes Technology[en]
- Чотириядерна 64-бітна система на кристалі U54 від компанії SiFive
- 32-розрядний контролер GAP8 від фірми GreenWaves Technologies
Програмне забезпечення
Для роботи над дизайном процесора існує компілятор зі спеціалізованої мови програмування Chisel[en][7], результатом виконання якого є код на Verilog.
Для розробки прикладного і системного програмного забезпечення існує порт GNU Compiler Collection (GCC) для RISC-V, включно зі налагоджувачем GDB. Також цю архітектуру підтримує LLVM, симулятор OVPsim, симулятор Spike, і симулятор у QEMU.
На RISC-V портовано ядро ОС Linux, а також операційні системи FreeBSD і NetBSD. Чорновий варіант порту FreeBSD було здійснено у лютому 2016, стабілізація відбулася у FreeBSD 11.0. [8] [9]
Джерела
- ↑ Contributors. riscv.org. Regents of the University of California. Архів оригіналу за 13 червня 2018. Процитовано 25 серпня 2014.
- ↑ Waterman, Andrew; Asanović, Krste (3 December 2021). The RISC-V Instruction Set Manual Volume II: Privileged Architecture Document Version 20211203 (PDF). RISC-V International. Процитовано 5 November 2021.
- ↑ 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.
- ↑ Amber ARM-compatible core. OpenCores. OpenCores. Архів оригіналу за 10 жовтня 2014. Процитовано 26 серпня 2014.
- ↑ ARM4U. OpenCores. OpenCores. Архів оригіналу за 6 липня 2014. Процитовано 26 серпня 2014.
- ↑ а б в г Waterman, Andrew; Asanović, Krste. The RISC-V Instruction Set Manual, Volume I: Base User-Level ISA version 2.2. University of California, Berkeley. EECS-2016-118. Архів оригіналу за 28 серпня 2017. Процитовано 25 травня 2017.
- ↑ Chisel: Constructing Hardware in a Scala Embedded Language. UC Berkeley. Regents of the University of California. Архів оригіналу за 5 квітня 2015. Процитовано 12 лютого 2015.
- ↑ FreeBSD Wiki: RISC-V. Архів оригіналу за 25 серпня 2018. Процитовано 24 серпня 2018.
- ↑ FreeBSD Foundation: Initial FreeBSD RISC-V Architecture Port Committed. Архів оригіналу за 4 квітня 2018. Процитовано 24 серпня 2018.
Помилка цитування: Тег <ref>
з назвою "isacompressed", визначений у <references>
, не використовується в попередньому тексті.
Помилка цитування: Тег <ref>
з назвою "rocketsspeed", визначений у <references>
, не використовується в попередньому тексті.
Помилка цитування: Тег <ref>
з назвою "riscvc", визначений у <references>
, не використовується в попередньому тексті.
Помилка цитування: Тег <ref>
з назвою "shakti", визначений у <references>
, не використовується в попередньому тексті.
Помилка цитування: Тег <ref>
з назвою "iitmadrasospp", визначений у <references>
, не використовується в попередньому тексті.
<ref>
з назвою "lowrisc", визначений у <references>
, не використовується в попередньому тексті.
![]() | Це незавершена стаття про апаратне забезпечення. Ви можете допомогти проєкту, виправивши або дописавши її. |
Ця стаття потребує додаткових посилань на джерела для поліпшення її перевірності. Будь ласка, допоможіть удосконалити цю статтю, додавши посилання на надійні (авторитетні) джерела. Зверніться на сторінку обговорення за поясненнями та допоможіть виправити недоліки. Матеріал без джерел може бути піддано сумніву та вилучено. (жовтень 2019) |
|
|