Чтобы ускорить декодирование, базовый 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