Процессоры RISC-V
В этой лекции вы познакомитесь с различными терминами, используемыми в экосистеме RISC-V, а затем узнаете о RISC-V ISA (instruction set architecture, архитектура набора команд). Будут подробно описаны несколько вариантов ISA.
Далее мы проанализируем, как можно использовать процессор RISC-V, построенный с использованием ISA. Вы также увидите, как различные инструменты RISC-V могут быть использованы для создания простых примеров приложений.
После изучения данной лекции вы будете:
- понимать терминологию RISC-V;
- уметь следовать набору инструкций RISC-V;
- уметь использовать процессоры RISC-V;
- уметь использовать инструменты RISC-V для создания простых приложений.
Знакомство с RISC-V
Что представляет собой RISC-V?
RISC-V - это новая архитектура наборов команд (ISA), которая изначально была определена для поддержки образования и исследований в области компьютерной архитектуры, но теперь превратилась в свободный стандарт и открытую архитектуру, принятую в промышленности для создания собственных процессоров.
Ниже перечислены цели определения RISC-V, как они представлены в спецификациях RISC-V. Конкретным документом, в котором перечислены эти цели, является технический отчет UCB/EECS-2014-54.
- Полностью открытая ISA, свободно доступная для академических и промышленных кругов.
- Настоящая ISA, пригодная для прямой аппаратной реализации, а не только для моделирования или двоичной трансляции.
- ISA, которая позволяет избежать "избыточной архитектуры" для определенного стиля микроархитектуры (например, microcoded, in-order, decoupled, out-of-order) или технологии реализации (например, full-custom, ASIC, FPGA), но позволяет эффективно реализовать любую из них.
- ISA, разделенная на небольшой базовый целочисленная ISA, используемая сама по себе в качестве основы для специализированных ускорителей или в образовательных целях, и дополнительные стандартные расширения для поддержки разработки программного обеспечения общего назначения.
- Поддержка пересмотренного стандарта плавающей запятой IEEE-754 2008 года.
- ISA, поддерживающая обширные расширения на уровне пользователя и специализированные варианты.
- Как 32-битовые, так и 64-битовые варианты адресного пространства для приложений, ядер операционных систем и аппаратных реализаций.
- ISA с поддержкой высоко параллельных многоядерных (multicore или manycore) реализаций, включая гетерогенные мультипроцессоры.
- Дополнительные инструкции переменной длины для расширения доступного пространства кодирования инструкций и поддержки дополнительного плотного кодирования инструкций для повышения производительности, статического размера кода и энергоэффективности.
- Полностью виртуализируемая ISA для облегчения разработки гипервизоров.
- ISA, которая упрощает эксперименты с новыми конструкциями ISA на уровне супервизора и гипервизора.
Спецификация максимально избегает определения деталей реализации, поэтому её можно рассматривать как программно-видимый интерфейс для широкого спектра аппаратных реализаций, а не конкретной.
Спецификация разделена на два тома: один определяет "базовые непривилегированные" инструкции, а другой - "классические привилегированные" возможности RISC-V.
В следующих разделах дается базовое представление о проектировании непривилегированной ISA, при необходимости вы можете обратиться к привилегированным спецификациям.
Терминология аппаратной платформы RISC-V
Аппаратная платформа RISC-V может содержать одно или несколько RISC-V-совместимых вычислительных ядер, а также другие (несовместимые с RISC-V) ядра, ускорители с фиксированной функциональностью, различные физические структуры памяти, устройства ввода-вывода и структуру межсоединений, которая позволяет компонентам взаимодействовать.
Компонент называется ядром, если он содержит независимый блок выборки инструкций (IFU). RISC-V-совместимое ядро может поддерживать несколько RISC-V-совместимых аппаратных потоков, или hart-ов (hardware threads), посредством многопоточности.
Ядро RISC-V может иметь дополнительные специализированные расширения набора инструкций или дополнительный сопроцессор.
Термин сопроцессор используется для обозначения блока, который присоединен к ядру RISC-V и в основном управляется потоком инструкций RISC-V, но содержит дополнительное архитектурное состояние и расширения набора инструкций, а также, возможно, имеет ограниченную автономность относительно основного потока инструкций RISC-V.
Термин ускоритель относится либо к непрограммируемому блоку с фиксированной функциональностью, либо к ядру, которое может работать автономно, но специализировано для определенных задач. В системах на базе RISC-V может быть много программируемых ускорителей, которые представляют собой ядра на базе RISC-V со специализированными расширениями набора инструкций и/или настроенными сопроцессорами. I/O-ускорители являются важным классом ускорителей на базе RISC-V; они выполняют задачи обработки ввода-вывода, снимая нагрузку с основных ядер приложений.
Системный уровень структуры аппаратной платформы на базе RISC-V может варьироваться от микроконтроллера с одним ядром до кластера из тысяч многоядерных серверных узлов с общей памятью. Даже маленькие системы на одном кристалле могут быть структурированы как иерархия мультикомпьютеров и/или мультипроцессоров для модульного подхода к разработке или для обеспечения безопасной изоляции между подсистемами.
Дополнительные сведения можно найти в спецификациях RISC-V.
Среды выполнения программного обеспечения RISC-V и hart-ы
Среда выполнения, в которой выполняется программа на RISC-V, определяет её поведение. Интерфейс среды выполнения (Execution Environment Interface, EEI) RISC-V определяет начальное состояние программы, а также количество и тип hart-ов, с которыми может работать среда, включая режимы привилегий, поддерживаемые этими потоками.
EEI также определяет доступность и атрибуты областей памяти и ввода-вывода, поведение каждого hart'а для всех допустимых инструкций, выполняемых на нём (т.е. ISA является одним из компонентов EEI), и обработку любых прерываний или исключений, возникающих во время выполнения, включая вызовы окружения.
Примеры EEI включают двоичный интерфейс приложений Linux (ABI) и двоичный интерфейс супервизора RISC-V (SBI). Среда выполнения RISC-V может быть реализована как чисто аппаратная, как чисто программная или как комбинация аппаратной и программной частей. Например, ловушки опкодов и программная эмуляция могут быть использованы для реализации функциональности, не предусмотренной в аппаратном обеспечении.
Примеры реализации среды выполнения включают (взято из спецификаций RISC-V):
- Аппаратные платформы "голого железа", где hart-ы напрямую реализуются потоками физического процессора, а инструкции имеют полный доступ к физическому адресному пространству.
- В этой реализации аппаратная платформа определяет среду выполнения, которая начинается при сбросе при включении питания.
-
Операционные системы RISC-V, обеспечивающие несколько сред выполнения на уровне пользователя.
- В этой модели среды обеспечиваются путем мультиплексирования задач пользовательского уровня на доступные потоки физического процессора и управления доступом к памяти через виртуальную память.
- Гипервизоры RISC-V, обеспечивающие несколько сред выполнения на уровне супервизора для гостевых операционных систем.
-
Эмуляторы RISC-V, такие как Spike, QEMU или rv8.
- Они эмулируют hart-ы RISC-V на базовой системе x86 и могут предоставлять среду выполнения на уровне пользователя или супервизора.
С точки зрения программного обеспечения, работающего в данной среде выполнения, hart - ?это ресурс, который автономно извлекает и выполняет инструкции RISC-V в этой среде. В этом отношении hart ведет себя как ресурс аппаратного потока, даже если он мультиплексирован по времени на реальное оборудование средой выполнения. Некоторые EEI поддерживают создание и уничтожение дополнительных hart-ов, например, через вызовы среды для создания новых hart-ов.
Среда выполнения отвечает за обеспечение возможного продвижения вперед каждого из своих hart-ов. Для данного потока эта ответственность приостанавливается, пока он выполняет механизм, который явно ожидает события, например, инструкцию wait-for-interrupt, и эта ответственность заканчивается, если поток завершается. Следующие события представляют собой продвижение вперед:
- упразднение инструкции;
- ловушка;
- любое другое событие, определяемое расширением как представляющее собой дальнейший прогресс.
Архитектура набора инструкций RISC-V
ISA RISC-V разделена на две части. Одна часть? - это базовая целочисленная ISA, которую должны поддерживать все реализации процессора. Вторая - ?дополнительный набор инструкций, которые могут поддерживаться как расширенные инструкции. Поддержка расширенных инструкций является необязательной.
Базовая целочисленная ISA
База ограничена минимальным набором инструкций, достаточным для поддержки существующих компиляторов, ассемблеров, компоновщиков и операционных систем (с дополнительными привилегированными инструкциями). Поэтому база обеспечивает простую и удобную отправную точку для создания пользовательских процессоров, с дополнительными специализированными ISA по мере необходимости.
На самом деле существует четыре базовых ISA, которые образуют семейство RISC-V ISA. Они делятся на категории в зависимости от размера целочисленных регистров, соответствующего размера адреса и количества целочисленных регистров.
Ниже перечислены ISA, определенные как часть семейства RISC-V ISA.
- RV32I - первичная ISA, с поддержкой 32-битовых адресов.
- RV64I - основная ISA, с поддержкой 64-битовых адресов.
- RV32E - подмножество RV32I, определенное для небольших микроконтроллеров с вдвое меньшим количеством регистров.
- RV128I - будущая ISA с поддержкой 128-битовой адресации.
Структура ISA была тщательно продумана. Более подробную информацию об обосновании этого можно найти в спецификации RISC-V.
ISA были разработаны для широкой настройки и специализации. Каждая конкретная ISA была определена таким образом, что она может быть расширена одной или несколькими инструкциями по мере необходимости. Пространство кодирования набора инструкций RISC-V и связанные с ним пространства кодирования, такие как регистры управления и состояния (CSR), разделены на три несовпадающие категории: стандартные, зарезервированные и пользовательские.
Стандартные кодировки определяются Фондом и не должны конфликтовать с другими стандартными расширениями для той же базовой ISA.
Зарезервированные кодировки в настоящее время не определены, но сохранены для будущих расширений стандарта.
Пользовательские кодировки доступны для нестандартных расширений, специфичных для конкретного производителя, и никогда не должны использоваться для стандартных расширений. Нестандартные расширения не определены Фондом.
Термин "несоответствующий" используется для описания нестандартного расширения, которое использует либо стандартную, либо зарезервированную кодировку (то есть пользовательские расширения не являются несоответствующими). Расширения набора инструкций, как правило, являются общими, но могут обеспечивать несколько иную функциональность в зависимости от базовой ISA.
Ниже приведен список ISA, определенных базовыми спецификациями ISA. Чтобы получить определение соответствующей ISA, к каждому из следующих имен добавьте RV32 или RV64.
- I - базовая целочисленная ISA
- M - стандартные целочисленные расширения умножения и деления
- A - стандартные целочисленные атомарные расширения (атомарное чтение, изменение и запись в память для синхронизации)
- F - регистры с плавающей запятой (вычислительные инструкции с одинарной точностью, загрузка и сохранение)
- D - регистры с плавающей запятой двойной точности (вычислительные инструкции двойной точности, загрузка и сохранение)
- C - сжатые инструкции (обеспечивают более узкие 16-битовые версии базовых инструкций)
Почти все приложения могут работать с определенным набором стандартных инструкций, но есть определенные приложения, для которых очень полезны специальные инструкции, определенные для данного приложения.
RISC-V будет стремиться сохранить базовые инструкции и стандартные расширения неизменными с течением времени, а любые новые требования будут добавляться в качестве дополнительных расширений. Например, базовая целочисленная ISA будет существовать как отдельная ISA, независимо от любых расширений, которые будут добавляться время от времени.