RISC-V [b] (произносится как «риск-файв» [2] : 1 ) — это архитектура набора инструкций открытого стандарта (ISA), основанная на устоявшихся принципах сокращенного набора инструкций компьютера (RISC). Проект начался в 2010 году в Калифорнийском университете в Беркли , в 2015 году был передан в Фонд RISC-V, а в ноябре 2019 года — в RISC-V International, швейцарскую некоммерческую организацию. [5] [6] Как и несколько других RISC ISA, например Amber (ARMv2) или OpenRISC , RISC-V предлагается по лицензиям с открытым исходным кодом без уплаты роялти . [7] Документы, определяющие архитектуру набора инструкций RISC-V (ISA), предлагаются по лицензии Creative Commons или BSD License .
Основная поддержка RISC-V была добавлена в ядро Linux 5.17 в 2022 году вместе с его набором инструментов . [8] В июле 2023 года RISC-V в его 64-битном варианте под названием riscv64 [9] был включен в качестве официальной архитектуры дистрибутива Linux Debian в его нестабильной версии. [10] Целью этого проекта было «подготовить Debian к установке и запуску на системах, реализующих вариант RISC-V ISA». [11]
Некоторые члены RISC-V International, такие как SiFive , Andes Technology , Synopsys , Damo Academy от Alibaba , Raspberry Pi и Akeana, [12] [13] предлагают или анонсировали коммерческие системы на кристалле (SoC), которые включают в себя одно или несколько ядер ЦП, совместимых с RISC-V. [14]
Как архитектура RISC, RISC-V ISA представляет собой архитектуру загрузки-хранения . Ее инструкции с плавающей точкой используют IEEE 754 с плавающей точкой. Известные особенности RISC-V ISA включают: расположение полей битов инструкций, выбранное для упрощения использования мультиплексоров в ЦП, [2] : 17 дизайн, который является архитектурно нейтральным, [ сомнительный – обсудить ] и фиксированное расположение для бита знака непосредственных значений для ускорения расширения знака . [2] : 17
Набор инструкций разработан для широкого спектра применений. Базовый набор инструкций имеет фиксированную длину 32-битных естественно выровненных инструкций, а ISA поддерживает расширения переменной длины, где каждая инструкция может быть любым количеством 16-битных участков в длину. [2] : 7–10 Расширений поддерживают небольшие встраиваемые системы , персональные компьютеры , суперкомпьютеры с векторными процессорами и параллельные компьютеры масштаба склада .
Спецификация набора инструкций определяет 32-битные и 64-битные варианты адресного пространства . Спецификация включает описание 128-битного варианта плоского адресного пространства как экстраполяции 32- и 64-битных вариантов, но 128-битная ISA намеренно остается «не замороженной», поскольку по состоянию на 2023 год [обновлять]все еще мало практического опыта работы с такими большими системами памяти. [2] : 41
В отличие от других академических проектов, которые обычно оптимизируются только для простоты изложения, проектировщики предполагали, что набор инструкций RISC-V будет пригоден для использования на практических компьютерах. По состоянию на июнь 2019 года версия 2.2 пользовательского пространства ISA [15] и версия 1.11 привилегированного ISA [3] заморожены , что позволяет продолжить разработку программного и аппаратного обеспечения. Пользовательский ISA, теперь переименованный в непривилегированный ISA, был обновлен, ратифицирован и заморожен как версия 20191213. [ 2 ] Внешняя отладочная спецификация доступна в виде черновика, версия 0.13.2. [16]
Проектирование ЦП требует экспертных знаний в нескольких областях: электронная цифровая логика , компиляторы и операционные системы . Чтобы покрыть расходы на такую команду, коммерческие поставщики интеллектуальной собственности (ИС) процессоров, такие как Arm Ltd. и MIPS Technologies , взимают роялти за использование своих разработок и патентов . [17] [18] [19] Они также часто требуют соглашений о неразглашении перед выпуском документов, описывающих подробные преимущества их разработок. Во многих случаях они никогда не описывают причины своего выбора разработки.
RISC-V был начат с целью создания практической ISA с открытым исходным кодом, пригодной для академического использования и развертываемой в любом аппаратном или программном проектировании без лицензионных отчислений. [2] : 1 [20] Также, объясняются обоснования для каждого проектного решения проекта, по крайней мере в общих чертах. Авторы RISC-V являются учеными, имеющими значительный опыт в компьютерном проектировании, и RISC-V ISA является прямым развитием серии академических компьютерных проектов, особенно Berkeley RISC . RISC-V был создан отчасти для оказания помощи всем таким проектам. [2] : 1 [20]
Чтобы создать большое, постоянное сообщество пользователей и тем самым накопить проекты и программное обеспечение, разработчики RISC-V ISA намеренно поддерживают широкий спектр практических вариантов использования: компактные, производительные и маломощные реальные реализации [2] : 1–2, 153–154 [21] без чрезмерного проектирования для данной микроархитектуры . [2] : 1 [22] [23] [24] Требования большой базы участников являются одной из причин, по которой RISC-V был спроектирован для решения множества возможных задач.
Основное утверждение разработчиков заключается в том, что набор инструкций является ключевым интерфейсом в компьютере, поскольку он расположен на интерфейсе между оборудованием и программным обеспечением. Если бы хороший набор инструкций был открыт и доступен для использования всеми, то он мог бы значительно снизить стоимость программного обеспечения, позволяя гораздо большее повторное использование. Это также должно вызвать усиление конкуренции среди поставщиков оборудования, которые затем могут выделять больше ресурсов на проектирование и меньше на поддержку программного обеспечения. [20]
Разработчики утверждают, что новые принципы становятся редкостью в разработке наборов инструкций, поскольку наиболее успешные разработки последних сорока лет становились все более похожими. Из тех, которые потерпели неудачу, большинство произошло из-за того, что их спонсирующие компании были финансово несостоятельны, а не потому, что наборы инструкций были технически плохими. Таким образом, хорошо спроектированный открытый набор инструкций, разработанный с использованием устоявшихся принципов, должен привлечь долгосрочную поддержку многих поставщиков. [20]
RISC-V также поощряет академическое использование. Простота целочисленного подмножества позволяет выполнять базовые студенческие упражнения и является достаточно простой ISA, чтобы программное обеспечение могло управлять исследовательскими машинами. ISA переменной длины предоставляет место для расширений набора инструкций как для студенческих упражнений, так и для исследований, [2] : 7 и отдельный привилегированный набор инструкций позволяет проводить исследования в области поддержки операционной системы без перепроектирования компиляторов. [3] Открытая парадигма интеллектуальной собственности RISC-V позволяет публиковать, повторно использовать и изменять производные разработки. [25]
Термин RISC датируется примерно 1980 годом. [26] До этого существовали некоторые знания (см. John Cocke ), что более простые компьютеры могут быть эффективными, но принципы проектирования не были широко описаны. Простые, эффективные компьютеры всегда представляли академический интерес, и привели к появлению набора инструкций RISC DLX для первого издания Computer Architecture: A Quantitative Approach в 1990 году, соавтором которого был Дэвид Паттерсон , а позже он участвовал в создании RISC-V. DLX был предназначен для образовательных целей; ученые и любители реализовали его с помощью программируемых пользователем вентильных матриц (FPGA), но он никогда по-настоящему не предназначался для коммерческого развертывания. Процессоры ARM , версии 2 и более ранних, имели набор инструкций в открытом доступе и до сих пор поддерживаются GNU Compiler Collection (GCC), популярным компилятором свободного программного обеспечения . Для этой ISA существуют три ядра с открытым исходным кодом , но они никогда не производились. [27] [28] Ядра OpenRISC , OpenPOWER и OpenSPARC / LEON предлагаются рядом поставщиков и имеют основную поддержку ядра GCC и Linux . [29] [30] [31]
Крсте Асанович из Калифорнийского университета в Беркли имел исследовательскую потребность в компьютерной системе с открытым исходным кодом, и в 2010 году он решил разработать и опубликовать ее в «коротком трехмесячном проекте летом» с несколькими своими аспирантами. План состоял в том, чтобы помочь как академическим, так и промышленным пользователям. [20] Дэвид Паттерсон из Беркли присоединился к сотрудничеству, поскольку он был создателем Berkeley RISC, [26] а RISC-V является одноименным пятым поколением его длинной серии совместных исследовательских проектов на основе RISC в Калифорнийском университете в Беркли ( RISC-I и RISC-II, опубликованные в 1981 году Паттерсоном, который называет [32] архитектуру SOAR [33] с 1984 года «RISC-III» и архитектуру SPUR [34] с 1988 года «RISC-IV»). На этом этапе студенты предоставили начальное программное обеспечение, симуляции и проекты ЦП. [35]
Авторы RISC-V и их учреждение изначально получили документы ISA [36] и несколько проектов ЦП по лицензиям BSD , которые позволяют производным работам, таким как проекты чипов RISC-V, быть либо открытыми и свободными, либо закрытыми и проприетарными. Сама спецификация ISA (т. е. кодировка набора инструкций) была опубликована в 2011 году как открытый исходный код, [37] со всеми защищенными правами. Фактический технический отчет (выражение спецификации) позже был помещен под лицензию Creative Commons , чтобы разрешить улучшение внешними участниками через RISC-V Foundation, а позднее RISC-V International.
Полная история RISC-V опубликована на сайте RISC-V International. [38]
Коммерческим пользователям требуется, чтобы ISA была стабильной, прежде чем они смогут использовать ее в продукте, который может прослужить много лет. Для решения этой проблемы в 2015 году был сформирован Фонд RISC-V для владения, поддержки и публикации интеллектуальной собственности, связанной с определением RISC-V. [39] Первоначальные авторы и владельцы передали свои права фонду. [ необходима цитата ] Фонд возглавляет генеральный директор Калиста Редмонд , которая заняла эту должность в 2019 году после руководства проектами открытой инфраструктуры в IBM . [40] [ не удалось проверить ]
Членами-основателями RISC-V были: Andes, Antmicro, Bluespec, CEVA, Codasip, Cortus, Esperanto, Espressif, ETH Zurich, Google, IBM, ICT, IIT Madras, Lattice, lowRISC, Microchip, MIT (Csail), Qualcomm, Rambus, Rumble, SiFive, Syntacore и Technolution. [41]
В ноябре 2019 года Фонд RISC-V объявил о переезде в Швейцарию, сославшись на опасения по поводу торговых правил США. [42] [43] По состоянию на март 2020 года организация называлась RISC-V International, швейцарская некоммерческая бизнес-ассоциация. [44]
С 2019 года [обновлять]RISC-V International свободно публикует документы, определяющие RISC-V, и разрешает неограниченное использование ISA для проектирования программного обеспечения и оборудования. Однако только члены RISC-V International могут голосовать за одобрение изменений, и только организации-члены используют логотип совместимости с торговой маркой . [45]
RISC-V имеет модульную конструкцию, состоящую из альтернативных базовых частей с добавленными дополнительными расширениями. База ISA и ее расширения разрабатываются в результате коллективных усилий промышленности, исследовательского сообщества и образовательных учреждений. База определяет инструкции (и их кодирование), поток управления, регистры (и их размеры), память и адресацию, логическую (т. е. целочисленную) манипуляцию и вспомогательные устройства. База сама по себе может реализовать упрощенный компьютер общего назначения с полной программной поддержкой, включая компилятор общего назначения.
Стандартные расширения предназначены для работы со всеми стандартными базами и друг с другом без конфликтов.
Многие компьютеры RISC-V могут реализовать расширение сжатых инструкций для снижения энергопотребления, размера кода и использования памяти. [2] : 97–99 Также существуют планы на будущее по поддержке гипервизоров и виртуализации . [3]
Вместе с расширением супервизора S, набором инструкций RVGC, который включает один из базовых наборов инструкций RV, набором расширений G (включающим «I», что означает, что база не встроена) и расширением C, определяются все инструкции, необходимые для удобной поддержки операционной системы общего назначения . [2] : 129, 154
Для обозначения комбинаций функций, которые могут быть реализованы, определена номенклатура для их указания в Главе 27 текущей ратифицированной Непривилегированной спецификации ISA. Сначала указывается база набора инструкций, кодирование для RISC-V, разрядность регистра и вариант; например, RV64I или RV32E . Затем следуют буквы, указывающие реализованные расширения, в порядке, указанном в таблице выше. За каждой буквой может следовать основная опция, за которой может следовать «p» и номер дополнительной опции. По умолчанию она равна 0, если отсутствует дополнительный номер версии, и 1.0, если отсутствует весь номер версии. Таким образом, RV64IMAFD может быть записана как RV64I1p0M1p0A1p0F1p0D1p0 или проще как RV64I1M1A1F1D1 . Для удобства чтения между расширениями могут использоваться подчеркивания, например, RV32I2_M2_A2 .
Базовые, расширенные целочисленные и плавающие вычисления с примитивами синхронизации для многоядерных вычислений считаются необходимыми для вычислений общего назначения, поэтому мы имеем сокращение «G».
Небольшой 32-разрядный компьютер для встроенной системы может быть RV32EC . Большой 64-разрядный компьютер может быть RV64GC ; т.е. RV64IMAFDCZicsr_Zifencei .
С ростом числа расширений стандарт теперь предусматривает, что расширения должны именоваться одной буквой «Z», за которой следует алфавитное имя и необязательный номер версии. Например, Zifencei именует расширение выборки инструкций. Zifencei2 и Zifencei2p0 именуют версию 2.0 того же самого. Первая буква после «Z» по соглашению указывает на наиболее тесно связанную алфавитную категорию расширений, IMAFDQLCBJTPVN . Таким образом, расширение Zam для невыровненных атомов относится к стандартному расширению «A». В отличие от расширений с одним символом, расширения Z должны быть разделены подчеркиваниями, сгруппированы по категориям, а затем в алфавитном порядке внутри каждой категории. Например, Zicsr_Zifencei_Zam .
Расширения, специфичные для уровня привилегий супервизора, именуются таким же образом, используя префикс "S". Расширения, специфичные для уровня гипервизора, именуются, используя префикс "H". Расширения уровня машины имеют префикс из трех букв "Zxm". Расширения набора инструкций уровня супервизора, гипервизора и машины имеют названия менее привилегированных расширений.
Разработчики RISC-V могут создавать собственные нестандартные расширения набора инструкций. Они следуют соглашению об именовании "Z", но с префиксом "X". Их следует указывать после всех стандартных расширений, а если перечислено несколько нестандартных расширений, они должны быть перечислены в алфавитном порядке.
Профили и платформы для стандартных списков выбора ISA находятся в стадии обсуждения.
... Эту гибкость можно использовать для высокой оптимизации специализированного дизайна, включив только точный набор функций ISA, требуемых для приложения, но та же гибкость также приводит к комбинаторному взрыву в возможных вариантах ISA. Профили определяют гораздо меньший общий набор вариантов ISA, которые охватывают наибольшую ценность для большинства пользователей, и которые, таким образом, позволяют сообществу разработчиков программного обеспечения сосредоточить ресурсы на создании богатой экосистемы программного обеспечения. [50]
Спецификация платформы определяет набор платформ, которые определяют требования к взаимодействию между программным обеспечением и оборудованием. Политика платформы определяет различные термины, используемые в этой спецификации платформы. Политика платформы также предоставляет необходимые сведения относительно области действия, покрытия, наименования, управления версиями, структуры, жизненного цикла и совместимости для спецификации платформы. [51]
RISC-V имеет 32 целочисленных регистра (или 16 во встроенном варианте), [2] : 13, 33 и, когда реализовано расширение с плавающей точкой, дополнительные 32 регистра с плавающей точкой . [2] : 63 За исключением инструкций доступа к памяти, инструкции адресуют только регистры .
Первый целочисленный регистр — это нулевой регистр , а остальные — регистры общего назначения. Сохранение в нулевой регистр не имеет никакого эффекта, а чтение всегда возвращает 0. Использование нулевого регистра в качестве заполнителя упрощает набор инструкций.
Существуют регистры управления и состояния, но программы пользовательского режима могут получить доступ только к тем из них, которые используются для измерения производительности и управления числами с плавающей точкой.
Не существует инструкций для сохранения и восстановления нескольких регистров. Они считались бесполезными, слишком сложными и, возможно, слишком медленными. [25]
Как и многие RISC-проекты, RISC-V представляет собой архитектуру загрузки-сохранения : инструкции адресуются только к регистрам, а инструкции загрузки и сохранения передают данные в память и из нее.
Большинство инструкций загрузки и сохранения включают 12-битное смещение и два идентификатора регистра. Один регистр является базовым регистром. Другой регистр является местом назначения (для загрузки) или источником (для сохранения).
Смещение добавляется к базовому регистру для получения адреса. [2] : 24 Формирование адреса как базового регистра плюс смещение позволяет отдельным инструкциям получать доступ к структурам данных. Например, если базовый регистр указывает на вершину стека, отдельные инструкции могут получать доступ к локальным переменным подпрограммы в стеке. Аналогично инструкции загрузки и сохранения могут получать доступ к структуре в стиле записи или к устройству ввода-вывода, отображенному в память. Использование постоянного нулевого регистра в качестве базового адреса позволяет отдельным инструкциям получать доступ к памяти вблизи адреса ноль.
Память адресуется как 8-битные байты, при этом инструкции располагаются в порядке от младшего к старшему [2] : 9–10 , а данные располагаются в порядке байтов, определяемом интерфейсом среды выполнения, в которой выполняется код. [2] : 3, 9–10, 24 Доступ к словам размером до регистра возможен с помощью инструкций загрузки и сохранения.
RISC-V изначально был определен как little-endian, чтобы напоминать другие знакомые, успешные компьютеры, например, x86 . [2] : 9–10 Это также снижает сложность ЦП и стоит немного меньше, поскольку он считывает все размеры слов в том же порядке. Например, набор инструкций RISC-V декодирует, начиная с самого младшего адресованного байта инструкции. Варианты big-endian и bi-endian были определены для поддержки устаревших кодовых баз, которые предполагают big-endian. [2] : 9–10 Привилегированная ISA определяет биты в регистрах mstatus и mstatush , которые указывают и, опционально, управляют тем, являются ли доступы к памяти M-mode, S-mode и U-mode, отличные от выборки инструкций, little-endian или big-endian; эти биты могут быть только для чтения, в этом случае порядок реализации жестко запрограммирован или может быть доступен для записи. [3] : 23–24
Интерфейс среды выполнения может разрешить не выравнивать адреса памяти по ширине их слова, но доступ к выровненным адресам может быть быстрее; например, простые ЦП могут реализовывать невыровненный доступ с медленной программной эмуляцией, управляемой прерыванием ошибки выравнивания . [2] : 3, 24–25
Как и многие наборы инструкций RISC (и некоторые наборы инструкций для компьютеров со сложным набором инструкций (CISC), такие как x86 и IBM System/360 и их последователи через z/Architecture ), RISC-V не имеет адресных режимов, которые записывают обратно в регистры. Например, он не делает автоинкремент. [2] : 24
RISC-V управляет системами памяти, которые совместно используются ЦП или потоками , гарантируя, что поток выполнения всегда видит свои операции памяти в запрограммированном порядке. Но между потоками и устройствами ввода-вывода RISC-V упрощен: он не гарантирует порядок операций памяти, за исключением определенных инструкций, таких как fence
.
Инструкция fence
гарантирует, что результаты предшествующих операций видны последующим операциям других потоков или устройств ввода-вывода. fence
может гарантировать порядок комбинаций как операций памяти, так и операций ввода-вывода, отображенных в память. Например, она может разделить операции чтения и записи памяти, не влияя на операции ввода-вывода. Или, если система может работать с устройствами ввода-вывода параллельно с памятью, fence
не заставляет их ждать друг друга. Один ЦП с одним потоком может декодировать fence
как nop
.
Некоторые RISC-процессоры (такие как MIPS , PowerPC , DLX и Berkeley's RISC-I) помещают 16 бит смещения в загрузки и сохранения. Они устанавливают верхние 16 бит с помощью инструкции загрузки верхнего слова . Это позволяет легко устанавливать значения верхнего полуслова, не сдвигая биты. Однако большинство случаев использования инструкции верхнего полуслова создает 32-битные константы, такие как адреса. RISC-V использует подобную SPARC комбинацию 12-битных смещений и 20-битных инструкций установки верхнего значения . Меньшее 12-битное смещение помогает компактным, 32-битным инструкциям загрузки и сохранения выбирать два из 32 регистров, но при этом иметь достаточно бит для поддержки кодирования инструкций переменной длины RISC-V. [2] : 16
RISC-V обрабатывает 32-битные константы и адреса с помощью инструкций, которые устанавливают верхние 20 бит 32-битного регистра. Load upper immediately lui
загружает 20 бит в биты с 31 по 12. Затем вторая инструкция, например, addi
может установить нижние 12 бит. Небольшие числа или адреса могут быть сформированы с использованием нулевого регистра вместо lui
.
Этот метод расширен для разрешения позиционно-независимого кода путем добавления инструкции, auipc
которая генерирует 20 верхних адресных битов путем добавления смещения к счетчику программ и сохранения результата в базовом регистре. Это позволяет программе генерировать 32-битные адреса, которые являются относительными к счетчику программ.
Базовый регистр часто можно использовать как есть с 12-битными смещениями загрузок и хранилищ. При необходимости addi
можно установить нижние 12 бит регистра. В 64-битных и 128-битных ISA lui
и auipc
расширить знак результата, чтобы получить больший адрес. [2] : 37
Некоторые быстрые процессоры могут интерпретировать комбинации инструкций как отдельные объединенные инструкции lui
или auipc
являются хорошими кандидатами для объединения с инструкциями jalr
, addi
, загрузкой или сохранением.
Вызов подпрограммы RISC-V jal
(переход и ссылка) помещает свой адрес возврата в регистр. Это быстрее во многих компьютерных конструкциях, поскольку экономит доступ к памяти по сравнению с системами, которые помещают адрес возврата непосредственно в стек в памяти. jal
имеет 20-битное смещение со знаком ( дополнение до двух ). Смещение умножается на 2, затем добавляется к PC (счетчику программ) для генерации относительного адреса 32-битной инструкции. Если полученный адрес не выровнен по 32 битам (т. е. делится на 4 без остатка), ЦП может вызвать исключение . [ 2] : 20–23, Раздел 2.5
Процессоры RISC-V переходят к вычисленным адресам с помощью инструкции jump and link-register , которая похожа на , но получает свой адрес назначения путем добавления 12-битного смещения к базовому регистру. (В отличие от этого, добавляет большее 20-битное смещение к PC.)jalr
jalr
jal
jal
jalr
Формат битов похож на загрузки и сохранения относительно регистра. Подобно им, jalr
может использоваться с инструкциями, которые устанавливают верхние 20 бит базового регистра для выполнения 32-битных переходов, либо по абсолютному адресу (используя lui
), либо по адресу относительно ПК (используя auipc
для позиционно-независимого кода). (Использование постоянного нулевого базового адреса позволяет вызывать отдельные инструкции по небольшому (смещение), фиксированному положительному или отрицательному адресу.)
RISC-V перерабатывает jal
и jalr
для получения безусловных 20-битных PC-относительных переходов и безусловных 12-битных переходов на основе регистров. Переходы просто делают регистр связи 0, так что адрес возврата не сохраняется. [2] : 20–23, Раздел 2.5
RISC-V также выполняет повторный цикл jalr
для возврата из подпрограммы: для этого jalr
базовый регистр устанавливается равным регистру связи, сохраненному с помощью jal
или jalr
. jalr
Смещение равно нулю, и регистр связи равен нулю, так что смещения нет, и адрес возврата не сохраняется.
Как и многие проекты RISC, при вызове подпрограммы компилятор RISC-V должен использовать отдельные инструкции для сохранения регистров в стеке в начале, а затем восстанавливать их из стека при выходе. RISC-V не имеет инструкций сохранения нескольких или восстановления нескольких регистров. Считалось, что они делают ЦП слишком сложным и, возможно, медленным. [52] Это может занять больше места в коде. Разработчики планировали уменьшить размер кода с помощью библиотечных процедур для сохранения и восстановления регистров. [53]
RISC-V не имеет регистра кода условия или бита переноса . Разработчики считали, что коды условий делают быстрые процессоры более сложными, заставляя взаимодействовать инструкции на разных этапах выполнения. Этот выбор делает арифметику с множественной точностью более сложной. Кроме того, несколько числовых задач требуют больше энергии. В результате предикация (условное выполнение инструкций) не поддерживается. Разработчики утверждают, что очень быстрые, неупорядоченные конструкции процессоров в любом случае выполняют предикацию, выполняя сравнение ветвей и условный код параллельно, а затем отбрасывая эффекты неиспользуемого пути. Они также утверждают, что даже в более простых процессорах предикация менее ценна, чем предсказание ветвей , которое может предотвратить большинство остановок, связанных с условными ветвями. Код без предикации больше, с большим количеством ветвей, но они также утверждают, что сжатый набор инструкций (такой как набор C в RISC-V ) решает эту проблему в большинстве случаев. [25] [ неудачная проверка ]
Вместо этого RISC-V имеет короткие ветви, которые выполняют сравнения: равно, не равно, меньше, без знака меньше, больше или равно и без знака больше или равно. Десять операций сравнения-ветвления реализованы всего шестью инструкциями, путем изменения порядка операндов в ассемблере на обратный . Например, ответвление, если больше, может быть выполнено с помощью меньше с обратным порядком операндов. [2] : 20–23, Раздел 2.5
Сравниваемые ветви имеют двенадцатибитный знаковый диапазон и скачок относительно ПК. [2] : 20–23, Раздел 2.5
В отличие от некоторых архитектур RISC, RISC-V не включает слот задержки ветвления , позицию после инструкции ветвления, которая может быть заполнена инструкцией, которая выполняется независимо от того, выполнен ли переход. [2] : 20–23, Раздел 2.5 RISC-V опускает слот задержки ветвления, поскольку это усложняет многоцикловые ЦП, суперскалярные ЦП и длинные конвейеры. Динамические предсказатели ветвлений достаточно преуспели, чтобы уменьшить потребность в отложенных ветвлениях. [25]
При первой встрече с ветвью процессоры RISC-V должны предположить, что будет взята отрицательная относительная ветвь (т. е. знаковый бит смещения равен «1»). [2] : 20–23, Раздел 2.5 Это предполагает, что обратная ветвь является циклом, и обеспечивает направление по умолчанию, чтобы простые конвейерные процессоры могли заполнить свой конвейер инструкций. Помимо этого, RISC-V не требует предсказания ветвлений , но реализациям ядра разрешено добавлять его. RV32I резервирует пространство инструкций «HINT», которое в настоящее время не содержит никаких подсказок по ветвлениям; [2] : 28–29, Раздел 2.9 RV64I делает то же самое. [2] : 38–39, Раздел 5.4
RISC-V разделяет математику на минимальный набор целочисленных инструкций (набор I ) со сложением, вычитанием, сдвигом, побитовой логикой и сравнением ветвей. Они могут имитировать большинство других наборов инструкций RISC-V с помощью программного обеспечения. (Атомарные инструкции являются заметным исключением.) Целочисленные инструкции RISC-V не содержат операций с ведущим нулем и битовыми полями, которые обычно используются для ускорения программной плавающей точки в чисто целочисленном процессоре. Однако, хотя номинально они находятся в расширении битовой манипуляции, ратифицированные расширения Zbb, Zba и Zbs содержат дополнительные целочисленные инструкции, включая инструкцию с ведущим нулем.
Инструкции целочисленного умножения (набор M ) включают знаковое и беззнаковое умножение и деление. Включены целочисленные умножения и деления двойной точности, как умножения и деления, которые производят верхнее слово результата. Документ ISA рекомендует разработчикам ЦП и компиляторов объединять стандартизированную последовательность высоких и низких инструкций умножения и деления в одну операцию, если это возможно. [2] : 43–45
Инструкции с плавающей точкой (набор F ) включают арифметику одинарной точности, а также сравнительные ветви, аналогичные целочисленной арифметике. Для этого требуется дополнительный набор из 32 регистров с плавающей точкой. Они отделены от целочисленных регистров. Инструкции с плавающей точкой двойной точности (набор D ) обычно предполагают, что регистры с плавающей точкой являются 64-битными (т. е. двойной ширины), а подмножество F координируется с набором D. Также определена 128-битная ISA с плавающей точкой четверной точности ( Q ). [2] : 63–82 Компьютеры RISC-V без плавающей точки могут использовать библиотеку программного обеспечения с плавающей точкой.
RISC-V не вызывает исключений при арифметических ошибках, включая переполнение , [2] : 17–20 недостаточное переполнение, субнормальное состояние и деление на ноль. [2] : 44–45 Вместо этого как целочисленная, так и плавающая арифметика выдают разумные значения по умолчанию, а инструкции с плавающей точкой устанавливают биты состояния. [2] : 66 Деление на ноль может быть обнаружено одной ветвью после деления. [2] : 44–45 Биты состояния могут быть проверены операционной системой или периодическим прерыванием.
RISC-V поддерживает компьютеры, которые совместно используют память для нескольких ЦП и потоков . Стандартная модель согласованности памяти RISC-V — согласованность освобождения . То есть, загрузки и сохранения, как правило, могут быть переупорядочены, но некоторые загрузки могут быть обозначены как операции получения , которые должны предшествовать более поздним доступам к памяти, а некоторые сохранения могут быть обозначены как операции освобождения , которые должны следовать за более ранними доступами к памяти. [2] : 83–94
Базовый набор инструкций включает минимальную поддержку в виде fence
инструкции по обеспечению порядка памяти. [2] : 26–27 Хотя этого достаточно ( fence r, rw
обеспечивает получение и fence rw, w
обеспечивает освобождение ), комбинированные операции могут быть более эффективными. [2] : Глава 8
Расширение атомарных операций памяти поддерживает два типа атомарных операций памяти для согласованности выпуска. Во-первых, оно предоставляет инструкции общего назначения с зарезервированной загрузкой lr
и условным сохранением sc
lr
. выполняет загрузку и пытается зарезервировать этот адрес для своего потока. Более позднее условное сохранение sc
в зарезервированном адресе будет выполнено только в том случае, если резервирование не будет нарушено промежуточным сохранением из другого источника. Если сохранение успешно, в регистр помещается ноль. Если оно не удалось, ненулевое значение указывает, что программное обеспечение должно повторить операцию. В любом случае резервирование снимается. [2] : Глава 8
Вторая группа атомарных инструкций выполняет последовательности чтения-изменения-записи : загрузка (которая может быть необязательной загрузкой-получением) в регистр назначения, затем операция между загруженным значением и исходным регистром, затем сохранение результата (которое может быть необязательной загрузкой-выпуском). Если сделать барьеры памяти необязательными, то операции будут объединены. Необязательные операции включаются битами получения и освобождения , которые присутствуют в каждой атомарной инструкции. RISC-V определяет девять возможных операций: обмен (использование значения исходного регистра напрямую); сложение; побитовое и, или и исключающее или; и знаковый и беззнаковый минимум и максимум. [2] : Глава 8
Системный дизайн может оптимизировать эти комбинированные операции больше, чем lr
и sc
. Например, если регистр назначения для обмена является константой ноль, загрузка может быть пропущена. Если сохраненное значение не было изменено с момента загрузки, сохранение может быть пропущено. [15] : 44
IBM System/370 и его последователи, включая z/Architecture и x86 , реализуют инструкцию compare-and-swap ( cas
), которая проверяет и условно обновляет местоположение в памяти: если местоположение содержит ожидаемое старое значение, cas
заменяет его заданным новым значением; затем он возвращает указание на то, было ли сделано изменение. Однако простая инструкция типа загрузки обычно выполняется перед , чтобы cas
извлечь старое значение. Классическая проблема заключается в том, что если поток считывает (загружает) значение A , вычисляет новое значение C , а затем использует ( cas
) для замены A на C , у него нет возможности узнать, заменила ли параллельная активность в другом потоке A каким-либо другим значением B , а затем восстановила A между ними. В некоторых алгоритмах (например, в тех, в которых значения в памяти являются указателями на динамически выделяемые блоки) эта проблема ABA может привести к неверным результатам. Наиболее распространенное решение использует инструкцию двойной шириныcas
для обновления как указателя, так и смежного счетчика; К сожалению, такая инструкция требует специального формата инструкции для указания нескольких регистров, выполняет несколько операций чтения и записи и может иметь сложную работу шины. [2] : 48–49
Альтернатива lr
/ sc
более эффективна. Обычно она требует только одной загрузки памяти, и желательно минимизировать медленные операции с памятью. Она также точна: она контролирует все доступы к ячейке памяти, а не просто гарантирует битовую комбинацию. Однако, в отличие от cas
, она может разрешить оперативную блокировку , при которой два или более потоков многократно вызывают сбой инструкций друг друга. RISC-V гарантирует прямое продвижение (отсутствие оперативной блокировки), если код следует правилам синхронизации и последовательности инструкций: 1) Он должен использовать только подмножество I. 2) Чтобы предотвратить повторяющиеся промахи кэша, код (включая цикл повтора) должен занимать не более 16 последовательных инструкций. 3) Он не должен включать системные или оградительные инструкции или взятые обратные переходы между и lr
. sc
4) Обратная ветвь к циклу повтора должна быть исходной последовательностью. [2] : 48–49
В спецификации приводится пример того, как использовать атомарные инструкции «чтение-модификация-запись» для блокировки структуры данных. [2] : 54
Стандарт RISC-V ISA определяет, что все инструкции являются 32-битными. Это делает реализацию особенно простой, но, как и другие процессоры RISC с 32-битной кодировкой инструкций, приводит к большему размеру кода, чем в наборах инструкций с инструкциями переменной длины. [2] : 99 [52]
Чтобы компенсировать это, 32-битные инструкции RISC-V на самом деле являются 30-битными; 3 ⁄ 4 пространства кода операции зарезервировано для необязательного (но рекомендуемого) набора сжатых инструкций переменной длины, RVC, который включает 16-битные инструкции. Как и в ARM Thumb и MIPS16 , сжатые инструкции являются просто альтернативными кодировками для подмножества более крупных инструкций. В отличие от сжатых наборов ARM или MIPS, пространство было зарезервировано с самого начала, поэтому нет отдельного режима работы. Стандартные и сжатые инструкции можно свободно смешивать. [2] : 97 [52] (Буква расширения — C .) [2] : 97
Поскольку (как и в Thumb-1 и MIPS16) сжатые инструкции представляют собой просто альтернативные кодировки (псевдонимы) для выбранного подмножества более крупных инструкций, сжатие может быть реализовано в ассемблере, и компилятору не обязательно даже знать об этом.
Прототип RVC был протестирован в 2011 году. [52] Код прототипа был на 20% меньше, чем сжатый код x86 PC и MIPS , и на 2% больше, чем код ARM Thumb-2 . [52] Он также существенно уменьшил как необходимую кэш-память, так и предполагаемое энергопотребление системы памяти. [52]
Исследователь намеревался уменьшить двоичный размер кода для небольших компьютеров, особенно встроенных компьютерных систем. Прототип включал 33 наиболее часто используемых инструкции, перекодированных в компактные 16-битные форматы с использованием кодов операций, ранее зарезервированных для сжатого набора. [52] Сжатие было выполнено на ассемблере , без изменений в компиляторе. Сжатые инструкции пропускали поля, которые часто равны нулю, использовали небольшие непосредственные значения или обращались к подмножествам (16 или 8) регистров. addi
является очень распространенным и часто сжимаемым. [52]
Большая часть разницы в размере по сравнению с набором Thumb от ARM возникла из-за того, что RISC-V и прототип не имеют инструкций для сохранения и восстановления нескольких регистров. Вместо этого компилятор генерировал обычные инструкции, которые обращаются к стеку. Затем прототип ассемблера RVC часто преобразовывал их в сжатые формы, которые были вдвое меньше. Однако это все еще занимало больше места в коде, чем инструкции ARM, которые сохраняют и восстанавливают несколько регистров. Исследователь предложил модифицировать компилятор для вызова библиотечных процедур для сохранения и восстановления регистров. Эти процедуры, как правило, оставались бы в кэше кода и, таким образом, выполнялись бы быстро, хотя, вероятно, не так быстро, как инструкция сохранения нескольких регистров. [52]
Стандартный RVC требует периодического использования 32-битных инструкций. Несколько нестандартных предложений RVC являются полными, не требующими 32-битных инструкций, и, как говорят, имеют более высокую плотность, чем стандартный RVC. [54] [55] Другое предложение строится на них и также заявляет об использовании меньшего диапазона кодирования. [56]
Набор инструкций для самых маленьких встроенных ЦП (набор E) сокращен другими способами: поддерживаются только 16 из 32 целочисленных регистров. [2] : Глава 4 Все текущие расширения могут использоваться; рассматривается расширение с плавающей точкой для использования целочисленных регистров для значений с плавающей точкой. Привилегированный набор инструкций поддерживает только машинный режим, пользовательский режим и схемы памяти, которые используют перемещение адреса с базой и привязкой. [3]
Обсуждался профиль микроконтроллера для RISC-V, чтобы облегчить разработку глубоко встраиваемых систем. Он сосредоточен на более быстрой, простой поддержке языка C для прерываний, упрощенных режимах безопасности и упрощенном двоичном интерфейсе приложений POSIX . [57]
Корреспонденты также предложили меньшие, нестандартные, 16-битные ISA RV16E : несколько серьезных предложений использовали бы 16-битные инструкции C с 8 × 16-битными регистрами. [55] [54] Первоапрельская шутка предложила очень практичное решение: использовать 16 × 16-битные целочисленные регистры со стандартными ISA EIMC (включая 32-битные инструкции). Шутка заключалась в использовании переключения банков , когда 32-битный ЦП был бы явно лучше с большим адресным пространством. [58]
ISA RISC-V включает в себя отдельную спецификацию набора привилегированных инструкций, которая в основном описывает три уровня привилегий плюс режим ортогонального гипервизора. По состоянию на декабрь 2021 года [обновлять]версия 1.12 ратифицирована RISC-V International. [3]
Версия 1.12 спецификации поддерживает несколько типов компьютерных систем:
Они примерно соответствуют системам с четырьмя кольцами привилегий и безопасности, максимум: машина, гипервизор, супервизор и пользователь. Каждый уровень также должен иметь тонкий слой стандартизированного вспомогательного программного обеспечения, которое взаимодействует с более привилегированным уровнем или оборудованием. [3]
ISA также включает режим гипервизора, который ортогонален режимам пользователя и супервизора. [59] Основной функцией является бит конфигурации, который либо разрешает коду уровня супервизора получать доступ к регистрам гипервизора, либо вызывает прерывание при доступе. Этот бит позволяет режиму супервизора напрямую обрабатывать оборудование, необходимое гипервизору. Это упрощает реализацию гипервизоров, размещенных операционной системой. Это популярный режим для запуска компьютеров масштаба склада. Для поддержки не размещенных гипервизоров бит может вызывать прерывание этих доступов к гипервизору. Конструкция также упрощает вложенность гипервизоров, в которой гипервизор работает под гипервизором, и при необходимости позволяет ядру использовать функции гипервизора в своем собственном коде ядра. В результате форма гипервизора ISA поддерживает пять режимов: машина, супервизор, пользователь, супервизор-под-гипервизором и пользователь-под-супервизором.
Спецификация набора привилегированных инструкций явно определяет аппаратные потоки , или harts . Несколько аппаратных потоков являются обычной практикой в более производительных компьютерах. Когда один поток останавливается, ожидая памяти, другие часто могут продолжить работу. Аппаратные потоки могут помочь лучше использовать большое количество регистров и исполнительных блоков в быстрых неисправных процессорах. Наконец, аппаратные потоки могут быть простым и мощным способом обработки прерываний : не требуется сохранения или восстановления регистров, просто выполняется другой аппаратный поток. Однако единственный аппаратный поток, требуемый в компьютере RISC-V, — это нулевой поток. [3]
Прерывания и исключения обрабатываются вместе. Исключения вызываются выполнением инструкций, включая недопустимые инструкции и системные вызовы, в то время как прерывания вызываются внешними событиями. Существующие определения регистров управления и статуса поддерживают исключения ошибок и памяти RISC-V, а также небольшое количество прерываний, обычно через «расширенный локальный прерыватель ядра» (ACLINT). [60] Для систем с большим количеством прерываний спецификация также определяет контроллер прерываний на уровне платформы (PLIC) для координации большого количества прерываний между несколькими процессорами. Прерывания всегда начинаются на уровне машины с наивысшими привилегиями, а регистры управления каждого уровня имеют явные биты пересылки для маршрутизации прерываний в менее привилегированный код. Например, гипервизору не нужно включать программное обеспечение, которое выполняется при каждом прерывании, чтобы переслать прерывание операционной системе. Вместо этого при настройке он может установить биты для пересылки прерывания. [3]
В спецификации поддерживаются несколько систем памяти. Физическая-только подходит для самых простых встраиваемых систем. Также есть четыре системы виртуальной памяти в стиле UNIX для кэшированной памяти в системах массового хранения. Системы виртуальной памяти поддерживают MMU с четырьмя размерами, с адресами размером 32, 39, 48 и 57 бит. Все системы виртуальной памяти поддерживают страницы размером 4 КиБ, многоуровневые деревья таблиц страниц и используют очень похожие алгоритмы для обхода деревьев таблиц страниц. Все они разработаны для аппаратного или программного обхода таблиц страниц. Чтобы опционально снизить стоимость обходов таблиц страниц, страницы сверхбольшого размера могут быть конечными страницами на более высоких уровнях дерева таблиц страниц системы. SV32 поддерживается только в 32-битных реализациях, имеет двухслойное дерево таблиц страниц и поддерживает суперстраницы размером 4 МиБ. SV39 имеет трехуровневую таблицу страниц и поддерживает суперстраницы размером 2 МиБ и гигастраницы размером 1 ГиБ. Для поддержки SV39 требуется SV48. Он также имеет 4-уровневую таблицу страниц и поддерживает 2 MiB суперстраницы, 1 GiB гигастраницы и 512 GiB терастраницы. SV57 имеет 5-уровневую таблицу страниц и поддерживает 2 MiB суперстраницы, 1 GiB гигастраницы, 512 GiB терастраницы и 256 TiB петастраницы. Суперстраницы выравниваются по границам страниц для следующего наименьшего размера страницы. [3]
Некоторые расширения ISA для битовой манипуляции были ратифицированы в ноябре 2021 года (Zba, Zbb, Zbc, Zbs). [47] Расширения Zba, Zbb и Zbs, возможно, являются расширениями стандартных целочисленных инструкций I: Zba содержит инструкции для ускорения вычисления адресов элементов массива в массивах типов данных размером 2, 4 или 8 байт (sh1add, sh2add, sh3add) и для 64 (и 128) битных процессоров при индексации беззнаковыми целыми числами (add.uw, sh1add.uw, sh2add.uw, sh3add.uw и slli.uw). Инструкции Zbb содержат операции для подсчета начальных, конечных нулевых битов или всех единичных битов в полных и 32-битных операциях слова (clz, clzw, ctz, ctzw, cpop, cpopw), реверс байтового порядка (rev8), логические инструкции с отрицанием второго входа (andn, orn, xnor), знаковое и нулевое расширение (sext.b, sext.h, zext.h), которые не могли быть предоставлены как особые случаи других инструкций (andi, addiw, add.wu), минимум и максимум (знаковых и беззнаковых) целых чисел, (левый и правый) циклический сдвиг битов в регистре и 32-битных словах (rori, roriw, ror, rorw, rol, rolw), а также побайтовую операцию «или объединить», которая позволяет обнаружить нулевой байт в полном регистре, что полезно для обработки функций строк с нулевым завершением в стиле C. Расширение Zbs позволяет устанавливать, получать, очищать и переключать отдельные биты в регистре по их индексу (bseti, bset, bexti, bext, bclri, bclr, binvi,binv).
Расширение Zbc имеет инструкции для "умножения без переноса", которое выполняет умножение многочленов над полем Галуа GF(2) (clmul, clmulh, clmulr). Они полезны для криптографии и проверки целостности данных с помощью CRC.
При правильном выполнении более специализированное подмножество битовых манипуляций может помочь в криптографических, графических и математических операциях. Дополнительные инструкции, которые обсуждались, включают инструкции для сдвига единиц, обобщенного битового реверса, перестановки перестановок и перекрестных перестановок, битовое поле, извлечение и упаковку двух слов, байтов или полуслов в один регистр, инструкции CRC, операции с битовой матрицей (только RV64), условное смешивание, условный перенос, сдвиги воронки. Критерии для включения, задокументированные в проекте, соответствовали философии RISC-V и форматам ISA, существенным улучшениям в плотности кода или скорости (т. е., по крайней мере, сокращению инструкций в соотношении 3 к 1) и существенным реальным приложениям, включая поддержку уже существующего компилятора. Версия 0.93 расширения битовых манипуляций включает эти инструкции; [61] некоторые из них теперь находятся в версии 1.0.1 расширения скалярных и энтропийных исходных инструкций криптографии. [49]
Инструкции с упакованной SIMD широко используются коммерческими процессорами для недорогого ускорения обработки мультимедиа и других цифровых сигналов . [25] Для простых, недорогих систем RISC-V базовая спецификация ISA предлагала использовать биты регистров с плавающей точкой для выполнения параллельной арифметики подслов с одной инструкцией и несколькими данными ( SIMD ).
В 2017 году поставщик опубликовал более подробное предложение в списке рассылки, и его можно назвать версией 0.1. [62] По состоянию на 2019 год [обновлять]эффективность этого предлагаемого ISA варьируется от 2x до 5x базового ЦП для различных кодеков DSP. [63] В предложении отсутствовали форматы инструкций и лицензия на RISC-V International, но оно было рассмотрено списком рассылки. [62] Некоторые непопулярные части этого предложения заключались в том, что оно добавляло код условия, первый в конструкции RISC-V, связывало соседние регистры (также первый) и имело счетчик циклов, который может быть сложно реализовать в некоторых микроархитектурах.
Предложенный набор инструкций векторной обработки может сделать упакованный набор SIMD устаревшим. Разработчики надеются иметь достаточную гибкость, чтобы ЦП мог реализовать векторные инструкции в регистрах стандартного процессора. Это позволило бы реализовать минимальные реализации с производительностью, аналогичной мультимедийной ISA, как указано выше. Однако настоящий векторный сопроцессор мог бы выполнять тот же код с более высокой производительностью. [64]
По состоянию на 19 сентября 2021 года [обновлять]версия расширения вектора составляет 1.0. [65] Это консервативная, гибкая конструкция универсального векторного процессора смешанной точности, подходящего для выполнения вычислительных ядер . Код будет легко переноситься на процессоры с разной длиной вектора, в идеале без перекомпиляции. [64]
Напротив, короткие векторные расширения SIMD менее удобны. Они используются в x86 , ARM и PA-RISC . В них изменение ширины слова приводит к изменению набора инструкций для расширения векторных регистров (в случае x86, с 64-битных регистров MMX на 128-битные потоковые расширения SIMD (SSE), на 256-битные расширенные векторные расширения (AVX) и AVX-512 ). Результатом является растущий набор инструкций и необходимость переноса рабочего кода на новые инструкции.
В векторной ISA RISC-V вместо фиксации длины вектора в архитектуре доступны инструкции ( vsetvli
, vsetivli
, и ), которые берут запрошенный размер и устанавливают длину вектора на минимум аппаратного предела и запрошенного размера. Таким образом, предложение RISC-V больше похоже на конструкцию длинных векторов Cray или масштабируемое векторное расширение ARM. То есть, каждый вектор из 32 векторов имеет одинаковую длину. [65] : 25 vsetvl
Приложение указывает общую ширину вектора, которую оно требует, а процессор определяет длину вектора, которую он может предоставить с доступными ресурсами на кристалле. Это принимает форму инструкции ( vsetcfg
) с четырьмя непосредственными операндами, указывающими количество векторных регистров каждой доступной ширины, которая необходима. Общее количество не должно превышать адресуемый предел 32, но может быть меньше, если приложению не требуются все из них. Длина вектора ограничена доступным хранилищем на кристалле, деленным на количество байтов хранилища, необходимых для каждой записи. (Также могут существовать дополнительные аппаратные ограничения, которые, в свою очередь, могут разрешить реализации в стиле SIMD.) [64]
За пределами векторных циклов приложение может обнулить количество запрошенных векторных регистров, избавляя операционную систему от необходимости сохранять их при переключениях контекста . [64]
Длина вектора не только архитектурно изменчива, но и спроектирована так, чтобы изменяться во время выполнения. Для достижения этой гибкости набор инструкций, вероятно, будет использовать пути данных переменной ширины и операции переменного типа с использованием полиморфной перегрузки. [64] План заключается в том, что они могут уменьшить размер и сложность ISA и компилятора. [64]
Недавние экспериментальные векторные процессоры с путями передачи данных переменной ширины также демонстрируют прибыльное увеличение количества операций в секунду (скорость), площади (более низкая стоимость) и ватт (более длительный срок службы батареи). [66]
В отличие от типичного современного графического процессора , не планируется предоставлять специальное оборудование для поддержки предикации ветвления . Вместо этого будет использоваться более дешевая предикация на основе компилятора. [64] [67]
Существует предварительная спецификация для отладчика с аппаратной поддержкой RISC-V . Отладчик будет использовать транспортную систему, такую как Joint Test Action Group ( JTAG ) или Universal Serial Bus ( USB ) для доступа к отладочным регистрам. Стандартный интерфейс отладки оборудования может поддерживать либо стандартизированный абстрактный интерфейс , либо подачу инструкций . [68] [69]
По состоянию на январь 2017 года [обновлять]точная форма абстрактного интерфейса остаётся неопределённой, но предложения включают в себя систему отображения памяти со стандартизированными адресами для регистров отладочных устройств или регистра команд и регистра данных, доступных для системы связи. [ 68] Корреспонденты утверждают, что похожие системы используются интерфейсом фонового режима отладки (BDM) Freescale для некоторых процессоров, ARM , OpenRISC и LEON от Aeroflex . [68]
В подаче инструкций ЦП обрабатывает исключение отладки для выполнения отдельных инструкций, записанных в регистр. Это может быть дополнено регистром передачи данных и модулем для прямого доступа к памяти. Подача инструкций позволяет отладчику получать доступ к компьютеру точно так же, как это делает программное обеспечение. Это также минимизирует изменения в ЦП и адаптируется ко многим типам ЦП. Было сказано, что это особенно подходит для RISC-V, поскольку он разработан явно для многих типов компьютеров. Регистр передачи данных позволяет отладчику записывать цикл перемещения данных в ОЗУ, а затем выполнять цикл для перемещения данных в компьютер или из него со скоростью, близкой к максимальной скорости канала данных отладочной системы. [ 68] Корреспонденты говорят, что похожие системы используются MIPS Technologies MIPS , Intel Quark , Tensilica Xtensa и для интерфейса фонового режима отладки (BDM) ЦП Freescale Power ISA . [68]
Поставщик предложил подсистему аппаратной трассировки для стандартизации, предоставил соответствующий дизайн и инициировал обзор. [70] [71] Предложение касается аппаратного модуля, который может отслеживать выполнение кода на большинстве процессоров RISC-V. Чтобы снизить скорость передачи данных и разрешить более простые или менее затратные пути для данных трассировки, предложение не генерирует данные трассировки, которые могут быть вычислены из двоичного образа кода. Оно отправляет только данные, которые указывают на «невыводимые» пути через программу, например, какие условные переходы выполняются. Чтобы снизить скорость передачи данных, ветви, которые могут быть вычислены, например безусловные переходы, не трассируются. Предлагаемый интерфейс между модулем и блоком управления представляет собой логический сигнал для каждого невыводимого типа инструкции. Адреса и другие данные должны быть предоставлены в специализированной шине, подключенной к соответствующим источникам данных в ЦП. Структура данных, отправляемая внешнему блоку трассировки, представляет собой серию коротких сообщений с необходимыми данными. Подробности канала данных намеренно не описаны в предложении, поскольку несколько из них, вероятно, будут иметь смысл.
Организация RISC-V ведет список реализаций ЦП и СнК RISC-V. [72] Из-за торговых войн и возможных санкций, которые помешали бы Китаю получить доступ к фирменным ISA, с 2023 года страна планировала перевести большую часть своих архитектур ЦП и МКУ на ядра RISC-V. [73]
В 2023 году Европейский союз должен был предоставить 270 миллионов евро в рамках так называемого Рамочного соглашения о партнерстве (FPA) одной компании, которая могла и хотела бы реализовать проект по разработке процессора RISC-V, нацеленного на суперкомпьютеры, серверы и центры обработки данных. [74] Целью Европейского союза было стать независимым от политических событий в других странах и «укрепить свой цифровой суверенитет и установить стандарты, а не следовать чужим». [75]
Существующие фирменные реализации включают:
Компания DeepComputing из Гонконга объявила о выпуске 13 апреля 2023 года «первого в мире ноутбука с процессором RISC-V»; ноутбук под названием «ROMA» был доставлен первым покупателям в августе 2023 года [160] и поставлялся с предустановленной китайской операционной системой openKylin Linux. [161] Базовая модель устройства, доступная на Alibaba , по-прежнему была дорогой и стоила около 1500 долларов США [162], учитывая, что она работала на не очень быстром [163] процессоре Alibaba (DAMO) «XuanTie C910».
Обновление в июне 2024 года удвоило количество ядер до 8 и увеличило тактовую частоту до 2 ГГц (с 1,5 ГГц), одновременно снизив цену до 1000 долларов США. [164] Сотрудничество с Canonical [165] означало, что ROMA II поставлялся с предустановленным основным международным дистрибутивом Linux Ubuntu . [166]
Обычной проблемой для нового набора инструкций является как отсутствие конструкций ЦП, так и программного обеспечения, что ограничивает его использование и снижает его принятие. [20] Помимо того, что уже имеется большое количество конструкций аппаратного обеспечения ЦП, RISC-V также поддерживается инструментальными цепочками, операционными системами (например, Linux ), промежуточным программным обеспечением [ неопределенно ] и программным обеспечением для проектирования.
Доступные программные инструменты RISC-V включают набор инструментов GNU Compiler Collection (GCC) (с отладчиком GDB ), набор инструментов LLVM , симулятор OVPsim (и библиотеку моделей быстрых процессоров RISC-V), симулятор Spike и симулятор в QEMU (RV32GC/RV64GC). JEP 422: порт Linux/RISC-V уже интегрирован в основной репозиторий OpenJDK . Сборки Java 21+ Temurin OpenJDK для RISC-V доступны на Adoptium .
Поддержка операционной системы существует для ядра Linux , FreeBSD , NetBSD и OpenBSD , но инструкции режима супервизора не были стандартизированы до версии 1.11 привилегированной спецификации ISA, [3] , поэтому эта поддержка является предварительной. Предварительный порт FreeBSD на архитектуру RISC-V был выпущен в феврале 2016 года и поставлялся в FreeBSD 11.0. [167] [116]
Порты дистрибутивов Debian [168] [169] и Fedora [170] Linux , а также порт Haiku [171] стабилизируются (все поддерживают только 64-битную версию RISC-V , без планов поддержки 32-битной версии). В июне 2024 года гонконгская компания DeepComputing объявила о коммерческой доступности первого в мире ноутбука RISC-V, на котором будет работать популярная операционная система Linux Ubuntu в ее стандартной форме («из коробки»). [14] «Поскольку RISC-V становится конкурентоспособной ISA на нескольких рынках, портирование Ubuntu на RISC-V в качестве эталонной ОС [операционной системы] для первых последователей было естественным выбором», — заявила в июне 2024 года компания-разработчик Ubuntu Canonical. [172]
Существует порт Das U-Boot . [173] UEFI Spec v2.7 определила привязку RISC-V, а порт TianoCore был сделан инженерами HPE [174] и, как ожидается, будет передан. Существует предварительный порт микроядра seL4 . [175] [176] Hex Five выпустила первый стек Secure IoT для RISC-V с поддержкой FreeRTOS . [177] Также был перенесен xv6 , современная переработка Sixth Edition Unix в ANSI C , используемая в педагогических целях в MIT . Pharos RTOS была перенесена на 64-битный RISC-V [178] (включая защиту времени и памяти). Также см. Сравнение операционных систем реального времени .
Существует симулятор для запуска системы RISC-V Linux в веб-браузере с использованием JavaScript . [179] [180] [181]
QEMU поддерживает запуск (используя двоичную трансляцию ) 32- и 64-битных систем RISC-V (например, Linux) со многими эмулированными или виртуализированными устройствами (последовательными, параллельными, USB, сетевыми, хранилищами, часами реального времени, сторожевыми таймерами, аудио), а также запуск двоичных файлов RISC-V Linux (транслируя системные вызовы в ядро хоста). Он поддерживает многоядерную эмуляцию (SMP). [182]
Симулятор Creator является переносимым и позволяет пользователю изучать различные языки ассемблера разных процессоров (Creator имеет примеры с реализацией инструкций RISC-V и MIPS32). [183] [184] [185] [186] [187]
Для создания ядер IP RISC-V было применено несколько языков, включая язык описания оборудования на основе Scala , Chisel , [188], который может свести проекты к Verilog для использования в устройствах, и язык описания процессоров CodAL, который использовался для описания ядер процессоров RISC-V и для создания соответствующих HDK ( RTL , testbench и UVM ) и SDK. [189] У Международной целевой группы по соблюдению требований RISC-V есть репозиторий GitHub для RV32IMC. [190]
ASTC (www.astc-design.com) у нас есть реализация RV32EC как синтезируемого IP-ядра, предназначенного для небольших встраиваемых приложений, таких как интеллектуальные датчики и IoT.