2016-09-10 2 views
5

В RISC-V Instruction Set Manual, User-Level ISA, я не мог понять, раздел 2.3 Немедленного Кодирование Варианты страницы 11.RISC-V: Непосредственное Кодирование Варианта

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

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

enter image description here

enter image description here

ответ

7

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

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

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

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

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

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

Таким образом, «перетасовка» непосредственных битов в кодировке команд заключается в том, чтобы каждый бит непосредственного действия каждого выхода имел как можно меньше параметров бит ввода. Например, немедленный бит 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-type, но непосредственное значение находится в младших битах вместо верхних бит;
  • Непосредственные биты перетасовываются для уменьшения стоимости декодирования немедленного значения за счет уменьшения количества вариантов для каждого выходного немедленного бита;
  • В таблице «немедленное производство по инструкциям RISC-V» показаны различные виды немедленных значений, которые могут быть декодированы из инструкции RISC-V и откуда в инструкции поступает каждый бит;
  • Они создаются для каждого выходного немедленного бита с использованием основного кода операции (бит 0-6) для выбора бит инструкции ввода.
+0

«И, наконец, инструкции ветвления/прыжка нуждаются в расширении знака непосредственно в младших битах значения», почему это так? – akurd

+0

«SB-type удваивает диапазон ветвей, поскольку инструкции всегда выровнены по четным адресам», как он удваивает диапазон? – akurd

+2

@akurd с подписанным 12-битным номером, у вас есть диапазон от -2048 до +2047. В B-instant (SB-type) у вас есть подписанное 13-битное число с младшим битом, установленным в ноль, диапазон от -4096 до +4094. Что касается того, почему инструкции ветвления/прыжка нужны немедленно в младших битах, если они этого не сделали, они не могли идти рядом с инструкциями. – CesarB

3

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

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

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

Смежные вопросы