RISC-V: варианты немедленного кодирования

В Руководстве по набору инструкций RISC-V, пользовательский уровень ISA, я не мог понять раздел 2.3 «Немедленные варианты кодирования» на стр. 11.

Существует четыре типа команд формата R, I, S и U, а также варианты типов S и U, которые являются SB и UJ, которые, как я полагаю, означают переход и переход, как показано на рисунке 2.3. Затем есть типы Immediate, создаваемые инструкциями RISC-V, показанные на рисунке 2.4.

Итак, мои вопросы: зачем нужны SB и UJ? и зачем так перемешивать Немедленные биты? что значит сказать «Непосредственное, созданное инструкциями RISC-V»? и как они производятся таким образом?

введите описание изображения здесь

введите описание изображения здесь


person Ammar Kurd    schedule 10.09.2016    source источник


Ответы (3)


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

  • Основной код операции всегда находится в битах 0-6.
  • Регистр назначения, если он присутствует, всегда находится в битах 7-11.
  • Первый исходный регистр, если он присутствует, всегда находится в битах 15-19.
  • Второй исходный регистр, если он присутствует, всегда находится в битах 20-24.

Другие биты используются для второстепенного кода операции или других данных для инструкции (funct3 в битах 12-14 и funct7 в битах 25-31) и для непосредственного выполнения. Сколько битов можно использовать для немедленного выполнения, зависит от того, сколько номеров регистров присутствует в инструкции:

  • Команды с одним целевым и двумя исходными регистрами (R-тип) не имеют немедленного действия, например, добавление двух регистров (ADD);
  • Команды с одним целевым регистром и одним исходным регистром (I-типа) имеют 12 бит для немедленного выполнения, например, добавление одного регистра с немедленным (ADDI);
  • Команды с двумя исходными регистрами и без регистра назначения (S-тип), например, инструкции сохранения, также имеют 12 бит для немедленного выполнения, но они должны находиться в другом месте, поскольку номера регистров также находятся в другом месте;
  • Наконец, инструкции только с регистром назначения и без второстепенного кода операции (U-тип), например LUI, могут использовать 20 бит для немедленного выполнения (для основного кода операции и номера регистра назначения вместе требуется 12 бит).

Теперь подумайте с другой точки зрения об инструкциях, которые будут использовать эти непосредственные значения. Самым простым пользователям, I-немедленным и S-немедленным, нужно только 12-битное значение с расширенным знаком. Инструкции U-немедленного действия требуют немедленного действия в старших 20 битах 32-битного значения. Наконец, инструкции перехода / перехода нуждаются в немедленном расширении знака в младших битах значения, за исключением самого младшего бита, который всегда будет равен нулю, поскольку инструкции RISC-V всегда выравниваются по четным адресам.

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

«Перестановка» непосредственных битов в кодировке команд, таким образом, заключается в том, чтобы каждый выходной бит немедленного действия имел как можно меньше вариантов входных битов инструкции. Например, непосредственный бит 1 может поступать только из командных битов 8 (S-немедленный или B-немедленный), 21 (I-немедленный или J-немедленный) или постоянного нуля (U-немедленный или R-тип инструкции, который не имеет немедленного выполнения). ). Непосредственный бит 0 может поступать из командных битов 7 (S-немедленный), 20 (I-немедленный) или постоянного нуля. Непосредственный бит 5 может поступать только из 25-го командного бита или постоянного нуля. И так далее.

31-й бит команды является особым случаем: для RV-64 биты 32-63 немедленного действия всегда являются копиями 31-го бита команды. Это высокое разветвление добавляет задержку, которая была бы еще больше, если бы также требовался мультиплексор, поэтому у него есть только один вариант (кроме постоянного нуля, который можно обработать позже в конвейере, игнорируя все немедленное).

Также интересно отметить, что необходим только основной код операции (биты 0-6), чтобы знать, как декодировать немедленное, поэтому немедленное декодирование может выполняться параллельно с декодированием остальной части инструкции.


Итак, отвечая на вопросы:

  • SB-тип удваивает диапазон ветвей, так как инструкции всегда выравниваются по четным адресам;
  • UJ-тип имеет тот же общий формат инструкций, что и U-тип, но непосредственное значение находится в младших битах, а не в старших битах;
  • Непосредственные биты перемешиваются, чтобы снизить стоимость декодирования непосредственного значения за счет уменьшения количества вариантов выбора для каждого выходного немедленного бита;
  • Таблица «Непосредственно созданная инструкциями RISC-V» показывает различные виды немедленных значений, которые могут быть декодированы из инструкции RISC-V, и откуда в инструкции берется каждый бит;
  • Они производятся для каждого выходного бита с использованием основного кода операции (биты 0-6) для выбора бита инструкции ввода.
person CesarB    schedule 12.09.2016
comment
Наконец, инструкции перехода / перехода нуждаются в немедленном расширении знака в младших битах значения, почему это так? - person Ammar Kurd; 13.09.2016
comment
Тип SB удваивает диапазон ветвей, поскольку инструкции всегда выравниваются по четным адресам, как он удваивает диапазон? - person Ammar Kurd; 13.09.2016
comment
@akurd с 12-битным числом со знаком, у вас есть диапазон от -2048 до +2047. В B-немедленном (тип SB) у вас есть 13-битное число со знаком с нулевым младшим битом, диапазон от -4096 до +4094. Что касается того, почему инструкции перехода / перехода нуждаются в немедленном действии в младших битах, в противном случае они не могли бы перейти к инструкциям рядом с ними. - person CesarB; 13.09.2016

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

На практике компилятор будет генерировать выходные данные, поэтому не имеет значения, трудно ли это понять пользователю.

Когда возможно, тип SB пытается использовать те же биты для тех же самых непосредственных позиций битов, что и тип S, что сводит к минимуму сложность конструкции оборудования. Таким образом, imm [4: 1] и imm [10: 5] находятся в одном месте для обоих. Самый верхний бит непосредственных значений всегда находится в позиции 31, так что вы можете использовать этот бит, чтобы решить, нужно ли расширение знака. Опять же, это упрощает аппаратное обеспечение, поскольку для нескольких типов инструкций верхний бит используется для принятия решения о расширении знака.

person Phil Wright    schedule 12.09.2016

Кодировка инструкций RISC-V выбрана для упрощения декодера.

2.2 Базовые форматы инструкций

RISC-V ISA сохраняет регистры источника (rs1 и rs2) и назначения (rd) в одной позиции во всех форматах для упрощения декодирования. За исключением 5-битных непосредственных команд, используемых в инструкциях CSR (глава 9), немедленные выражения всегда расширяются по знаку и обычно упаковываются в сторону самых левых наиболее доступных битов в инструкции и выделяются для уменьшения аппаратной сложности. В частности, бит знака для всех непосредственных сообщений всегда находится в бите 31 инструкции для ускорения схемы расширения знака.

2.3 Варианты немедленного кодирования

Единственное различие между форматами S и B заключается в том, что 12-битное поле непосредственного ввода используется для кодирования смещений ветвлений, кратных 2, в формате B. Вместо того, чтобы сдвигать все биты в кодировке инструкций сразу влево на единицу в аппаратном обеспечении, как это обычно делается, средние биты (imm [10: 1]) и знаковый бит остаются в фиксированных положениях, в то время как младший бит в формате S (inst [ 7]) кодирует бит старшего разряда в формате B.

Точно так же единственное различие между форматами U и J состоит в том, что 20-битное непосредственное смещение сдвигается влево на 12 бит, чтобы сформировать U, и на 1 бит, чтобы сформировать J, непосредственно. Расположение битов команд в формате U и J выбирается немедленно, чтобы максимально перекрыть друг друга с другими форматами.

https://riscv.org/technical/specifications/

Причина перетасовки непосредственного в форматах SB / UL также была объяснена в спецификации RISC-V.

Хотя более сложные реализации могут иметь отдельные сумматоры для вычислений переходов и переходов и поэтому не получат выгоды от сохранения постоянства расположения непосредственных битов для разных типов инструкций, мы хотели снизить стоимость оборудования для простейших реализаций. Путем ротации битов в кодировании команд B и J немедленно вместо использования динамических аппаратных мультиплексоров для умножения непосредственного значения на 2, мы сокращаем разветвление сигнала команды и немедленные затраты мультиплексора примерно в 2 раза. Скремблированное немедленное кодирование добавит незначительно. timeto статическая или опережающая компиляция. Для динамической генерации инструкций есть небольшие дополнительные накладные расходы, но наиболее распространенные короткие прямые переходы имеют прямое непосредственное кодирование.

person phuclv    schedule 02.09.2020