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

Рисунок 5.4 Файл специальных регистров SF размера (Kx n)


Рисунок 5.5 Дешифратор адреса AdDec файла регистров SF

Мы не определяем выход Doutфайла специальных регистров, если регистр обновляется и читается одновременно.

Реализация

Рисунок 5.4 изображает пример реализации файла специальных регистров SF размера (Kx n). Мультиплексор перед регистром SF[r] выбирает нужный вход в зависимости от флага специальной записи w[r].

Схема дешифратора адреса AdDecна рисунке 5.5 содержит два k-битных декодера (k = [log K]). Адрес чтения adrдекодируется в биты выбора sl[K- 1 : 0]. Основываясь на этом декодируемом адресе, схема выбора DataSelвыбирает соответствующее значение стандартного выхода данных Dout. Для этой цели, данные Do[r] маскируются битом выбора sl[r]. Замаскированные данные объединяются n-OR-trees в биты разрезанным способом:

Адрес записи adwдекодируется в K битов выбора. Сигналы синхронизации Kрегистров генерируется из этих сигналов согласно уравнению 5.3. Таким образом, стоимость всего файла регистров SF определяется как

CSF(K, n)    =   K * (Cff(n)+Cmux(n))+CAdDec(K) + n * Cor * Ctree(K) + K * Cand(n)




Рисунок 5.6 Окружение SPRenv конструкции DLX

CAdDec(K)    =   2*Cdec([logK]) + Cand(K) + Cor(K).

Четкие порты чтения имеют нулевую задержку, тогда как стандартный выход Doutзадерживается дешифратором адреса и схемой выбора:

DSF(Do[r])    =   0;

DSF (Dout)    =   Ddec ([log K]) + Dand + Dor • Dtree (K).

При доступе по записи, файл специальных регистров имеет задержку доступа DSFw , и сигналы записи wи w[] задерживают сигналы синхронизации на DSF(w;ce):

DSFw    =   max{Dmux(n), Ddec([log K]) + Dand + Dor } + Dff

dsf(w; ce)    =   Dand + Dor .

Окружение SPRenv

Ядро окружения специальных регистров SPRenv (рисунок 5.6) – файл специальных регистров размером 6 x 32. Имена этих регистров SPR[5:0] перечислены в таблице 5.3. Окружение управляется сигналами записи SPRwи SPRw[5 : 0], и сигналами JISR, repeat, и sel.

Стандартные порты чтения и записи используются только при специальных командах перемещения movi2s и movs2i и команде rfe. Стандартных выход данных файла регистров равен

Souti = SPR[Sas]i-1 ,

и в случае запроса записи SPRw = 1, файл регистров обновляется как

SPR[Sad]ui := C.4i .


Согласно спецификации раздела 5.2, регистры SPR также должны быть обновлены по команде trap и при переходе на ISR. Эти обновления производятся через шесть четких портов записи файла специальных регистров.

Так как команда trap всегда вызывает прерывание, т.е., trapi = 1 подразумевается JISRi = 1, регистр SPR требует только специальной записи на JISR. Поэтому сигналы записи устанавливаются в

SPRw[r] = JISR.

При JISRрегистр состояния SR очищается. Регистр ECA буферизирует причину маскирования MCA а регистр Edata получает содержимое C.4. При trap, C.4 обеспечивает константу ловушки, а при загрузке или сохранении он предоставляет эффективный адрес памяти:

(Di[0], Di[2], Di[5]) = (0, MCA, C.4).

Выбор входа Di[l] более сложен. Если команда Ii прерывается, новое значение ESR зависит от типа прерывания и от типа Ii




где

Окружение SPRenv выбирает соответствующий вход


где

sel = /\ SPRw /\ ((Sad) = 0).

Согласно определению JISR, если команда Ii прерывается, два исключения PC должны быть установлены в

тогда как при прерывании типа abort, значение исключений PC не имеют значения. Окружение PCenv генерирует значения PCui , DPCui , и

DDPCiu = DPCi-1 ,


которые спускаются вниз по конвейеру вместе с командой Ii . За исключением команды rfe,

DPCiu = PCi-1 ,