Реализация инструкций для многоциклового пути передачи данных

#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 не могут выполняться одновременно, поэтому либо время от времени команда останавливается, либо процессор вообще не конвейеризируется.