2016-11-03 4 views
2

Прежде всего, извините за плохой английский. Вопрос заключается в проблеме в моем учебнике по компьютерной архитектуре, я нашел ответ в сети, но все еще не могу узнать подробности.Компьютерная архитектура трубопроводов киосков

Следующая фаза команд в пятиступенчатой ​​(выборка, декодирование, выполнение, память, запись) однопроводной микроархитектуры без пересылки механизм. Все операции один цикл, кроме LW и SW являются 1 + 2 и Бранч 1 + 1.

Loop:    C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 ... 
LW R3, 0(R0) F D E M - - W 
LW R1, 0(R3)  F D - - - E M - - W 
ADDI R1, R1, #1   F - - - D - - - E M W 
SUB R4, R3, R2       F - - - D E M W 
SW R1, 0(R3)           F D W M ... 
BNZ R4, Loop             F D E ... 
... 

И у меня есть несколько вопросов, как следующее.

  1. Почему вторая инструкция может запускать D в C2? Когда я наклонился, D-этап включал «чтение регистра», но предыдущая инструкция записывает обратно в R3 до C7.

  2. Как и предыдущий, в чем причина, почему D начинается с C7, а E начинается с C11?

  3. Почему 4-й inst должен начинаться с C7 вместо C4?

Эта проблема возникла из книги «Компьютерная архитектура: количественный подход 5e», пример 3.11.

+0

Вы не можете редактировать вопрос по ссылке, где вы ее нашли? –

ответ

0

Classic RISC pipeline wiki article очень хорошо. Проверьте это, если вы этого не сделали.

  1. Почему вторая инструкция может запускать D в C2? D включает reg-read, но предыдущая инструкция не записывается обратно в R3 до C7.

Я не уверен, я не потратил много времени на трубопроводе в классическом RISC. Основываясь на том, что мы видим для этого и ADDI, похоже, что чтение в регистре происходит на этапе E.

Это прекрасно объясняет, что E останавливается до обратной записи предыдущего груза. Если вы уверены, что рег-чтение должно произойти на этапе D для исследуемого трубопровода, это решение не соответствует вашему конвейеру; это правильно для другого конвейера, который не считывает регистры до Execute.

3-й inst's D начинается с C7, а E начинается с C11?

Этап D трубопровода занят предыдущей инструкцией до C7, после чего он может декодировать.

R1 не готов до цикла 11, в котором the data can be forwarded с этапа памяти предыдущей инструкции, поэтому выполнение ADDI может происходить параллельно с Writeback в предыдущей инструкции. Это называется «байпас».

Обход может выполнять операции ALU с задержкой в ​​1 цикл, поэтому вы можете использовать вывод ADD в следующей инструкции без стойла.

  1. Почему 4-й inst должен начинаться с C7 вместо C4?

Поскольку предыдущая инструкция застопорилась на этапе выборки, и это нефтепровод в заказе; не исполнение вне порядка.

+0

Спасибо, если чтение в регистре выполняется на этапе «EXE», то фазу инструкции можно полностью объяснить! – zbqv

1

Похоже, что ваш конвейер замораживает все системы, когда он выполняет операцию, связанную с памятью (LW), кроме того, что я не могу думать о допустимой причине, по которой ADDI не может выполнить свой декодирование на C4. Я не говорю, что он действителен для операции загрузки, чтобы заморозить все исполнение, но это похоже на «единственное» логическое объяснение.

Инструкция 2 может выполнять декодирование в C3, но она должна ждать, пока инструкция 1 не вернет свои данные в R1. Вот почему выполнение второй команды задерживается до C7.

Кстати, когда вы сказали, что нашли ответ на «сеть», это из достоверного источника?

+0

Я думаю, что ОР ошибается в чтении reg-read на стадии D. ADDI задерживается по той же причине, которую вы определили для команды 2, отложенной: вход не готов, а не какой-либо странный «заморозить всю машину». –

+0

@PeterCordes Если это так, то почему SUB R4, R3, R2 F - - - D E M W ' –

+0

@PeterCordes, если это так, почему декодирование команды SUB задерживается? –

1

Почему вторая инструкция может запускать D в C2? D включает reg-read, но предыдущая инструкция не записывается обратно в R3 до C7.

Ans - это потому, что этап DECODER в MIPS простой pipleline имеет две части/подэтапы.

Dec = ДЕКОДИРОВАНИЯ + РР (REGISTER READ)

инструкция может быть декодирована, который, код операция может быть считана и декодирована, но из-за зависимости в этом случае, РР будет простаивать до выполн ют команду первой нагрузки (Fetches R3 из памяти) и с простой пересылкой в ​​C7 следующая загрузка может перейти к выполнению.

Нарушение этапа DECODE в двух подэтажах осуществляется во избежание структурной опасности. , если вы снова просмотрите схему «Компьютерная архитектура: количественный подход», вы увидите пунктирную линию и сплошную линию, которая намеренно нарисована, чтобы показать общую работу, определяется в 2 частях (DECODE OPCODE + REG READ).

Другой два вопроса я согласен с @Peter Корд

надеюсь, что это помогает. Jaymin

 Смежные вопросы

  • Нет связанных вопросов^_^