Детальный проект конвейерного RISC процессора (Глава 4 "Основы конвейеризации"), страница 2

но команда Ii не находится в регистре команд перед циклом Т + 1. Таким образом, даже если мы обеспечиваем дополнительный сумматор для вычисления адреса перехода на этапе decode, PCi не может быть вычислен перед циклом Т + 1. Следовательно, команда Ii+1 может быть выбрана только в цикле T + 2.

Семантика Задержанного Ветвления

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

1. Ветвление, принятое в команде Ii , влияет только на PC вычисленный в следующей команде, т.е. PCi+1. Этот механизм называется delayedbranch (задержанное ветвление).

2. Если Ii является управляющей операцией, тогда команда Ii+1 следующая за Ii называется командой в слоте задержки (delayslot) Ii. Управляющие операции не  допускаются в слотах задержки.

Формальное индуктивное определение механизма задержанных ветвлений




Видно, что определение адреса перехода PC + 4 + immвместо гораздо более очевидного адреса перехода PC + immмотивируется механизмом задержки ветвления. После управляющей операции Ii всегда выполняется команда IM[PCi-1+ 4] в слоте задержки Ii (потому что Ii не занимает слот задержки и, следовательно, bjtakeni-1 = 0). При адресе перехода PC + imm, может быть придется использовать вычисление


PCi+1 = PCi + immi+1 - 4

вместо

PCi+1 = PCi + immi+1.

Семантика задержки ветвления используется, например, в наборе команд MIPS [KH92], SPARC [SPA92] и PA-RISC [Hew94].

Семантика Задержанного PC

Вместо задержки принятых ветвлений можно применить задержку всех вычислений PC. Программный счетчик PC' обновляется согласно простой последовательности семантик:

Результат просто синхронизируется с задержанным программным счетчиком DPC:

DPCi+1= pc'i .

Задержанный программный счетчик DPCиспользуется для выборки команд из IM, а именно Ii = IM[DPCi-1]. Вычисления начинаются с

PC'-1    =   4 DPC-1    =   0

Мы называем это униформой и просто осуществляем механизм задержки PC. Эти два механизма, как окажется позже, полностью эквивалентны.

Команды перехода (Jump) и связи (Link)

Мы продолжаем нашу дискуссию тонким наблюдением относительно семантики команд перехода и связи (jal, jalr) которые обычно используют для вызова процедур. Их семантика также изменяется механизмом задержки ветвлений! Сохранение PC + 4 в GPR[31] приводит к возврату в слот задержки команд перехода и связи. Конечно, возврат должен быть к


команде после слота задержки (например, смотри MIPS architecture manual [KH92]). Формально, если Ii = IM(PCi-1) команда перехода или связи, тогда

PCi = PCi-1 + 4


потому что Ii не находится в слоте задержки а команда

Ii+l=IM(PCi)

является командой в слоте задержки Ii. Команда перехода и связи Ii поэтому должна сохранить

GPR[31]i = PCi + 4 = PCi-1 + 8.

В простейшем механизме задержки PC просто сохраняем GPR[31]i = PC'i-1+4.

Эквивалентность задержанных ветвлений и задержанного PC

Теорема 4.1 > Предположим, что машина с задержкой ветвлений и машина с задержкой PC начинают работу с одной и той же программой (без управляющих операций в слотах задержки) и с одинаковыми входными данными. Обе машины выполняют одну и ту же последовательность команд I0, I1, ....

ДОКАЗАТЕЛЬСТВО        Фактически это теорема моделирования. Индукцией по i мы покажем две вещи, а именно

1. (PCi , PCi+1) = (DPCi , PC'i),

2. если Ii является командой перехода или связи, тогда значение GPR[31], сохраняемое в регистре 31 в течении команды Ii одинаково для обоих машин.

Так как bjtaken-1 = 0, из этого следует, что PC0 = 4. Таким образом

(PC-1,PC0) = (0,4) = (DРС-1, РС'-1),

и первая часть и индукционной гипотезы верна для i = - 1 .

В шаге индукции мы заключаем от i1 до i, основываясь на индукционной гипотезе, что (PCi-1 , PCi) = (DPCi-1 , PC'i-1). Так как

DPCi    =   PC'i-1по определению DPC

=   PCi                    по индукционной гипотезе,

остается только показать, что

PCi+1=PC'i,