RISC-V

редактировать
Архитектура аппаратного набора команд ЦП с открытым исходным кодом
RISC-V
RISC -V-logo.svg
DesignerКалифорнийский университет, Беркли
Биты
  • 32
  • 64
  • 128
Представлены2010
Версия
  • непривилегированный ISA 20191213,
  • привилегированный ISA 20190608
Дизайн RISC
ТипЗагрузка-сохранение
Кодировка Переменная
Ветвление Сравнение-и-ветвление
Порядок байтов Маленький
Размер страницы4 KiB
Расширения
  • M: Умножение
  • A: Атомарное
  • F: Плавающая точка
  • D: FPДвойное
  • Q: FPКвадратное
  • C: Сжатые инструкции
  • A: Атомика - LR / SC fetch-and-op
ОткрытьДа, без лицензионных отчислений
Регистры
Общего назначения
  • 16
  • 32
(включая один регистр с постоянным нулем)
Плавающая точка 32 (необязательно)

RISC-V (произносится как «риск-пять») - это открытый стандарт архитектура набора команд (ISA), основанная на установленном компьютере с сокращенным набором команд ( RISC) принципы. В отличие от большинства других проектов ISA, RISC-V ISA предоставляется по лицензиям с открытым исходным кодом, которые не требуют платы за использование. Ряд компаний предлагают или объявили об оборудовании RISC-V, доступны операционные системы с открытым исходным кодом с поддержкой RISC-V, а набор инструкций поддерживается в нескольких популярных программах инструментальные средства.

Примечательные особенности RISC-V ISA включать архитектуру загрузки-сохранения, битовые шаблоны для упрощения мультиплексоров в ЦП, IEEE 754 с плавающей запятой, архитектурно нейтральный дизайн и размещение наиболее значимых битов в фиксированное местоположение для скорости расширение знака. Набор инструкций разработан для широкого круга задач. Он имеет переменную ширину и расширяемый, поэтому всегда можно добавить больше битов кодирования. Он поддерживает три ширины слова: 32, 64 и 128 бит, а также множество подмножеств. Определения каждого подмножества незначительно различаются для трех значений ширины слова. Подмножества поддерживают небольшие встроенные системы, персональные компьютеры, суперкомпьютеры с векторными процессорами и складские 19-дюймовые стойки, монтируемые параллельные компьютеры.

Пространство набора инструкций для 128-битной расширенной версии ISA было зарезервировано, потому что 60-летний опыт работы в отрасли показал, что самой неисправимой ошибкой при разработке набора инструкций является нехватка памяти адресного пространства. По состоянию на 2016 год 128-битный ISA намеренно остается неопределенным, потому что практического опыта работы с такими большими системами памяти пока так мало. Есть предложения реализовать инструкции переменной ширины длиной до 864 бит, что в 27 раз больше обычной длины.

Проект начался в 2010 году в Калифорнийском университете в Беркли вместе со многими добровольцами. не связан с университетом. В отличие от других академических проектов, которые обычно оптимизируются только для простоты изложения, дизайнеры предполагали, что набор команд RISC-V можно будет использовать для практических компьютеров.

По состоянию на июнь 2019 года версия 2.2 ISA пользовательского пространства и версия 1.11 привилегированного ISA заморожены, что позволяет продолжить разработку программного и аппаратного обеспечения. ISA пользовательского пространства, теперь переименованная в Unprivileged ISA, была обновлена, ратифицирована и заморожена как версия 20191213. Спецификация отладки доступна как черновик, версия 0.13.2.

Содержание
  • 1 Обоснование
  • 2 История
    • 2.1 RISC-V Foundation и RISC-V International
    • 2.2 Награды
  • 3 Дизайн
    • 3.1 База и расширения ISA
    • 3.2 Наборы регистров
    • 3.3 Доступ к памяти
    • 3.4 Непосредственно
    • 3.5 Вызов подпрограмм, переходы и переходы
    • 3.6 Арифметические и логические наборы
    • 3.7 Операции с атомарной памятью
    • 3.8 Сжатое подмножество
    • 3.9 Встроенное подмножество
    • 3.10 Привилегированный набор команд
    • 3.11 Битовые операции
    • 3.12 Упакованный SIMD
    • 3.13 Векторный набор
    • 3.14 Внешняя система отладки
  • 4 Реализации
    • 4.1 Существующие
    • 4.2 В разработке
    • 4.3 Открытый исходный код
  • 5 Программное обеспечение
  • 6 См. также
  • 7 Ссылки
  • 8 Дополнительная литература
  • 9 Внешние ссылки
Обоснование
Прототип процессора RISC-V, январь 2013 г.

Проектирование ЦП требует опыта проектирования в нескольких областях: электроника цифровая логика, компиляторы и операционные системы. Чтобы покрыть расходы такой команды, коммерческие поставщики компьютерных разработок, такие как ARM Holdings и MIPS Technologies взимают роялти за использование своих разработок, патентов и авторских прав. Они также часто требуют соглашений о неразглашении перед выпуском документов, в которых подробно описаны преимущества их проектов. Во многих случаях они никогда не описывают причины своего выбора дизайна.

RISC-V был начат с целью сделать практическую ISA с открытым исходным кодом, пригодную для академического использования и в любом аппаратном или программном обеспечении без лицензионных отчислений. Кроме того, обоснование каждой части проекта объясняется, по крайней мере, в общих чертах. Авторы RISC-V академичны, но имеют значительный опыт компьютерного дизайна. RISC-V ISA является прямым развитием серии академических проектов компьютерного дизайна. Частично он был создан для помощи таким проектам.

Чтобы создать большое, непрерывное сообщество пользователей и, таким образом, накапливать проекты и программное обеспечение, дизайнеры RISC-V ISA планировали поддерживать широкий спектр практических применений: Небольшие, быстрые и малопотребляющие реализации в реальном мире без чрезмерной архитектуры для конкретной микроархитектуры. Необходимость в большой базе участников - одна из причин, по которой RISC-V был разработан для стольких целей.

Разработчики говорят, что набор инструкций является основным интерфейсом в компьютере, потому что он находится между оборудованием и программным обеспечением. Если бы хороший набор инструкций был открыт и доступен для всех, то он должен резко снизить стоимость программного обеспечения, разрешив гораздо большее повторное использование. Это также должно усилить конкуренцию между поставщиками оборудования, которые могут использовать больше ресурсов для проектирования и меньше для поддержки программного обеспечения.

Разработчики утверждают, что новые принципы становятся редкостью в разработке наборов инструкций, поскольку наиболее успешные разработки последних сорок лет стали все более похожими. Из тех, кто потерпел неудачу, большинство сделали это потому, что их спонсирующие компании потерпели неудачу с коммерческой точки зрения, а не потому, что наборы инструкций были плохими технически. Таким образом, хорошо спроектированный открытый набор инструкций, разработанный с использованием устоявшихся принципов, должен получить долгосрочную поддержку со стороны многих поставщиков.

RISC-V также поддерживает академическое использование дизайнеров. Простота целочисленного подмножества позволяет студентам выполнять базовые упражнения. Целочисленное подмножество - это простой ISA, позволяющий программному обеспечению управлять исследовательскими машинами. ISA переменной длины позволяет выполнять расширения как для упражнений студентов, так и для исследований. Разделенный набор привилегированных инструкций позволяет исследовать поддержку операционных систем без изменения компиляторов. Открытая интеллектуальная собственность RISC-V позволяет публиковать, повторно использовать и изменять его проекты.

История

Термин RISC датируется примерно 1980 годом. некоторые знания о том, что более простые компьютеры могут быть эффективными, но принципы проектирования не были широко описаны. Простые и эффективные компьютеры всегда вызывали академический интерес. Ученые создали набор инструкций RISC DLX для первого издания книги «Архитектура компьютера: количественный подход» в 1990 году. Дэвид Паттерсон был автором, а позже помогал RISC-V. DLX был предназначен для использования в образовательных целях; ученые и любители реализовали его с использованием программируемых вентильных матриц, но это не имело коммерческого успеха. Процессоры ARM версий 2 и ранее имели общедоступный набор инструкций, и он по-прежнему поддерживается GNU Compiler Collection (GCC), популярным компилятором бесплатного программного обеспечения. Для этой ISA существует три ядра с открытым исходным кодом, но они не были произведены. OpenRISC - это ISA с открытым исходным кодом, основанная на DLX, с соответствующими конструкциями RISC. Он полностью поддерживается реализациями GCC и Linux, хотя имеет несколько коммерческих реализаций.

Крсте Асанович из Калифорнийского университета в Беркли нашел множество применений для компьютерной системы с открытым исходным кодом. В 2010 году он решил разработать и опубликовать один в «коротком трехмесячном проекте за лето». План состоял в том, чтобы помочь как академическим, так и промышленным пользователям. Дэвид Паттерсон из Беркли также поддержал эти усилия. Первоначально он определил свойства Berkeley RISC, и RISC-V - один из его длинных серий совместных исследовательских проектов RISC. На этом этапе студенты недорого предоставляли начальное программное обеспечение, моделирование и проекты ЦП.

Авторы RISC-V и их учреждение первоначально предоставили документы ISA и несколько проектов ЦП по лицензиям BSD, которые позволять производным продуктам - таким как проекты микросхем RISC-V - быть либо открытыми и бесплатными, либо закрытыми и проприетарными. Сама спецификация ISA (то есть кодировка набора инструкций) была опубликована в 2011 году, все права защищены. Фактический текст технического отчета (выражение спецификации) был позже передан под лицензию Creative Commons, чтобы позволить его улучшать внешними участниками через RISC-V Foundation, а затем RISC-V International.

Полная история RISC-V опубликована на сайте RISC-V International.

RISC-V Foundation и RISC-V International

Коммерческим пользователям требуется ISA быть стабильным, прежде чем они смогут использовать его в продукте, который может прослужить много лет. Для решения этой проблемы был создан фонд RISC-V Foundation для владения, обслуживания и публикации интеллектуальной собственности, связанной с определением RISC-V. Первоначальные авторы и владельцы отказались от своих прав на фонд.

В ноябре 2019 года фонд RISC-V объявил, что переедет в Швейцарию, сославшись на опасения по поводу торговых правил США. С марта 2020 года организация получила название RISC-V International, швейцарская некоммерческая бизнес-ассоциация.

С 2019 года RISC-V International свободно публикует документы, определяющие RISC-V, и разрешает неограниченное использование ISA для разработка программного и аппаратного обеспечения. Однако только члены RISC-V International могут голосовать за одобрение изменений, и только членские организации используют логотип совместимости с товарным знаком .

Награды

  • 2017: Премия «Выбор аналитика Linley Group» за Best Technology (для набора команд)
Дизайн

База ISA и расширения

RISC-V имеет модульную конструкцию, состоящую из альтернативных базовых частей с добавленными дополнительными расширениями. База ISA и ее расширения разрабатываются совместными усилиями промышленности, исследовательского сообщества и образовательных учреждений. База определяет инструкции (и их кодирование), поток управления, регистры (и их размеры), память и адресацию, логические (то есть целочисленные) манипуляции и вспомогательные функции. Только на базе можно реализовать упрощенный компьютер общего назначения с полной программной поддержкой, включая компилятор общего назначения.

Стандартные расширения предназначены для работы со всеми стандартными базами и друг с другом без конфликтов.

Многие компьютеры RISC-V могут реализовать компактное расширение для уменьшения энергопотребления, размера кода и использования памяти. В планах на будущее также поддержка гипервизоров и виртуализации.

Вместе с расширением набора команд супервизора, S, RVGC определяет все инструкции, необходимые для удобной поддержки операционной системы общего назначения.

База и расширения ISA (20191213)
ИмяОписаниеВерсияСостояние
База
RVWMOСлабая память Порядок2.0Ратифицированный
RV32IБазовый набор целочисленных команд, 32-битный2.1Ратифицированный
RV32EБазовый набор целочисленных команд (встроенный), 32-битный, 16 регистров1.9Открыть
RV64IБазовый набор целочисленных команд, 64-битный2.1Утвержденный
RV128IБазовый набор целочисленных команд, 128-битный1,7Открыть
Расширение
MСтандартное расширение для целочисленного умножения и деления2.0Утверждено
AСтандартное расширение для атомарных инструкций2.1Утверждено
FСтандартное расширение для чисел с плавающей запятой одинарной точности2.2Утверждено
DСтандартное расширение для чисел с плавающей запятой двойной точности2.2Ратифицированный
GСокращение для базового набора целых чисел (I) и более высоких расширений (MAFD)Н / ДН / Д
QСтандартное расширение для чисел с плавающей запятой четверной точности2.2Ратифицированное
Lстандартное расширение для десятичных чисел с плавающей запятой0,0Открыть
CСтандартное расширение для сжатых команд2,0Утвержденное
Bстандартное расширение для обработки битов0,92Открытое
Jстандартное расширение для динамически переводимых языков0,0Открыть
TСтандартное расширение для транзакционной памяти0,0Открыть
PСтандартное расширение для инструкций Packed-SIMD0,2Открыть
VСтандартное расширение для векторных операций0,9Открыть
NСтандартное расширение для прерываний на уровне пользователя1,1Открыть
HStanda Расширение rd для гипервизора0,4 ​​Открыть
ZiCSRРегистр управления и состояния (CSR)2.0Утверждено
ZifenceiInstruction-Fetch Fence2.0Утверждено
ZamDisaligned Atomics0,1Open
ZtsoTotal Store Ordering0,1Frozen
32-битные форматы команд RISC-V
ФорматБит
313029282726252423222120191817161514131211109876543210
Регистр / регистрfunct7rs2rs1funct3rdкод операции
Немедленноimm [11: 0]rs1funct3rdкод операции
Верхний немедленныйimm [31:12]rdкод операции
Сохранитьimm [11: 5]rs2rs1funct3imm [4: 0]код операции
Branch[12]imm [10 : 5]rs2rs1funct3imm [4: 1][11]код операции
Переход[20]imm [10: 1][11]imm [19:12]rdкод операции
  • код операции (7 бит): частично указывает, какой из 6 типов форматов команд.
  • funct7 и funct3 (10 бит): Эти два поля, кроме поля кода операции, определяют операцию, которая должна быть выполнена.
  • rs1 (5 бит): Определяет, по индексу регистр, содержащий первый операнд (т.е. регистр источника).
  • rs2 (5 бит): Определяет регистр второго операнда.
  • rd (5 бит): Определяет регистр назначения для на который будет направлен результат вычислений.

Чтобы приручить комбинации функциональных возможностей, которые могут быть реализованы, определена номенклатура, определяющая их в главе 27 текущей утвержденной спецификации непривилегированного ISA. Сначала указывается база набора команд, кодировка для RISC-V, разрядность регистра и вариант; например, RV64I или RV32E. Затем следуют буквы, указывающие реализованные расширения (как описано выше) в любом порядке. За каждой буквой может следовать старший, необязательно, за которым следует "p" и младший номер опции. Если дополнительный номер версии опущен, он по умолчанию равен 0, а если номер версии полностью опущен, он по умолчанию равен 1.0. Таким образом, RV64IMAFD может быть записан как RV64I1p0M1p0A1p0F1p0D1p0 или проще как RV64I1M1A1F1D1. Подчеркивание может использоваться между расширениями для удобства чтения, например RV32I2_M2_A2.

Базовые, расширенные целочисленные вычисления и вычисления с плавающей запятой, а также примитивы синхронизации для многоядерных вычислений, базовый и расширенный MAFD, считаются необходимыми для вычислений общего назначения и, таким образом, имеют сокращение G.

Маленький 32-битный компьютер для встроенной системы может быть RV32EC. Большой 64-битный компьютер может быть RV64GC; то есть сокращение для RV64IMAFDC.

С ростом количества расширений стандарт теперь предусматривает, что расширения должны именоваться одной буквой «Z», за которой следует буквенное имя и необязательный номер версии. Например, Zifencei называет расширение для получения инструкций. Zifencei2 и Zifencei2p0 называют версию 2.0 одинаковыми. Первая буква, следующая за «Z» по соглашению, указывает на наиболее тесно связанную категорию алфавитного расширения, IMAFDQLCBJTPVN. Таким образом, расширение Zam для смещенных атомных модулей относится к стандартному расширению "A". В отличие от односимвольных расширений, расширения Z должны быть разделены подчеркиванием, сгруппированы по категориям, а затем в алфавитном порядке внутри каждой категории. Например Zicsr Zifencei Zam.

Расширения, относящиеся к уровню привилегий супервизора, именуются таким же образом с использованием префикса "S". Расширения, относящиеся к уровню гипервизора, называются с использованием префикса "H". Расширения машинного уровня имеют префикс из трех букв «Zxm». Расширения набора команд супервизора, гипервизора и машинного уровня названы в честь менее привилегированных расширений.

Разработчики RISC-V могут создавать свои собственные нестандартные расширения набора команд. Они соответствуют соглашению об именах «Z», но с префиксом «X». Следует указывать после всех стандартных расширений, и если в списке указано несколько нестандартных расширений, они должны быть перечислены в алфавитном порядке.

Наборы регистров

Регистр. имяСимвольное. имяОписаниеСохраняется
32 целым числом регистры
x0НольВсегда ноль
x1raАдрес возврата Вызывающий объект
x2spУказатель стека Вызываемый
x3gp
x4tpУказатель потока
x5t0Временный / альтернативный адрес возвратаВызывающий
x6–7t1–2ВременныйВызывающий
x8s0/fpСохраненный указатель регистра / кадраВызываемый
x9s1Сохраненный регистрВызываемый
x10–11a0–1Аргумент функции / возвращаемое значениеВызывающий
x12–17a2–7Аргумент функцииВызывающий
x18–27s2–11Сохраненный регистрВызываемый
x28–31t3–6ВременныйВызывающий
32 плавающий- точка регистры расширения
f0–7ft0–7Временные значения с плавающей запятойВызывающий
f8–9fs0–1Сохраненные регистры с плавающей запятойCallee
f10–11fa0–1Аргументы с плавающей запятой / возвращаемые значенияВызывающий
f12–17fa2–7Аргументы с плавающей запятойВызывающий
f18–27fs2–11Сохраненные регистры с плавающей запятойCallee
f28–31ft8–11Временные значения с плавающей запятойВызывающий

RISC-V имеет 32 (или 16 во встроенном варианте) целочисленных регистров, и, когда реализовано расширение с плавающей запятой, отдельные 32 регистры с плавающей запятой. За исключением инструкций доступа к памяти, инструкции относятся только к регистрам.

Первый целочисленный регистр - это нулевой регистр, а остальные - регистры общего назначения. Сохранение в нулевом регистре не имеет никакого эффекта, а чтение всегда дает 0. Использование нулевого регистра в качестве заполнителя упрощает набор инструкций.

переместить rx в ryстановится добавить r0 в rx и сохранить в ry.

Регистры управления и состояния существуют, но программы пользовательского режима могут обращаться только к тем, которые используются для измерения производительности и управления с плавающей запятой.

Нет инструкций для сохранения и восстановления нескольких регистров. Это считалось ненужным, слишком сложным и, возможно, слишком медленным.

Доступ к памяти

Как и многие проекты RISC, RISC-V - это архитектура загрузки-сохранения : инструкции адресуют только регистры, а инструкции загрузки и сохранения передаются в память и из памяти.

Большинство инструкций загрузки и сохранения включают 12-битное смещение и два идентификатора регистра. Один регистр - это базовый регистр. Другой регистр - это источник (для магазина) или назначения (для загрузки).

Смещение добавляется к базовому регистру для получения адреса. Формирование адреса в виде базового регистра плюс смещение позволяет отдельным инструкциям обращаться к структурам данных. Например, если базовый регистр указывает на вершину стека, отдельные инструкции могут обращаться к локальным переменным подпрограммы в стеке. Точно так же инструкции загрузки и сохранения могут обращаться к структуре в стиле записи или к отображенному в память устройству ввода-вывода. Использование регистра постоянного нуля в качестве базового адреса позволяет отдельным командам обращаться к памяти с адресом около нуля.

Память адресуется как 8-битные байты, причем слова находятся в порядке little-endian. Слова, вплоть до размера регистра, могут быть доступны с помощью инструкций загрузки и сохранения.

Доступные адреса памяти не нужно выравнивать по их размеру слова, но доступ к выровненным адресам может быть быстрее; например, простые ЦП могут реализовывать невыровненный доступ с медленной программной эмуляцией, вызванной прерыванием сбоя выравнивания.

Как и многие наборы команд RISC (и некоторые наборы команд компьютера со сложным набором команд (CISC), такие как семейства x86 и IBM System / 360 ), в RISC-V отсутствуют режимы адресации, которые осуществляют обратную запись в регистры. Например, он не увеличивает автоматически.

RISC-V управляет системами памяти, которые совместно используются процессорами или потоками, гарантируя, что поток выполнения всегда видит свои операции с памятью в запрограммированном порядке. Но между потоками и устройствами ввода-вывода RISC-V упрощен: он не гарантирует порядок операций с памятью, за исключением конкретных инструкций, таких как инструкция забор.

A заборгарантирует, что результаты операции-предшественники видны операциям-преемникам других потоков или устройств ввода-вывода. заборможет гарантировать порядок комбинаций как операций ввода-вывода, так и отображенных в память. Например. он может разделять операции чтения и записи в память, не влияя на операции ввода-вывода. Или, если система может управлять устройствами ввода-вывода параллельно с памятью, заборне заставляет их ждать друг друга. Один ЦП с одним потоком может декодировать заборкак nop.

RISC-V с прямым порядком байтов, чтобы напоминать другие знакомые успешные компьютеры, например, x86. Это также снижает сложность ЦП и немного снижает затраты, поскольку он считывает слова всех размеров в одном и том же порядке. Например, набор команд RISC-V декодирует, начиная с байта инструкции с наименьшим адресом. Спецификация оставляет открытой возможность использования нестандартных систем с прямым порядком байтов или двоичным порядком байтов.

Некоторые процессоры RISC (например, MIPS, PowerPC, DLX и Berkeley RISC-I) размещают 16 бит смещения в загрузках и хранилищах. Они устанавливают старшие 16 бит инструкцией загрузки старшего слова. Это позволяет легко устанавливать значения верхнего полуслова без сдвига битов. Однако в большинстве случаев команда верхнего полуслова создает 32-битные константы, такие как адреса. RISC-V использует комбинацию, подобную SPARC, из 12-битных смещений и 20-битных команд верхнего уровня. Меньшее 12-битное смещение помогает компактным 32-битным инструкциям загрузки и сохранения выбирать два из 32 регистров, но при этом иметь достаточно бит для поддержки кодирования инструкций переменной длины в RISC-V.

Немедленно

RISC-V обрабатывает 32-битные константы и адреса с помощью инструкций, которые устанавливают старшие 20 бит 32-битного регистра. Загрузить верхний немедленный luiзагружает 20 битов в биты с 31 по 12. Затем вторая инструкция, такая как addi, может установить нижние 12 бит.

Этот метод расширен, чтобы разрешить позиционно-независимый код путем добавления инструкции auipc, которая генерирует 20 старших битов адреса путем добавления смещения к счетчику программы и сохранения результат в базовый регистр. Это позволяет программе генерировать 32-битные адреса, относящиеся к счетчику программы.

Базовый регистр часто может использоваться как есть с 12-битными смещениями загрузок и запоминаний. При необходимости addiможет установить младшие 12 бит регистра. В 64-битных и 128-битных ISA luiи auipcрасширяют результат с помощью знака, чтобы получить больший адрес.

Некоторые быстрые процессоры могут интерпретировать комбинации инструкций как отдельные слитые инструкции. luiили auipcмогут быть хорошими кандидатами для объединения с addi, load или store.

Вызов подпрограмм, переходы и переходы

Вызов подпрограммы RISC-V jal(переход и ссылка) помещает свой адрес возврата в регистр. Это быстрее во многих компьютерных конструкциях, потому что это экономит доступ к памяти по сравнению с системами, которые помещают адрес возврата непосредственно в стек в памяти. jalимеет 20-битное смещение со знаком (дополнение до 2). Смещение умножается на 2, затем добавляется к ПК для создания относительного адреса 32-битной инструкции. Если результат не по 32-битному адресу (то есть, не делится без остатка на 4), ЦП может вызвать исключение .

ЦП RISC-V перейти к вычисленным адресам с использованием регистра перехода и связывания, инструкция jalr. jalrаналогичен jal, но получает свой адрес назначения путем добавления 12-битного смещения к базовому регистру. (Напротив, jalдобавляет к ПК большее 20-битное смещение.) Битовый формат

jalrаналогичен загрузке и хранению относительно регистров. Подобно им, jalrможет использоваться с инструкциями, которые устанавливают старшие 20 бит базового регистра для создания 32-битных ветвей, либо на абсолютный адрес (используя lui), либо на Относительный к ПК (с использованием auipcдля позиционно-независимого кода ). (Использование постоянного нулевого базового адреса позволяет вызывать одиночные инструкции к небольшому (смещение), фиксированному положительному или отрицательному адресу.)

RISC-V повторяет jalи jalrдля получения безусловных 20-битных переходов относительно ПК и безусловных 12-битных переходов на основе регистров. Переходы просто делают регистр связи 0, поэтому адрес возврата не сохраняется.

RISC-V также повторно использует jalrдля возврата из подпрограммы: Для этого jalrбазовый регистр установлен как регистр связи, сохраненный jalили jalr. Смещение jalrравно нулю, а регистр связи равен нулю, так что смещения нет и адрес возврата не сохраняется.

Как и во многих проектах RISC, при вызове подпрограммы компилятор RISC-V должен использовать отдельные инструкции для сохранения регистров в стек в начале, а затем восстанавливать их из стека при выходе. RISC-V не имеет инструкций сохранения нескольких или восстановления нескольких регистров. Считалось, что это делает ЦП слишком сложным и, возможно, медленным. Это может занять больше места для кода. Разработчики планировали уменьшить размер кода с помощью библиотечных подпрограмм для сохранения и восстановления регистров.

RISC-V не имеет регистра кода условия или бита переноса. Разработчики считали, что коды условий усложняют быстрые процессоры, вынуждая взаимодействовать между инструкциями на разных этапах выполнения. Этот выбор усложняет арифметику с множественной точностью. Кроме того, несколько числовых задач требуют больше энергии. В результате предикация (условное выполнение инструкций) не поддерживается. Разработчики утверждают, что очень быстрые, неупорядоченные конструкции ЦП все равно выполняют предсказание, выполняя ветвь сравнения и условный код параллельно, а затем отбрасывая эффекты неиспользуемого пути. Они также утверждают, что даже в более простых процессорах предсказание менее ценно, чем предсказание ветвления, которое может предотвратить большинство остановок, связанных с условными переходами. Код без предикации больше, с большим количеством ветвей, но они также утверждают, что сжатый набор инструкций (такой как набор C RISC-V) решает эту проблему в большинстве случаев.

Вместо этого RISC-V имеет короткие ветви, которые выполнять сравнения: равно, не равно, меньше, без знака меньше, больше или равно и без знака больше или равно. Десять операций сравнения-ветвления реализованы только с шестью инструкциями, путем изменения порядка операндов в ассемблере . Например, переход, если он больше, чем может быть выполнен на меньшее, чем с обратным порядком операндов.

Ветви сравнения имеют двенадцатибитовый диапазон со знаком и переходят относительно ПК.

В отличие от некоторых архитектур RISC, RISC-V не включает в себя слот задержки перехода, позицию после инструкции перехода, которая может быть заполнена инструкцией, которая выполняется независимо от того, выполняется переход или нет. В RISC-V отсутствует слот задержки ветвления, поскольку он усложняет многоцикловые ЦП, суперскалярные ЦП и длинные конвейеры. Динамические предикторы ветвления достаточно хорошо себя зарекомендовали, чтобы уменьшить потребность в отложенных ветвях.

При первом столкновении с ветвью процессоры RISC-V должны предположить, что относительное ветвление отрицательное (т. Е. Знак бит смещения равен "1"). Это предполагает, что обратная ветвь представляет собой цикл, и обеспечивает направление по умолчанию, чтобы простые конвейерные процессоры могли заполнить свой конвейер инструкций. Помимо этого, RISC-V не требует предсказания ветвления, но базовые реализации могут его добавлять. RV32I резервирует пространство инструкций «HINT», которое в настоящее время не содержит никаких подсказок по ветвям.

Арифметические и логические наборы

RISC-V разделяет математику на минимальный набор целых чисел инструкции (набор I) с сложением, вычитанием, сдвигом, побитовой логикой и ветвями сравнения. Они могут имитировать большинство других наборов команд RISC-V с помощью программного обеспечения. (Атомарные инструкции - заметное исключение.) RISC-V в настоящее время не хватает счетчика начального нуля и операций с битовым полем, обычно используемых для ускорения программного обеспечения с плавающей запятой в чисто целочисленном процессоре.

Инструкции целочисленного умножения (набор M) включают знаковое и беззнаковое умножение и деление. Включены целочисленные умножения и деления двойной точности, как умножения и деления, которые производят старшее слово результата. Документ ISA рекомендует разработчикам процессоров и компиляторов объединить стандартизированную последовательность команд умножения и деления с высокой и низкой точностью в одну операцию, если это возможно.

Инструкции с плавающей запятой (набор F) включают арифметика одинарной точности, а также ветви сравнения, аналогичные целочисленной арифметике. Для этого требуется дополнительный набор из 32 регистров с плавающей запятой. Они отделены от целочисленных регистров. Команды с плавающей запятой двойной точности (набор D) обычно предполагают, что регистры с плавающей запятой являются 64-битными (т. Е. Двойной шириной), а подмножество F согласовано с набором D. Также определен 128-битный ISA (Q) с плавающей запятой четырехкратной точности. Компьютеры RISC-V без операций с плавающей запятой могут использовать программную библиотеку с плавающей запятой.

RISC-V не вызывает исключений при арифметических ошибках, включая переполнение, недостаточное заполнение, субнормально и разделить на ноль. Вместо этого и целочисленная арифметика, и арифметика с плавающей запятой создают разумные значения по умолчанию и устанавливают биты состояния. Разделение на ноль может быть обнаружено по одной ветви после деления. Биты состояния могут быть проверены операционной системой или периодическим прерыванием.

Операции с атомарной памятью

RISC-V поддерживает компьютеры, которые разделяют память между несколькими процессорами и потоками. Стандартная модель согласованности памяти RISC-V - согласованность выпуска. То есть загрузки и сохранения обычно могут быть переупорядочены, но некоторые загрузки могут быть обозначены как операции получения, которые должны предшествовать последующим доступам к памяти, а некоторые хранилища могут быть обозначены как операции освобождения, которые должны следовать за более ранними обращениями к памяти.

базовый набор команд включает минимальную поддержку в виде инструкции забор для принудительного упорядочивания памяти. Хотя этого достаточно (забор r, rwобеспечивает получение и забор rw, wобеспечивает освобождение), комбинированные операции могут быть более эффективными.

Расширение операции атомарной памяти поддерживает два типа атомарных операций с памятью для согласованности выпуска. Во-первых, он предоставляет инструкции общего назначения с зарезервированной загрузкой lrи условным сохранением sc. lrвыполняет загрузку и пытается зарезервировать этот адрес для своего потока. Последующее условное сохранение scдля зарезервированного адреса будет выполнено только в том случае, если резервирование не нарушено промежуточным хранилищем из другого источника. В случае успешного сохранения в регистр помещается ноль. Если это не удалось, ненулевое значение указывает на то, что программе необходимо повторить операцию. В любом случае резервирование снимается.

Вторая группа атомарных инструкций выполняет последовательности чтение-изменение-запись : загрузка (которая, возможно, является загрузкой-захватом) в регистр назначения, затем операция между загруженным значением и исходным регистром, затем сохранение результата (которое, возможно, может быть хранением-релизом). Создание дополнительных барьеров памяти позволяет комбинировать операции. Необязательные операции включаются битами получения и выпуска, которые присутствуют в каждой атомарной инструкции. RISC-V определяет девять возможных операций: своп (напрямую использовать значение исходного регистра); Добавить; побитовое и, или, и исключающее-ИЛИ; и знаковый и беззнаковый минимум и максимум.

Проект системы может оптимизировать эти комбинированные операции больше, чем lrи sc. Например, если регистр назначения для свопа имеет постоянный ноль, загрузка может быть пропущена. Если сохраненное значение не изменилось с момента загрузки, оно может быть пропущено.

IBM System / 370 и его преемники, включая z / Architecture и x86, оба реализуют инструкцию compare-and-swap (cas), которая проверяет и условно обновляет местоположение в памяти: если местоположение содержит ожидаемое старое значение, casзаменяет его заданным новым значением; Затем он возвращает указание, внесено ли изменение. Однако перед casобычно выполняется простая инструкция типа загрузки, чтобы получить старое значение. Классическая проблема заключается в том, что если поток считывает (загружает) значение A, вычисляет новое значение C, а затем использует (cas) для замены A на C, у него нет способа узнать, выполняются ли параллельные операции в другой поток заменил A некоторым другим значением B, а затем восстановил промежуточное значение A. В некоторых алгоритмах (например, в тех, в которых значения в памяти являются указателями на динамически выделяемые блоки) эта проблема ABA может привести к неверным результатам. В наиболее распространенном решении используется инструкция casдвойной ширины для обновления как указателя, так и соседнего счетчика; К сожалению, такая инструкция требует специального формата инструкции для указания нескольких регистров, выполнения нескольких операций чтения и записи и может иметь сложную операцию по шине.

Альтернатива lr/scболее эффективна. Обычно для этого требуется только одна загрузка памяти, и желательно минимизировать медленные операции с памятью. Это также точно: он контролирует все обращения к ячейке памяти, а не просто обеспечивает битовый шаблон. Однако, в отличие от cas, он может разрешить livelock, при котором два или более потоков неоднократно вызывают сбой инструкций друг друга. RISC-V гарантирует продвижение вперед (без живой блокировки), если код следует правилам по времени и последовательности инструкций: 1) Он должен использовать только подмножество I. 2) Чтобы предотвратить повторяющиеся промахи в кэше, код (включая цикл повтора) должен занимать не более 16 последовательных инструкций. 3) Он не должен включать никаких системных или ограничительных инструкций или взятых обратных ветвей между lrи sc. 4) Обратный переход к циклу повтора должен соответствовать исходной последовательности.

В спецификации приведены примеры использования этого подмножества для блокировки структуры данных.

Сжатое подмножество

Стандартный RISC-V ISA указывает, что все инструкции 32-битные. Это делает реализацию особенно простой, но, как и другие процессоры RISC с такой кодировкой инструкций, приводит к большему размеру кода, чем в других наборах инструкций. Для компенсации 32-битные инструкции RISC-V на самом деле 30-битные; ⁄ 4 пространства кода операции зарезервировано для необязательного (но рекомендуемого) набора сжатых инструкций переменной длины, RVC, который включает 16-битные инструкции. Подобно ARM Thumb и MIPS16, сжатые инструкции являются просто псевдонимами для подмножества более крупных инструкций. В отличие от ARM Thumb или сжатого набора MIPS, пространство было зарезервировано с самого начала, поэтому отдельного режима работы нет. Стандартные и сжатые инструкции могут свободно смешиваться. (буква C)

Поскольку (как Thumb-1 и MIPS16) сжатые инструкции представляют собой просто альтернативные кодировки (псевдонимы) для выбранного подмножества более крупных инструкций, сжатие может быть реализовано в ассемблере, а не важно, чтобы компилятор даже знал об этом.

Прототип RVC был протестирован в 2011 году. Код прототипа был на 20% меньше, чем код x86 ПК и MIPS сжатый код, и на 2% больше, чем ARM код большого пальца 2. Это также существенно сократило как необходимую кэш-память, так и предполагаемое энергопотребление системы памяти.

Исследователь намеревался уменьшить двоичный размер кода для небольших компьютеров, особенно встраиваемых компьютеров систем. Прототип включал 33 наиболее часто используемых инструкции, перекодированных в компактные 16-битные форматы с использованием кодов операций, ранее зарезервированных для сжатого набора. Сжатие производилось на ассемблере без изменений компилятора. В сжатых инструкциях пропущены поля, которые часто равны нулю, используются небольшие непосредственные значения или используемые подмножества (16 или 8) регистров. addiявляется очень распространенным и часто сжимаемым.

Большая разница в размере по сравнению с набором Thumb для ARM возникла из-за того, что RISC-V и прототип не имеют инструкций для сохранения и восстановления нескольких регистров. Вместо этого компилятор сгенерировал обычные инструкции для доступа к стеку. Затем прототип RVC-ассемблера часто преобразовывал их в сжатые формы, которые были вдвое меньше. Однако это по-прежнему занимало больше места для кода, чем инструкции ARM, которые сохраняют и восстанавливают несколько регистров. Исследователь предложил модифицировать компилятор для вызова библиотечных подпрограмм для сохранения и восстановления регистров. Эти подпрограммы, как правило, остаются в кэше кода и, таким образом, работают быстро, хотя, вероятно, не так быстро, как инструкция сохранения нескольких значений.

Стандартный RVC требует периодического использования 32-битных инструкций. Несколько нестандартных предложений RVC завершены, не требуют 32-битных инструкций и, как говорят, имеют более высокую плотность, чем стандартные RVC. Другое предложение основано на них и утверждает, что также использует меньший диапазон кодирования.

Встроенное подмножество

Набор инструкций для самых маленьких встроенных процессоров (набор E) сокращается другими способами: только 16 из 32 целочисленных регистров поддерживаются. Инструкции с плавающей запятой не должны поддерживаться (спецификация запрещает это как неэкономичное), поэтому необходимо использовать программную библиотеку с плавающей запятой. Рекомендуется сжатый набор C. Привилегированный набор команд поддерживает только машинный режим, пользовательский режим и схемы памяти, в которых используется перемещение базового и привязанного адресов.

Обсуждался профиль микроконтроллера для RISC-V, чтобы облегчить разработку глубоко встроенные системы. Он основан на более быстрой и простой поддержке прерываний на языке C, упрощенных режимах безопасности и упрощенном двоичном интерфейсе приложения POSIX.

Корреспонденты также предложили нестандартный 16-разрядный RV16E меньшего размера. ISA: несколько серьезных предложений будут использовать 16-битные инструкции C с 8x16-битными регистрами. В первоапрельской шутке было предложено очень практичное решение: использовать целочисленные регистры 16x16 бит со стандартными ISA EIMC (включая 32-битные инструкции). Шутка заключалась в том, чтобы предложить переключение банков, когда 32 -битный ЦП будет явно лучше с большим адресным пространством.

Набор привилегированных инструкций

ISA RISC-V включает отдельную спецификацию набора привилегированных инструкций. По состоянию на август 2019 года версия 1.11 ратифицирована RISC-V International.

Версия 1.11 спецификации поддерживает несколько типов компьютерных систем:

  1. Системы, которые имеют только машинный режим, возможно, для встроенных систем,
  2. Системы как с машинным режимом (для супервизора ), так и с пользовательским режимом для реализации операционных систем, которые запускают ядро ​​ в привилегированном режиме.
  3. Системы с машинный режим, гипервизоры, несколько супервизоров и пользовательские режимы для каждого супервизора.

Это примерно соответствует системам с максимум четырьмя кольцами привилегий и безопасностью: машина, гипервизор, супервизор и пользователь. Также ожидается, что каждый уровень будет иметь тонкий слой стандартизированного вспомогательного программного обеспечения, которое взаимодействует с более привилегированным уровнем или оборудованием.

Общий план для этого ISA состоит в том, чтобы сделать режим гипервизора ортогональным в режимы пользователя и супервизора. Основная функция - это бит конфигурации, который либо разрешает коду уровня супервизора доступ к регистрам гипервизора, либо вызывает прерывание при доступе. Этот бит позволяет режиму супервизора напрямую обрабатывать оборудование, необходимое гипервизору. Это упрощает гипервизор типа 2, размещенный в операционной системе. Это популярный режим для работы на складах. Для поддержки гипервизоров типа 1, не связанных с хостом, этот бит может прерывать эти обращения к гипервизору. Бит упрощает вложение гипервизоров, в которых гипервизор работает под гипервизором. Также сказано, что он упрощает код супервизора, позволяя ядру использовать свои собственные функции гипервизора с собственным кодом ядра. В результате форма гипервизора ISA поддерживает пять режимов: машина, супервизор, пользователь, супервизор под гипервизором и пользователь под гипервизором.

Спецификация набора привилегированных команд явно определяет аппаратные потоки или харты. Множественные аппаратные потоки - обычная практика в более мощных компьютерах. Когда один поток останавливается в ожидании памяти, другие часто могут продолжить. Аппаратные потоки могут помочь лучше использовать большое количество регистров и исполнительных блоков в быстрых вышедших из строя ЦП. Наконец, аппаратные потоки могут быть простым и мощным способом обработки прерываний : не требуется сохранение или восстановление регистров, просто выполняется другой аппаратный поток. Однако в компьютере RISC-V требуется только ноль оборудования.

Существующие определения регистров управления и состояния поддерживают ошибки RISC-V и исключения памяти, а также небольшое количество прерываний. Для систем с большим количеством прерываний спецификация также определяет контроллер прерываний. Прерывания всегда начинаются на уровне машины с наивысшими привилегиями, а регистры управления каждого уровня имеют явные биты пересылки для маршрутизации прерываний к менее привилегированному коду. Например, гипервизору не нужно включать программное обеспечение, которое запускается при каждом прерывании для пересылки прерывания в операционную систему. Вместо этого при настройке он может устанавливать биты для пересылки прерывания.

В спецификации поддерживаются несколько систем памяти. Только физический подходит для самых простых встроенных систем. Существуют также три системы UNIX стиля виртуальной памяти для кэшированной памяти в системах массовой памяти. Системы виртуальной памяти имеют три размера с размером адресов 32, 39 и 48 бит. Все системы виртуальной памяти поддерживают страницы 4 KiB, многоуровневые деревья таблиц страниц и используют очень похожие алгоритмы для обхода деревьев таблиц страниц. Все они предназначены для аппаратного или программного обеспечения просмотра таблиц страниц. Чтобы дополнительно снизить затраты на обход таблицы страниц, страницы большого размера могут быть конечными страницами на более высоких уровнях дерева таблицы страниц системы. SV32 имеет двухуровневое дерево таблицы страниц и поддерживает суперстраницы размером 4 МБ. SV39 имеет трехуровневую таблицу страниц и поддерживает суперстраницы размером 2 МБ и гигабайты размером 1 ГБ. SV48 требуется для поддержки SV39. Он также имеет четырехуровневую таблицу страниц и поддерживает суперстраницы 2 МБ, гигабайты размером 1 ГБ и терапевтические операции 512 ГБ. Суперстраницы выравниваются по границам страницы для следующего наименьшего размера страницы.

Битовые манипуляции

Несанкционированная битовая обработка (B) ISA для RISC-V находилась на рассмотрении в январе 2020 года. При правильном выполнении подмножество битовых манипуляций может помочь в криптографических, графических и математических операциях. Критериями включения, задокументированными в черновике, были соответствие философии RV5 и форматам ISA, существенное улучшение плотности или скорости кода (т. Е. Сокращение инструкций по крайней мере 3 к 1) и существенные реальные приложения, включая уже существующий компилятор. поддержка. Версия 0.92 включает инструкции для подсчета начальных нулей, подсчета одного разряда, выполнения логических операций с дополнением, упаковки двух слов в один регистр, получения минимального или максимального значения, расширения знака, однобитовых операций, сдвига единиц, вращения, обобщенного битового обратное и перемешивание, или-комбинирование, размещение и извлечение битовых полей, умножение без переноса, инструкции CRC, операции с битовой матрицей (только для RV64), условное смешивание, условное перемещение, сдвиги воронки и вычисления адресов без знака.

Упакованные инструкции SIMD

Упакованные инструкции SIMD широко используются коммерческими ЦП для недорогого ускорения мультимедиа и другой обработки цифровых сигналов. Для простых, экономичных систем RISC-V базовая спецификация ISA предлагала использовать биты регистров с плавающей запятой для выполнения параллельной арифметики подслова с одной командой и несколькими данными (SIMD ).

В 2017 году поставщик опубликовал более подробное предложение в списке рассылки, и его можно назвать версией 0.1. По состоянию на 2019 год эффективность предлагаемого ISA варьируется от 2x до 5x базового процессора для различных кодеков DSP. В предложении отсутствовали форматы инструкций и предоставление лицензии RISC-V International, но оно было рассмотрено в списке рассылки. Некоторые непопулярные части этого предложения заключались в том, что он добавил код условия, первый в дизайне RISC-V, связал смежные регистры (также первый) и имеет счетчик циклов, который может быть трудно реализовать в некоторых микроархитектурах.

Предыдущая, хорошо зарекомендовавшая себя реализация для 64-битного ЦП была мультимедийными инструкциями PA-RISC: Multimedia Acceleration eXtensions. Он увеличил производительность ЦП при выполнении задач обработки цифровых сигналов в 48 или более раз, что позволило использовать практические видео кодеки в реальном времени в 1995 году. Помимо своей собственной 64-битной математики, ЦП PA-RISC MAX2 мог выполнять арифметические операции. сразу на четырех 16-битных подсловах, с несколькими методами переполнения. Он также мог перемещать подслова на разные позиции. PA-RISC MAX2 был намеренно упрощен. Ему не хватало поддержки 8-битных или 32-битных подслов. Размер подслова 16 бит был выбран для поддержки большинства задач цифровой обработки сигналов. Эти инструкции были недорогими в разработке и изготовлении.

Векторный набор

Предлагаемый набор команд векторной обработки может сделать упакованный набор SIMD устаревшим. Разработчики надеются обладать достаточной гибкостью, чтобы ЦП мог реализовать векторные инструкции в регистрах стандартного процессора. Это позволило бы минимальные реализации с аналогичной производительностью мультимедийной ISA, как указано выше. Однако настоящий векторный сопроцессор мог бы выполнять тот же код с более высокой производительностью.

По состоянию на 29 июня 2015 г. предложение по векторной обработке представляет собой консервативный, гибкий дизайн универсального смешанного -precision векторный процессор, подходящий для выполнения вычислительных ядер. Код будет легко переноситься на процессоры с разной длиной вектора, в идеале без перекомпиляции.

Напротив, расширения SIMD для коротких векторов менее удобны. Они используются в x86, ARM и PA-RISC. В них изменение ширины слова вынуждает изменить набор команд для расширения векторных регистров (в случае x86, с 64-битных MMX регистров на 128-битные Streaming SIMD Extensions (SSE), до 256-битного Advanced Vector Extensions (AVX) и AVX-512 ). Результатом является растущий набор инструкций и необходимость переноса рабочего кода на новые инструкции.

В векторном ISA RISC-V вместо фиксирования длины вектора в архитектуре доступна инструкция (setvl), которая принимает запрошенный размер и устанавливает минимальную длину вектора. аппаратного ограничения и требуемого размера. Таким образом, предложение RISC-V больше похоже на дизайн с длинными векторами Cray или на расширение Scalable Vector Extension от ARM. То есть каждый вектор в 32 векторах имеет одинаковую длину.

Приложение указывает общую ширину вектора, которая ему требуется, а процессор определяет длину вектора, которую он может предоставить с доступными ресурсами на кристалле. Это принимает форму инструкции (vsetcfg) с четырьмя непосредственными операндами, определяющими количество векторных регистров каждой необходимой доступной ширины. Общее количество не должно превышать адресуемого предела 32, но может быть меньше, если приложение не требует их всех. Длина вектора ограничена доступным объемом памяти на кристалле, деленным на количество байтов памяти, необходимых для каждой записи. (Могут также существовать дополнительные аппаратные ограничения, которые, в свою очередь, могут допускать реализации в стиле SIMD.)

Вне векторных циклов приложение может запрашивать регистры нулевого вектора, экономя операционной системе работу по их сохранению на переключение контекста.

Длина вектора не только архитектурно изменчива, но также может изменяться во время выполнения. Для достижения такой гибкости в наборе команд, вероятно, будут использоваться пути данных переменной ширины и операции переменного типа с использованием полиморфной перегрузки. Планируется, что это может уменьшить размер и сложность ISA и компилятора.

Последние экспериментальные векторные процессоры с путями данных переменной ширины также демонстрируют прибыльное увеличение количества операций в секунду (скорость), площадь (меньшая стоимость) и ватт (более длительный срок службы батареи).

В отличие от типичного современного графического процессора , нет планов по предоставлению специального оборудования для поддержки предсказания перехода. Вместо этого будет использоваться более дешевое предсказание на основе компилятора.

Внешняя система отладки

Существует предварительная спецификация для аппаратного отладчика отладчика RISC-V. Отладчик будет использовать транспортную систему, такую ​​как Joint Test Action Group (JTAG ) или универсальная последовательная шина (USB ) для доступа к регистрам отладки. Стандартный аппаратный интерфейс отладки может поддерживать либо стандартизованный абстрактный интерфейс, либо подачу инструкций.

По состоянию на январь 2017 года точная форма абстрактного интерфейса остается неопределенной, но предложения включают систему отображения памяти со стандартизованными адресами для регистров. устройств отладки или регистр команд и регистр данных, доступный для системы связи. Корреспонденты утверждают, что аналогичные системы используются Freescale интерфейсом фонового режима отладки (BDM) для некоторых процессоров, ARM, OpenRISC, и Aeroflex LEON.

. При подаче команд ЦП обрабатывает исключительную ситуацию отладки для выполнения отдельных инструкций, записанных в регистр. Он может быть дополнен регистром передачи данных и модулем для прямого доступа к памяти. Подача инструкций позволяет отладчику получать доступ к компьютеру точно так же, как и программное обеспечение. Он также сводит к минимуму изменения в ЦП и адаптируется ко многим типам ЦП. Было сказано, что это особенно подходит для RISC-V, потому что он разработан специально для многих типов компьютеров. Регистр передачи данных позволяет отладчику записывать цикл перемещения данных в ОЗУ, а затем выполнять цикл для перемещения данных в компьютер или из него со скоростью, близкой к максимальной скорости канала данных системы отладки. Корреспонденты говорят, что аналогичные системы используются MIPS Technologies MIPS, Intel Quark, Tensilica Xtensa, и для Freescale Power ISA интерфейс фонового режима отладки ЦП (BDM).

Поставщик предложил подсистему аппаратной трассировки для стандартизации, пожертвовал соответствующий дизайн, и инициировал обзор. Предложение касается аппаратного модуля, который может отслеживать выполнение кода на большинстве процессоров RV5. Чтобы снизить скорость передачи данных и разрешить более простые или менее дорогие пути для данных трассировки, предложение не генерирует данные трассировки, которые можно было бы вычислить из двоичного изображения кода. Он отправляет только данные, указывающие на «необратимые» пути в программе, например, какие условные переходы выполняются. Чтобы снизить скорость передачи данных, ветви, которые могут быть вычислены, например безусловные, не отслеживаются. Предлагаемый интерфейс между модулем и блоком управления представляет собой логический сигнал для каждого необратимого типа инструкции. Адреса и другие данные должны передаваться по специализированной шине, подключенной к соответствующим источникам данных в ЦП. Структура данных, отправляемая на внешний блок трассировки, представляет собой серию коротких сообщений с необходимыми данными. Детали канала данных намеренно не описаны в предложении, потому что некоторые из них могут иметь смысл.

Реализации

Организация RISC-V ведет список реализаций ЦП RISC-V и SoC.

Существующие

Существующие проприетарные реализации включают:

  • Alibaba Group в июле 2019 года анонсировала 16-ядерный 64-разрядный (RV64GCV) процессор XuanTie 910 вне очереди с тактовой частотой 2,5 ГГц, самый быстрый процессор RISC-V на сегодняшний день
  • Анд Technology Corporation, член-основатель RISC-V International, который присоединился к консорциуму в 2016 году, выпустил свои первые два ядра RISC-V в 2017 году. Ядра, N25 и NX25, поставляются с полной экосистемой проектирования и рядом Партнеры RISC-V. Андес активно способствует развитию экосистемы RISC-V и планирует выпустить несколько новых продуктов RISC-V в 2018 году.
  • CloudBEAR - компания, занимающаяся обработкой IP, которая разрабатывает собственные ядра RISC-V для ряда приложений.
  • Codasip и UltraSoC разработали полностью поддерживаемую интеллектуальную собственность для встроенных SOC RISC-V, которые сочетают ядра RISC-V Codasip и другие IP-адреса с отладкой, оптимизацией и аналитикой UltraSoC.
  • Cortus, платиновая основа член фонда RISC-V, имеет ряд реализаций RISC-V и полную экосистему IDE / toolchain / debug, которые он предлагает бесплатно в рамках своего бизнеса по разработке SoC.
  • GigaDevice имеет серию микроконтроллеров на базе RISC-V (RV32IMAC, серия GD32V), один из которых используется на плате Longan Nano, производимой китайской электронной компанией Sipeed.
  • GreenWaves Technologies объявила о выпуске GAP8, 32-битного 1 контроллер плюс 8 вычислительных ядер, 32-битная SoC (RV32IMC) и плата разработчика 2 февраля 018. Их плата для разработки GAPuino GAP8 начала поставляться в мае 2018 года.
  • IAR Systems выпустила первую версию IAR Embedded Workbench для RISC-V, которая поддерживает 32-битные ядра RISC-V RV32 и расширения в первой версии.. Будущие выпуски будут включать 64-разрядную поддержку и поддержку меньшего базового набора команд RV32E, а также решения по сертификации функциональной безопасности и безопасности.
  • Instant SoC Ядра RISC-V от ядер FPGA. Система на кристалле, включая ядра RISC-V, определенные в C ++.
  • SEGGER добавила поддержку ядер RISC-V в свой отладочный зонд J-Link, в свою интегрированную среду разработки Embedded Studio и их ОСРВ embOS и встроенное программное обеспечение.
  • SiFive, компания, созданная специально для разработки оборудования RISC-V, имеет модели процессоров, выпущенные в 2017 году. К ним относятся четырехъядерные, 64-разрядные ( RV64GC) система на микросхеме (SoC), способная запускать операционные системы общего назначения, такие как Linux.
  • Syntacore, член-основатель RISC-V International и один из первых коммерческих RISC -V IP vendors, разрабатывает и лицензирует семейство RISC-V IP с 2015 года. По состоянию на 2018 год линейка продуктов включает восемь 32- и 64-битных ядер, включая ядро ​​SCR1 MCU с открытым исходным кодом (RV32I / E [MC]). Первые коммерческие SoC на основе Syntacore IP были продемонстрированы в 2016 году.
  • UltraSOC предложил стандартную систему трассировки и пожертвовал реализацию.
  • Western Digital в декабре 2018 анонсировала ядро ​​RV32IMC под названием SweRV. SweRV имеет двухходовую суперскалярную и девятиступенчатую конструкцию конвейера. WD планирует использовать процессоры на основе SweRV в своих флеш-контроллерах и твердотельных накопителях и в январе 2019 года выпустила их с открытым исходным кодом для третьих лиц.
  • Espressif добавила сопроцессор RISC-V ULP в свой микроконтроллер ESP32-S2. 227>
  • С 2020 года оборонный и стратегический сектор Индии начал использовать 64-битный процессор Risecreek на базе RISC-V с частотой 100–350 МГц, разработанный Индийским технологическим институтом Мадраса (IIT-Madras) и изготовленный Intel с 22-нм технологией FinFET в рамках программы Shakti Microprocessor.

В разработке

Открытый исходный код

Существует множество проектов ЦП RISC-V с открытым кодом, в том числе:

  • ЦП Berkeley. Они реализованы на уникальном языке проектирования оборудования, Chisel, а некоторые названы в честь известных двигателей поездов:
    • 64-bit Rocket. Rocket может соответствовать компактным маломощным промежуточным компьютерам, таким как персональные устройства. Названо в честь ракеты Стивенсона.
    • 64-битной машины Беркли вышедшего из строя (БУМ). Berkeley Out-of-Order Machine (BOOM) - это синтезируемое и параметризуемое ядро ​​RV64GC RISC-V с открытым исходным кодом, написанное на языке построения оборудования Chisel. BOOM использует большую часть инфраструктуры, созданной для Rocket, и может быть использован для персональных, суперкомпьютерных и складских компьютеров.
    • Пять 32-битных ЦП Sodor от Berkeley, разработанных для студентов Содор - это вымышленный остров поездов в детских рассказах о Томасе Паровозике.
  • picorv32 Клэр Вольф, 32-битном микроконтроллере (MCU) реализация класса RV32IMC в Verilog.
  • scr1 от Syntacore, 32-битный микроконтроллерный блок (MCU) реализация класса RV32IMC в Verilog.
  • PULPino (Riscy и Zero-Riscy) от ETH Zürich / Болонский университет. ядра в PULPino реализуют простой RV32IMC ISA для микроконтроллеров (Zero-Riscy) или более мощный RV32IMFC ISA с настраиваемыми расширениями DSP для встроенной обработки сигналов.
Программное обеспечение

Обычная проблема для нового набора команд - это отсутствие дизайна ЦП и программного обеспечения. Обе проблемы ограничивают его удобство использования и сокращают принятие.

Программное обеспечение для проектирования включает в себя компилятор проектов, Chisel, который может уменьшить количество проектов до Verilog для использования в устройствах. На веб-сайте представлены данные проверки для тестирования основных реализаций.

Доступные программные инструменты RISC-V включают набор инструментов GNU Compiler Collection (GCC) (с GDB, отладчиком), набор инструментов LLVM, OVPsim симулятор (и библиотека моделей быстрых процессоров RISC-V), симулятор Spike и симулятор в QEMU (RV32GC / RV64GC).

Операционная система поддерживает ядро ​​Linux, FreeBSD и NetBSD, но инструкции для режима супервизора не были стандартизированы до июня 2019 г., так что эта поддержка является временной. Предварительный перенос FreeBSD на архитектуру RISC-V был обновлен в феврале 2016 года и отправлен в FreeBSD 11.0. Порты Debian и Fedora находятся в стадии стабилизации (оба поддерживают только 64-битный RISC-V, и нет планов по поддержке 32-битной версии). Порт Das U-Boot существует. UEFI Spec v2.7 определил привязку RISC-V, а порт TianoCore был разработан инженерами HPE и, как ожидается, будет расширен. Есть предварительный порт микроядра seL4. Hex Five выпустила первый Secure IoT Stack для RISC-V с поддержкой FreeRTOS. Также был перенесен xv6, современная повторная реализация Sixth Edition Unix в ANSI C, используемая в педагогических целях в MIT. Pharos RTOS была перенесена на 64-битный RISC-V (включая защиту времени и памяти). Также см. Сравнение операционных систем реального времени.

Существует симулятор для запуска системы RISC-V Linux в веб-браузере с использованием JavaScript.

Образовательный симулятор WepSIM реализует ( microprogrammed) подмножество инструкций RISC-V (RV32I + M) и позволяет выполнять подпрограммы на ассемблере. Более того, можно добавить больше инструкций RISC-V (путем микропрограммирования этих инструкций) и протестировать влияние их реализации. Симулятор WepSIM может использоваться из веб-браузера и облегчает изучение различных аспектов работы ЦП (микропрограммирование, прерывания, системные вызовы и т. Д.) С использованием сборки RISC-V.

QEMU поддерживает работающие (с использованием двоичного преобразования ) 32- и 64-битные системы RISC-V (например, Linux) с рядом эмулируемых или виртуализированных устройств (последовательных, параллельных, USB, сетевых, хранилище, часы реального времени, сторожевой таймер, аудио), а также запуск двоичных файлов RISC-V Linux (перевод системных вызовов в ядро ​​хоста). Он поддерживает многоядерную эмуляцию (SMP).

См. Также
Ссылки
Дополнительная литература
Внешние ссылки
Викискладе есть носители, связанные с RISC-V.

Последняя правка сделана 2021-06-03 04:38:27
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте