#cpu-architecture #microprocessors
#архитектура ЦП #микропроцессоры
Вопрос:
Я пытаюсь самостоятельно изучить некоторую компьютерную архитектуру, но я как бы застрял в части пути передачи данных. Я не могу понять, как реализовать lui (немедленная загрузка верхнего уровня) и ldi (немедленная загрузка данных) на картинке ниже, поэтому, если бы кто-нибудь мог мне помочь и объяснить, насколько это возможно, я был бы очень рад!
Извините, если это не подходит для этого форума, но я видел некоторые другие в stackoverflow.
Комментарии:
1. Вы имеете в виду, как отслеживать выполнение
lui
заданной схемы? Если нет, реализуйтеlui
в терминах… что? Кажется, все это уже реализовано там.2. О, потому что в проблеме говорилось, что вы должны внести изменения в фигуру, чтобы разрешить lui, а затем ldi. Может быть, он задал вопрос с подвохом о lui …?
3. О, теперь это имеет смысл! В моем ответе я был вынужден использовать ALU для сдвига значения, вы можете поместить модуль «Shift Left 16» из инструкции [15-11] в новый ввод в мультиплексор перед записью данных. Как всегда, отнеситесь к этому с недоверием.
Ответ №1:
Отказ от ответственности
Я не разработчик EE или CPU.
Всегда задавайте вопросы своему преподавателю или TA, касающиеся материала курса.
lui
кодируется как
31 26 25 21 20 16 15 0
--------- ------- ------- -----------------------------
| 0xf | | d.c. | | RT | | IMMEDIATE |
--------- ------- ------- -----------------------------
6 bits 5 bits 5 bits 16 bits
Где
постоянный ток = Не волнует. Допускается любое значение.
RT = Цель регистрации. Регистр для записи.
НЕМЕДЛЕННАЯ = константа для загрузки.
Выполнение происходит следующим образом.
Инструкция уже загружена в регистр команд, поэтому:
-
Инструкция [31-26], которая пересылается в ** Op [5-0] *, равна 0xf .
-
Инструкция [25-21], которая пересылается в регистр чтения 1, игнорируется, и поэтому должен быть любой последующий поток данных, A должен игнорироваться, поэтому мультиплексор справа от него должен выбрать источник 0. Таким образом, AluSrcA = 0.
-
Инструкция [20-16] пересылается как в регистр чтения 2, так и в регистр записи, поскольку
lui
выполняется только запись, вывод B должен игнорироваться, и, как следствие, нижний мультиплексор ALU не может использовать source. Кроме того, регистр мультиплексирования перед записью должен быть запрограммирован на выбор источника 0, таким образом, RegDst = 0. -
Инструкция[15-0] следует различным путям передачи данных. Первый находится в верхней части схемы, он не будет возвращаться в файл регистра (через данные записи), поэтому его можно игнорировать.
Нижние пути передачи данных содержат инструкцию [15-0] в качестве источника 2 и 3 нижнего мультиплексора ALU (первый — расширенный знак, второй — расширенный знак и умноженный на 4).
Все эти пути попадают в ALU, поэтому теоретически все могут быть реализованыlui
(расширение знака и сдвиг не являются проблемой, убедите себя в этом).
Я считаю, что более идиоматично использовать источник 2, поэтому ALUsrcB = 2.
Результат из ALU возвращается в мультиплексор перед записью данных, поэтому MemtoReg = 0 и, конечно, RegWrite = 1.
ALUOp должно быть значением, которое сдвигает srcB влево на 16. -
Запись или чтение в память отсутствуют, поэтому MemWrite и MemRead равны 0.
Другие сигналы используются на других этапах конвейера, в частности, во время выборки 1 ПК должен быть обновлен, это покрывается PCWrite, PCWriteCond, IorD, PCSource и IRWrite, а также ввод 1 операнда B ALU (значение 4).
1 Похоже, что этот процессор имеет только один ALU, поэтому необходимо соблюдать осторожность, чтобы избежать зависания при чередовании разных этапов. В частности, этапы EX и IF не могут выполняться одновременно, поэтому либо время от времени команда останавливается, либо процессор вообще не конвейеризируется.