ЛР 3 для ИВТ. Непонятно про shamt #26
-
а как открыть мультиплексор на константу, содержащую "shamt" в SLLI, SRLI, SRAI ? Потому что такой константы с [24:20] не наблюдается |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 11 replies
-
shamt - это младшие 5 бит константы imm, то есть imm[4:0]. Shamt - это число, на которое происходит сдвиг rd = rs1 << shamt Сейчас добавлю эту информацию в методичку. |
Beta Was this translation helpful? Give feedback.
-
Теперь абзац звучит так: Обратите внимание на операции ок? не ок? |
Beta Was this translation helpful? Give feedback.
-
Дублирую сообщение, чтоб пометить как ответ: Когда выполняется операция сдвига (не важно какого, для всех трех сдвигов одинаково), АЛУ принимает два операнда. На первый вход АЛУ приходит 32-битное число (тут все как обычно). На второй вход АЛУ приходит тоже 32-битное число, НО, так как это операция сдвига, то АЛУ плевать хотел на старшие 27 бит этого числа, потому что ему достаточно 5 бит для этого. Сдвиг делается максимум на 31. Чтобы закодировать число 31 (то есть максимальная величина сдвига) потребуется 5 бит. Подитожу: при выполнении сдвига, АЛУ берет 32-битное число с одного входа и сдвигает его на величину 5-битного числа с другого входа. Даже если в старших битах второго числа что-то будет лежать АЛУ этого тупо не заметит. В момент, когда выполняется операция сдвига на константу, на второй вход АЛУ приходит 12-битная константа, которая еще и расширяется до 32 бит. Но АЛУ на это плевать, он в этот момент кушает свои 5 бит, а остальное игнорирует. То, что он кушает (5 бит) и называется shamt. С точки зрения тракта данных (все, что не является устройством управления) вообще ничего не меняется. Ну приходит туда 12-битная константа расширенная до 32, ну и пофиг, старшие биты игнорируются. Не пофиг устройству управления (основной дешифратор). Когда приходит одна из этих трех инструкций сдвига дешифратор должен отреагировать на старшие 7 бит imm_I, как на поле funct7. Вот если выполняется операция сложения с константой addi, то дешифратор не смотрит в funct7, а если это сдвиг, то смотрит. Shamt - это и есть значение сдвига, оно нужно для АЛУ. funct7 - это уточнение операции, оно нужно для дешифратора. funct7 (то есть 31:25 биты инструкции) всегда поступают на вход дешифратора. В каких-то инструкциях это мусор (в тех, где нет поля funct7), а в каких-то это полезная информация, например, в этих сдвигах. |
Beta Was this translation helpful? Give feedback.
Дублирую сообщение, чтоб пометить как ответ:
Когда выполняется операция сдвига (не важно какого, для всех трех сдвигов одинаково), АЛУ принимает два операнда. На первый вход АЛУ приходит 32-битное число (тут все как обычно). На второй вход АЛУ приходит тоже 32-битное число, НО, так как это операция сдвига, то АЛУ плевать хотел на старшие 27 бит этого числа, потому что ему достаточно 5 бит для этого. Сдвиг делается максимум на 31. Чтобы закодировать число 31 (то есть максимальная величина сдвига) потребуется 5 бит.
Подитожу: при выполнении сдвига, АЛУ берет 32-битное число с одного входа и сдвигает его на величину 5-битного числа с другого входа. Даже если в старших битах второго числа что…