Как узнать, какие управляющие сигналы генерирует инструкция MIPS? - PullRequest
0 голосов
/ 14 апреля 2020

Я создаю симуляцию в Verilog.

У меня есть модуль памяти, загруженный инструкциями MIPS, например ...

20082000
200d2030
8dad0000
240a0001
ad0a0000
..
..
..

модуль памяти выводит инструкцию на вход модуля «Управление», этот модуль имеет следующие сигналы:

RegDst, Jump, Branch, MemRead, MemtoReg, ALUOp, MemWrite, ALUSr c, RegWrite

Значения сигналов будут сгенерированы для списка поддерживаемых инструкций, которые модуль памяти загружен. Инструкции, такие как add, addi, et c.

Как узнать, будет ли сигнал истинным или ложным для данной инструкции?

1 Ответ

1 голос
/ 14 апреля 2020

Вы должны разложить то, что делает каждая инструкция.

Используйте, например, зеленую карту MIPS .

Все инструкции типа R имеют определенный контроль сигналы, которые следуют из их основного c формата инструкции - что они исходят / читают rs & rt и, например, нацеливают / записывают в rd, что означает, что:

  • RegDest верно (записано rd, а не rt)
  • RegWrite верно (записано некоторое регистр)
  • ALUSrc верно (2-е кв. ввод от регистра, а не от немедленного)

Все команды I-типа имеют определенные общие шаблоны управляющих сигналов:

  • RegDest ложно (записано rt , rd для I-типов не существует)
  • RegWrite верно (записано некоторое регистр)
  • ALUSrc неверно (2-й вход alu от немедленного, не из регистра)

Никакие инструкции не касаются памяти, кроме загрузки и сохранения, поэтому MemRead и MemWrite ложны для всех остальных инструкций. MemRead верно только для нагрузок и MemWrite верно только для хранилищ.

MemtoReg верно для нагрузок, поскольку результат приходит из памяти, но ложно для большинства других инструкций, как результат (если any) вместо этого поступает из ALU.


Для многих инструкций некоторые из этих управляющих сигналов не имеют значения, поэтому их можно классифицировать как "все равно", а не как true или false (любой из что было бы хорошо с помощью оборудования). Например, так как инструкция сохранения отправляет данные в память, она не обновляет регистр ЦП - таким образом, MemToReg для этого не имеет значения, так как никакой регистр не записывается в любом случае (то же самое для ветвей, поскольку они также не ' t записать / обновить регистр).

Когда RegWrite ложно, тогда MemtoReg не имеет значения (не волнует).


В отличие от большинства В остальных случаях ALUOp - это один управляющий сигнал, который больше, чем один логический. Таким образом, ALU должен знать, какую операцию выполнять, и для команд R-Type это происходит из поля funct инструкции, тогда как для команд I-Type это происходит из самого поля кода операции.

Для нагрузок и запоминающих устройств ALU (в ЦПУ MIPS с одним циклом) используется для выполнения вычисления в режиме адресации, поэтому необходимо указать ALU:

Для ветвей (в ЦП MIPS с одним циклом), ALU нужно сказать вычесть (то есть сравнить).


Высокий уровень: оборудование представляет собой объединение всех компонентов, необходимых для выполнения всех инструкций. Управляющие сигналы используются, чтобы «активировать» надлежащие аппаратные компоненты для любой выполняемой команды, но хитрость заключается в том, что эти сигналы фактически не активируют компоненты, а вместо этого выбирают, принимать или игнорировать их вывод (ы) после они вычислили что-то полезное или бесполезное, соответственно, с учетом выполняемой инструкции.

Это немного странно, но этот объединение всех необходимых аппаратных компонентов (для каждой возможной инструкции) сидит там и что-то делает все время (если не используется очень продвинутая схема энергосбережения). Поэтому управляющие сигналы вместо того, чтобы отключать компоненты, которые не вносят вклад в текущую инструкцию, просто игнорируют результаты своих вычислений, вместо этого отдавая предпочтение чему-то важному.

Например, фактически, непосредственное оборудование является знаком, расширяющим 16-битный I-тип немедленно в каждом цикле для каждой инструкции , но это вычисленное значение используется только в том случае, если команда фактически является I-типом, и в противном случае игнорируется из-за управляющего сигнала ( ALUSr c).

Хотя это может показаться неэффективным энергопотреблением, необходимо оценить производительность параллелизма, а именно то, что ненужные вещи вычисляются заранее, на случай, если они нужны и только подавляются. позже, когда станет известно больше.

...