Расширение канала данных MIPS для реализации SLL и SRL

Вот путь к данным:

Так что это кажется довольно распространенным вопросом, но я не могу найти никаких ответов о том, как расширить путь к данным для реализации SLL и SRL.

Вот как я мог бы это сделать, но я не совсем уверен:

Требуется еще один мультиплексор рядом с Чтение данных 1 рядом с файлом реестра. Этот мультиплексор будет принимать Read data 1 (rs) и Read data 2 (rt) в качестве входных данных. Он выбрал бы Чтение данных 1, если мы не выполняем операцию сдвига, и выбрал бы rt, если мы выполняем операцию сдвига (поскольку sll и srl используют rt, а не rs). Затем он будет подан в АЛУ.

Затем, нам нужно было бы разветвлять Instruction[10:6] (величину сдвига) из Instruction[15:0], и Instruction [10: 6] тогда была бы подана в другой порт ALU. Это правильное мышление?

2 ответа

Это sll на однопроходном канале передачи данных, но я не уверен, что ALU теперь получает 5 вместо 4 битного управляющего входа. Если вы делаете sll, то первый вход ALU будет ложным, а второй - регистром, который должен быть сдвинут, ALU знает, должен ли он сдвигаться из-за поля инструкции, потому что это инструкция R-типа. Затем сдвинутые данные будут сохранены в регистре. SLL SC Datapath

Вам необходимо изменить путь к данным для инструкции SLL, добавив входную строку в ALU с полем "shamt", чтобы определить величину сдвига. ALU идентифицирует операцию SLL по полю ALUop. Модифицированный путь к данным

Вы идете в правильном направлении. Как указано в одном из ответов, может быть добавлен еще один дополнительный порт к ALU, который будет учитывать величину шамта (биты [10:6]). В ALU может быть некоторое внутреннее оборудование, такое как MUX, которое позаботится о выборе либо поля shamt, либо Read Data 2 из выходного файла регистра.

Другие вопросы по тегам