3330 Исследование конвейерного RISC-процессора

1.  Структурная схема RISC‑процессора i80860

 

Структурная схема RISC‑процессора i80860 представлена на рисунке 1 и вкладке “Процессор” программы моделирования. Процессор состоит из следующих основных элементов: пятиступенчатый конвейер команд, содержащий исполняемые в данный момент команды, находящиеся на разных стадиях готовности; кэш команд объемом 4 Кб и кэш данных объемом 8 Кб; счетчик команд СК и счетчик тактов СТ; регистр адреса РА, регистр чтения РЧ и трехступенчатый конвейерный регистр записи РЗ, предназначенные для обмена с кэшем данных; блок регистров общего назначения (РОНов); фиксаторы операндов Ф1 и Ф2 и фиксатор результата операции ФД, предназначенные для временного хранения операндов и результата выполненной операции; коммутатор первого операнда, предназначенный для выбора Ф1 в качестве первого операнда либо счетчик СК; флажок условия C, используемый при условных переходах; арифметико‑логическое устройство (АЛУ) и сдвигатель.

2. 

Описание функциональных узлов процессора

 

Конвейер команд процессора состоит из пяти ступеней. Типичные команды выполняются на четырех первых ступенях и проходят четыре стадии: выборка команды из кэша (Fetching), декодирование и выборка операндов (Decoding), исполнение (Executing) и запись результата (Writing). Команда чтения из памяти исполняется на всех пяти стадиях конвейера: выборка команды из кэша (Fetching), декодирование и выборка операндов (Decoding), исполнение (Executing), чтение из памяти (Reading) и запись прочитанного значения в регистр (Writing). На каждом тактовом цикле происходит продвижение команд по ступеням конвейера.

2

Кэш команд представляет собой память, организованную в виде 1024 двойных слов (32 разряда). Адресация команд осуществляется счетчиком команд СК.

Кэш данных содержит 8192 байт. Обмен с кэшем может осуществляться байтами, словами или двойными словами. Адресация данных осуществляется регистром адреса РА. Прочитанные данные помещаются в регистр чтения РЧ. Записываемые данные на стадии декодирования помещаются на первую ступень конвейерного регистра записи РЗ.

В лабораторной модели кэши данных и команд интерпретируются как обычные адресные ЗУ соответствующей емкости.

Счетчик команд СК содержит адрес команды, следующей за выбранной командой. Размер команд фиксирован и равен четырем байтам, и увеличение СК происходит сразу на четыре на каждом такте.

Блок РОН состоит из тридцати двух 32‑разрядных регистров с доступом через два порта чтения и два порта записи. Регистры r0 и r1 имеют особое назначение: r0 всегда равен нулю, а r1 используется для хранения адреса возврата из подпрограммы.

Фиксаторы первого и второго операндов Ф1 и Ф2 предназначены для выборки и временного хранения операндов исполняемой операции. Фиксатор результата ФД предназначен для временного хранения результата выполненной операции перед записью его в РОН. Если результат операции используется следующей командой программы, его значение результата операции записывается также в один или оба фиксатора операндов Ф1 и Ф2 для исключения простоя конвейера.

3

Коммутатор первого операнда предназначен для выбора в фиксатор Ф1 в качестве первого операнда либо в СК содержимого РОНа или поля непосредственного операнда из команды. Выбор источника определяется значением управляющих бит “T2, T1, T0” и бита признака знакового расширения “SE”, вырабатываемых ПЛМ на основе кода команды.

Блок переходов вырабатывает признак истинности условия перехода и управляет работой коммутатора при исполнении команд передачи управления.

АЛУ и сдвигатель предназначены для выполнения арифметических и логических операций и сдвигов. Исходные операнды хранятся в фиксаторах Ф1 и Ф2, а результат записывается в фиксатор ФД.

Счетчик тактовых циклов “СТ” подсчитывает количество тактовых циклов, затраченных на выполнение программы. Счетчик сбрасывается при рестарте программы, инкрементируется на каждом тактовом цикле процессора и останавливается при завершении программы по команде остановки.

3.  Форматы команд процессора

 

Используемые в модели форматы команд в основном соответствуют форматам команд RISC‑процессора Intel 80860, однако некоторые команды в учебных целях были упрощены или унифицированы. Добавлена команда stop для завершения выполнения программы.

Форматы команд представлены на рис. 2.

3.1.      Регистровые команды

 

Формат команды с первым операндом в регистре:

31

26

25

21

20

16

15

11

10

0

КОП

iS2

iD

iS1

00..0

 

4

Формат команды с первым операндом непосредственно в команде:

31

26

25

21

20

16

15

0

КОП

iS2

iD

I1

Описание полей команд:

КОП – код операции, 6 бит;

iS2 – номер регистра‑источника второго операнда, 5 бит;

iD – номер регистра‑приемника результата, 5 бит;

iS1 – номер регистра‑источника первого операнда, 5 бит;

I1 – поле непосредственного первого операнда, 16 бит.

К числу арифметических относятся команды addu (сложение без знака), adds (сложение со знаком), subu (вычитание без знака), subs (вычитание со знаком). При выполнении знаковых команд с непосредственным операндом последний расширяется до 32-х бит с учетом знака. В случае беззнаковых арифметических или логических команд – расширение непосредственного операнда беззнаковое. К логическим командам относятся and (поразрядное И), andnot (поразрядное И-НЕ), or (поразрядное ИЛИ) и xor (поразрядное ИСКЛЮЧАЮЩЕЕ ИЛИ). По результатам выполнения арифметических и логических команд устанавливается флажок условия C по следующим правилам:

-       для знаковых арифметических команд C равен знаковому биту результата;

-       для беззнаковых команд C соответствует биту переноса из старшего бита результата;

-       для логических команд C устанавливается при нулевом результате.

К командам сдвига относятся shr (логический сдвиг вправо), shl (логический сдвиг влево) и shra (арифметический сдвиг вправо). Используемый формат команды – а, причем поле iS1 задает количество сдвигов от 0 до 31. Сдвиг на любое число разрядов выполняется в один такт.

5

В мнемонических обозначениях регистровые команды имеют следующий вид: com op1,op2,res., где com – обозначение операции, op1, op2 – первый и второй операнды, res – результат.

Первый операнд задается обозначением регистра (например: r7), десятичной константой (например: #15) или 16-ричной константой (например: 0x00FF). Для операций сдвига обозначение вида r7 означает не РОН-7, а указатель сдвига на 7 бит. Поля op2 и res всегда обозначают регистр. Напомним, что регистр r0 всегда содержит нулевое значение.

Выполнение регистровых команд происходит в 4 такта: F – выборка команд из кэша команд; D – декодирование кода операции и выборка операндов; E – исполнение; W – запись результата.

3.2.      Команды перехода

 

Формат команды с непосредственным адресом:

31

26

25

0

КОП

Address

 

Формат команды с адресом в регистре:

31

26

25

16

15

11

10

0

КОП

00..0

iS1

00..0

 

Формат команды перехода по равенству или неравенству:

31

26

25

21

20

16

15

11

10

0

КОП

iS2

OSH

iS1

OSL

 

Описание полей команд:

КОП – код операции, 6 бит;

Address – непосредственный адрес, 26 бит;

iS1 – номер регистра, содержащего адрес перехода либо одно из сравниваемых значений в команде перехода по равенству или неравенству, 5 бит;

6

iS2 – номер регистра, содержащего второе из сравниваемых значений, 5 бит;

OSH – старшая часть непосредственного адреса, 5 бит;

OSL – младшая часть непосредственного адреса, 11 бит.

Значение адреса перехода должно быть кратно четырем и не превышать значение 212 - 4= 0FFCh. Непосредственный адрес в команде перехода по равенству или неравенству образуется путем соединения старшей и младшей частей адреса в одно 16‑разрядное поле.

Безусловные переходы bri и br имеют соответственно форматы в и д (см. рис. 2). В первом случае поле Adress содержит непосредственный адрес перехода, во втором этот адрес содержится в регистре, заданном полем iS1. Особенностью операции является то, что после команды перехода выбирается еще одна команда, а только затем – целевая команда. Такие операции называются задержанными и используются для ликвидации простоев конвейера.

Вызовы подпрограмм cli и cl выполняются аналогичным образом, но при этом в регистре r1 запоминается адрес возврата – адрес команды, второй после команды вызова. Возврат из подпрограммы реализуется командой bri.

Условные переходы выполняются по флажку C и имеют формат в. К ним относятся команды bci, bci.t (переход по C=1), bnci, bnci.t (переход по C=0). Суффикс t означает задержанную версию. Для незадержанной версии предполагается наиболее вероятным выполнение команд в естественном порядке (условие не выполняется). Для задержанной версии предполагается переход (условие выполняется). В последнем случае, как и при безусловном переходе, после команды перехода выбирается следующая по порядку, а затем целевая команда.

Если сделанное предположение не оправдывается, то возникает простой конвейера. Ошибочно выбранная команда при этом подавляется.

Особую разновидность команд передачи управления образуют команды bei, bei.t (переход по равенству) и bnei, bnei.t (переход по неравенству). Этими командами производится сравнение первого и второго регистровых операндов

7

и переход по результату сравнения. Команды имеют формат г (см. рис. 2), где iS1 и iS2 задают сравниваемые регистры, а OSH и OSL – адрес перехода.

В число команд передачи управления включена команда останова STOP.