Реферат: И. И. Шагурин архитектура, программирование и применение




Московский инженерно-физический институт

(государственный университет)


Факультет Автоматики и электроники


Кафедра Микроэлектроники


И.И.Шагурин

"АРХИТЕКТУРА, ПРОГРАММИРОВАНИЕ И ПРИМЕНЕНИЕ

32-РАЗРЯДНЫХ RISC-МИКРОПРОЦЕССОРОВ

с архитектурой MIPS"


Введение

Структура и функционирование микропроцессора 1890ВМ2Т

1.1. Общая структура микропроцессора

1.2. Центральный процессор CPU

1.3. Внутренняя кэш-память команд и данных

^ 1.4. Сопроцессор управления CP0

1.5. Организация обращения к памяти

1.6. Обслуживание исключений

1.7. Обслуживание запросов прерывания

1.8. Синхронизация и реализация начального запуска

^ 1.9. Внешние выводы микропроцессора и организация обмена по системной шине

Структура и функционирование системного контроллера 1890ВГ11Т

^ 2.1. Состав и функционирование системного контроллера

2.2. Параллельный порт ввода-вывода данных

2.3. Таймеры

2.4. Контроллер прерываний



Введение
Первые RISC-процессоры, разработанные в Стенфордском и Калифорнийском университетах США в начале 80-х годов, выполняли относительно небольшой набор команд - 50-100 вместо 100-300, выполняемых обычными - CISC (Complex Instruction Set Computer - компьютер со сложным набором команд) - процессорами. Именно эта особенность определила название данного класса процессоров - RISC (Reduced Insruction Set Computer - компьютер с сокращенным набором команд). Однако в последующих разработках RISC-процессоров набор команд значительно расширен, включая команды обработки чисел с плавающей точкой. В настоящее время определились следующие характерные особенности RISC-процессоров:

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

использование в командах обработки данных только регистровой и непосредственной адресации (обращение к памяти используется в командах загрузки и сохранения содержимого регистров, а также в командах управления программой);

отказ от аппаратной реализации сложных способов адресации;

фиксированный формат команд (обычно два или четыре байта) вместо переменного формата (от 1 до 12 и более байт), характерного для CISC-процессоров;

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

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

Перечисленные достоинства RISC-процессоров определили значительный интерес к этим изделиям. Данный класс микропроцессоров выпускает большинство ведущих производителей СБИС - Intel, IBM, Hewlett-Packard, Freescale Semiconductor, Hitachi, Phillips, Texas Instruments, Sumsung, Atmel и другие. Выпускаемые RISC-процессоры имеют различную архитектуру. В настоящее время наиболее популярными являются следующие варианты RISC-архитектур:

ARM – разработка компании Advanced RISC Mashines,

MIPS – разработка компании MIPS Technology,

PowerPC – разработка компаний IBM и Motorola,

SPARC – разработка компании Sun Microsystems.

Отметим, что компании-разработчики архитектур ARM, MIPS, SPARC широко практикуют продажу лицензий на производство микропроцессоров с соответствующей архитектурой. Поэтому многие производители выпускают лицензионные RISC-микропроцессоры, архитектура которых соответствует спецификациям ARM, MIPS или SPARC. Микропроцессоры с архитектурами MIPS и SPARC разрабатываются и выпускаются также российскими организациями.

В данном учебном пособии рассматриваются RISC-микропроцессоры с MIPS-архитектурой.

^ 1. Структура и функционирование микропроцессора 1890ВМ2Т

32-разрядный RISC-микропроцессор 1890ВМ2Т размещается в 108-выводном металло-керамическом корпусе и имеет следующие технические характеристики:

- максимальная рабочая частота 100 МГц,

- напряжение питания 3,3 В ±5%,

- потребляемая мощность - не более 30 мВт/МГц (не более 0,45 Вт в режиме энерго­сбережения),

Микропроцессор производит обработку слов (32 бита), полуслов (16 бит), байтов (8 бит). Порядок следования байтов в словах и полусловах может быть либо Big-Endian ("первым следует старший байт"), либо Little-Endian ("первым следует младший байт"). Порядок следования определяет положение младшего байта B0 по старшему (Big-Endian) или младшему (Little-Endian) адресу (рис. 1.1). В случае Big-Endian старший байт B3 располагается по младшему адресу A0, следующие (младшие) байты B2, B1, B0 – по мере увеличения адресов: A0+1, A0+2, A0+3. В случае Little-Endian самый младший байт B0 располагается по младшему адресу A0, следующие (более старшие) байты B1, B2, B3 – по мере увеличения адресов: A0+1, A0+2, A0+3.

а)

Байт B3

Байт B2

Байт B1

Байт B0




Адреса: A0


A0+1

A0+2

A0+3

б)

Байт B0

Байт B1

Байт B2

Байт B3




Адреса: A0

A0+1

A0+2

A0+3

Рис. 1.1. Адресация байтов при порядке следования Big-Endian (а) и Little-Endian (б)

Полуслово адресуется четным байтом, а слово – байтом, адрес которого кратен четырем. То есть слова имеют адреса вида: 0x0, 0x4, 0x8, 0xС, 0x10, 0x14…; а полуслова – 0x0, 0x2, 0x4, 0x6, 0x8, 0xA, 0xC, 0xE, 0x10… При порядке следования Big-Endian задаваемый в команде адрес A0 указывает на старший байт адресуемого слова (полуслова), при Little-Endian – на младший байт. Используемый при работе микропроцессора порядок выборки байтов задается в процессе его запуска путем подачи соответствующего сигнала на вход Sint0 (см. раздел 1.8).

Отметим, что порядок Big-Endian используется компаниями IBM, Apple Computers, Motorola, Freescale Semiconductor, порядок Little-Endian – компаниями Intel, Hewlett-Packard, Silicon Grafics. Возможность изменения порядка следования байтов позволяет использовать программное обеспечение, разработанное для микропроцессоров различных производителей, облегчает обмен программами и данными между разнотипными машинами.

Процессор работает в одном из двух режимов:

режим пользователя (^ User) – выполнение пользовательских программ,

режим ядра (Kernel) – обслуживание операционной системы (супервизора).

Процессор работает в режиме пользователя, пока не возникнет исключительная ситуация, и тогда процессор переключается в режим ядра. Он остается в этом режиме, пока не поступит команда RFE ("Возврат из исключительной ситуации"), при выполнении которой происходит переход в режим пользователя. Возможно исполнение программы пользователя с противоположным по отношению к режиму ядра порядком следования байтов (Reverse Endianess).

Защита программ, исполняющихся в этих режимах, обеспечивается разделением 4-Гигабайтного адресного пространства на четыре сегмента (см. раздел 1.5). Один сегмент доступен и в режиме пользователя, и в режиме ядра, а три остальных - только в режиме ядра. Кроме защиты памяти в режиме ядра может быть защищен также сопроцессор CP0 от доступа или модификации пользовательской задачей.

^ 1.1. Общая структура микропроцессора

Структура микропроцессора показана на рис. 1.2. В его состав входят следующие основные блоки:

центральный процессор CPU, выполняющий обработку целых чисел;

сопроцессор системного управления CP0,

сопроцессор CP1, выполняющий обработку чисел с плавающей запятой;

кэш-память команд I-Cache и кэш-память данных D-Cache объемом по 8 кб;

интерфейсный блок IFU.

Кроме того микропроцессор содержит ряд служебных блоков: блок управления тактовой частотой; контроллер, обеспечивающий работу 5-ступенчатого конвейера выполнения команд.



Рис. 1.2 – Структурная схема микропроцессора 1890ВМ2Т


^ 1.2. Центральный процессор CPU.

Процессорное ядро 1890ВМ2Т представляет собой 32-битный RISC-процессор, который производит обработку целых чисел, используя 5-ступенчатый конвейер выполнения команд.

Регистровая модель CPU (рис. 1.3) содержит тридцать два 32-разрядных регистра общего назначения (РОН) r0 - r31, 32-разрядный счетчик команд PC и два 32-разрядных регистра HI и LO, которые хранят результат операций целочисленного умножения и деления.





Рис. 1.3. Регистры процессорного ядра CPU

Регистры r0 и r31 имеют специальное назначение. Содержимое регистра r0 всегда имеет значение 0: запись в него не вызывает изменений этого значения, при чтении из него всегда читается 0. Этот регистр используется в операциях очистки регистров и памяти. В регистр r31 заносится адрес возврата (текущее содержимое программного счетчика PC) при выполнении команд вызова подпрограммы.

При программировании на языке ассемблера для регистров r0 – r31 используются альтернативные (программные) названия, приведенные в табл. …

Таблица 1.1. Программные названия РОН

Регистр

Программное имя

Регистр

Программное имя

r0

zero

r15

s0

r1

at

r17

s1

r2

v0

r18

s2

r3

v1

r19

s3

r4

a0

r20

s4

r5

a1

r21

s5

r6

a2

r22

s6

r7

a3

r23

s7

r8

t0

r24

t8

r9

t1

r25

t9

r10

t2

r26

k0

r11

t3

r27

k1

r12

t4

r28

gp

r13

t5

r29

sp

r14

t6

r30

s8, fp

r15

t7

r31

ra


При выполнении умножения 32-разрядных чисел в регистр ^ HI заносится старшие 32 разряда, а в регистр LO – младшие 32 разряда результата. При выполнении деления 32-разрядных чисел полученное частное поступает в регистр LO, а остаток – в регистр HI.

Процессор CPU выполняет набор из 56 команд (табл. 1.1), которые делятся на следующие группы:

- команды загрузки – сохранения,

-команды арифметических и логических операций,

-команды сдвигов,

- команды управления программой.

Все команды имеют разрядность 32 бита. Поэтому команды всегда выбираются пословно и адреса команд всегда кратны 4. Если формируемый адрес в командах переходов не кратен 4, формируется соответствующее исключение (см. раздел 1.6).

Для повышения производительности в процессоре организован 5-ступенчатый конвейер выполнения команд. Реализация команд разбивается на пять этапов (ступеней):

выборка и дешифрация команды (ступень IF);

чтение операндов (ступень RD);

выполнение операций в арифметико-логическом устройстве (ступень ALU);

обращение к памяти для загрузки или сохранения данных (ступень MEM);

запись результата операции в регистр (ступень WR).

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

В реальных условиях возникают ситуации, нарушающие непрерывную работу конвейера. В этих случаях производится останов конвейера (Stall), когда выполнение следующей команды задерживается на определенное число тактов. Например, для выполнения умножения требуется 23 такта, а для выполнения деления – 37 тактов. Поэтому чтение результата из регистров HI, LO может быть проведено только после прохождения требуемого количества тактов. Если соответствующая команда чтения поступает раньше этого времени, то процессор автоматически осуществляет необходимое число тактов останова.

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

1. При выполнении команд загрузки (Load) необходимо обеспечить задержку обращения к загруженным данным на один такт. Загрузка данных производится на ступени MEM выполнения команды. Поэтому загруженные данные будут доступны для выполнения ступени ALU следующей команды только в последующем такте.

2. При выполнении команд условных и безусловных переходов выборка заданной команды перехода производится с задержкой на один такт. Вычисление адреса перехода производится на ступени ALU. В этом такте полученный адрес может быть использован на ступени IF последующей команды, поступление которой должно быть задержано на один такт.

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

При обработке данных микоропроцессор использует трехадресную регистровую адресацию или непосредственную адресацию с применением 16-разрядного операнда imm, заданного в команде.

В таблицаз 1.2, 1.3, 1.4 приведена ассемблерная запись основных команд арифметических и логических операций и сдвигов, где обозначены: rd – регистр размещения результата, rs, rt – регистры, из которых выбираются операнды.


Таблица 1.2. Команды арифметических операций

^ Мнемокод Асссемблера

Операция

ADD rd, rs, rt

ADDI rd, rs, imm

Сложение со знаком

ADDU rd, rs, rt

ADDIU rd, rs, imm

Сложение без знака

SUB rd, rs, rt

Вычитание (rs – rt) со знаком

SUBU rd, rs, rt

Вычитание (rs – rt) без знака

MULT rs, rt

Умножение со знаком

MULTU rs, rt

Умножение без знака

DIV rs, rt

Деление со знаком

DIVU rs, rt

Деление без знака

MFHI rd

Пересылка из регистра HI в РОН

MFLO rd

Пересылка из регистра LO в РОН

При выполнении команд ADD, ADDI, SUB операнды воспринимаются как числа со знаком, который определяется значением старшего разряда. При этом отрицательные числа представляются в дополнительном коде. Непосредственный 16-разрядный операнд imm при выполнении команды ADDI расширяется знаком до 32-разрядного числа

В процессе выполнения команд ADD, ADDI, SUB контролируется возможность переполнения, при возникновении которого реализуется соответствующее исключение (см. раздел 1.6). При выполнении команд ADDU, ADDIU, SUBU над числами без знака возникновение переноса не фиксируется!


Таблица 1.3. Команды логических операций

^ Мнемокод Асссемблера

Операция

AND rd, rs, rt

ANDI rd, rs, imm

Логическое «И»

OR rd, rs, rt

ORI rd, rs, imm

Логическое «ИЛИ»

XOR rd, rs, rt

XORI rd, rs, imm

Логическое «Исключающее ИЛИ»

NOR rd, rs, rt

Логическое «ИЛИ-НЕ»


При выполнении логических операций с непосредственным операндом (команды ANDI, ORI, XORI) заданное 16-разрядное значение imm образует старшие разряды операнда, младшие 16 разрядов которого заполняются нулями.

При выполнении сдвигов число разрядов сдвига задается пятью младшими разрядами содержимого регистра rt (команды SLLV, SRLV, SRAV) или значением непосредственно указанного в команде числа ns, которое должно иметь значения в диапазоне 0 -31 (команды SLL, SRL, SRA). Команда SLL r0, r0, 0 (логический сдвиг влево содержимого регистра r0 на 0 разрядов), которая не выполняет никаких операций, используется ассемблером для реализации команды NOP (отсутствие операции).


Таблица 1.4. Команды сдвигов

^ Мнемокод Асссемблера

Операция

SLL rd, rs, ns

SLLV rd, rs, rt

Логический сдвиг влево


SRL rd, rs, ns

SRLV rd, rs, rt

Логический сдвиг вправо


SRA rd, rs, ns

SRAV rd, rs, rt

Арифметический сдвиг вправо



Загрузка операндов из памяти в регистры r1 – r31 и сохранение содержимого регистров в памяти реализуется с помощью команд загрузки-сохранения (табл. 1.5), использующих косвенно-регистровую адресацию со смещением. При этом адрес ячейки памяти образуется путем сложения содержимого базового регистра rb (32-разрядное число без знака) и заданного в команде смещения offset (16-разрядное число со знаком), которое может принимать значения в диапазоне -32768 до +32767. Если значение offset = 0, то реализуется косвенно-регистровая адресация. Если в качестве rb указать регистр r0 (zero), то реализуется прямая адресация, где смещение offset воспринимается как число без знака и задает 16-разрядный адрес ячейки памяти в диапазоне от 0 до 65 536 (0x0000 FFFF).

При загрузке из памяти в регистр rt байта или полуслова они расширяются до 32 разрядов нулями (команды LBU, LHU) или знаком (команды LB, LH).

Таблица 1.5. Команды загрузки-сохранения

^ Мнемокод Асссемблера

Операция

LB rt, offset(rb)

Загрузить байт со знаком

LBU rt, offset(rb)

Загрузить байт без знака

LH rt, offset(rb)

Загрузить полуслово со знаком

LHU rt, offset(rb)

Загрузить полуслово без знака

LW rt, offset(rb)

Загрузить слово

LUI rt, imm

Загрузить операнд imm в старшие 16 разрядов регистра

SB rt, offset(rb)

Сохранить байт

SH rt, offset(rb)

Сохранить полуслово

SW rt, offset(rb)

Сохранить слово


Команды безусловных и условных переходов (ветвлений) производят изменение содержимого программного счетчика PC, обеспечивая таким образом управление ходом выполнения программы. Эти команды выполняются с запаздыванием на одну команду: в то время, пока формируется новое содержимое PC выполняется команда, следующая в программе за командой перехода. При этом корректность выполнения программы обеспечивается с помощью оптимизирующего компилятора с языка Ассемблера, который производит допустимую перестановку команд в программе или вставляет после команды перехода «пустую» команду NOP. В табл.1.6 приведена ассемблерная запись основных команд безусловных переходов и ветвлений.


Таблица 1.6. Команды безусловных переходов и ветвлений

^ Мнемокод Асссемблера

Операция

J label

JR rd

Безусловный переход

JAL label

JALR rd, rs,

Безусловный переход с возвратом

BEQ rs, rt, label

Ветвление, если (rs) = (rt)

BNE rs, rt, label

Ветвление, если (rs) /= (rt)

BLEZ rs, label

Ветвление, если (rs) <= 0

BGTZ rs, label

Ветвление, если (rs) > 0

BLTZ rs, label

Ветвление, если (rs) < 0

BGEZ rs, label

Ветвление, если (rs) >= 0

BLTZAL rs, label

Ветвление с возвратом, если (rs) < 0

BGEZAL rs, label

Ветвление с возвратом, если (rs) >= 0

BCzT label

Ветвление, если cигнал BrCndz =1

BCzF label

Ветвление, если cигнал BrCndz = 0

Команды безусловных переходов J, JAL содержат 26-разрядный операнд target, который используется для формирования адреса перехода. Ассемблерная запись этих команд имеет вид:

COP target

Эти команды загружают в программный счетчик PC адрес второй команды, выполняемой после команды перехода. Загружаемый 32-разрядный адрес формируется путем сдвига операнда target на два разряда влево и добавления в качестве старших разрядов четырех старших разрядов текущего содержимого PC. Формирование этого адреса производится Ассемблером на основании указываемой в команде метки Label. Метка является символическим обозначением адреса команды, к которой осуществляется переход. Такими метками отмечаются все команды, к которым реализуется безусловный переход или ветвление. Каждая метка должна быть уникальной, то-есть метки различных команд должны отличаться хотя бы одним символом. В качестве символов могут использоваться цифры или латинские буквы (без пробелов), причем первый символ не должен быть цифрой. В ассемблерной строке метка ставится перед мнемкодом соответствующей команды, отделяясь от него двоеточием. Например, команда J metka1 обеспечит безусловный переход к команде программы, которая имееет ассемблерную запись с данной меткой: metka1: LW t1, -20(a0) , где t1, a0 – программные имена регистров r9, r4 (см. табл.1.1), -20 – смещение со знаком (offset).

При выполнении команды JAL адрес второй (после перехода) команды сохраняется в регистре r31 в качестве адреса возврата. Эта команда используется для вызова подпрограмм. Возврат из подпрограммы в этом случае обеспечивается командой JR ra , где ra – программное имя регистра r31.

В командах JR, JALR в качестве адреса перехода используется содержимое регистра rd, которое загружается в программный счетчик PC после выполнения команды, следующей за командой перехода. Ассемблерная запись этих команд имеет вид: JR rd

JALR rd, rs

При выполнении команды JALR адрес второй (после перехода) команды сохраняется в регистре rs в качестве адреса возврата. Эта команда также служит для вызова подпрограмм.

Возврат из подпрограммы производится с помощью команды JR r31, если обращение к подпрограмме выполнялось с помощью команды JAL, или с помощью команды JR rs, если обращение выполнялось с помощью команды JALR.

Команды BCzT, BCzF, выполняемые процессором управления CP0, используют в качестве условия перехода значения сигналов на одном из двух внешних входов микропроцессора BrCondz, где z = 0 или 1 (см. раздел 1.9). Ассемблерная запись этих команд:

COP offset

При выполнении команд условных переходов адрес перехода, загружаемый в ^ PC, формируется путем сложения текущего содержимого PC (адрес следующей команды после перехода) с заданным в команде 16-разрядным смещением offset, которое является числом со знаком. Перед сложением значение offset сдвигается влево на два разряда и расширяется знаком до 32 разрядов. Команды BEQ, BNE выполняют переход по результату сравнения содержимого заданных регистров rs, rt. Их ассемблерная запись имеет вид: COP rs, rt, offset.

Остальные команды осуществляют переход по результату анализа содержимого регистра rs. Их ассемблерная запись имеет вид: COP rs, offset. При анализе условий содержимое регистров rs, rt воспринимается как число со знаком. Формирование фактического значения адреса, загружаемого в PC, производится Ассемблером по указываемой в команде метке Label.

Команды реализации исключений SYSCALL и BREAK инициируют специальные виды исключений типа «системный вызов» и «останов в контрольной точке». Для возврата из обработки исключений служит команда RTE, выполняемая сопроцессором управления CP0.

^ 1.3. Внутренняя кэш-память команд и данных.

Кэш-память представляет собой быстродействующую буферную память ограниченного объема, которая располагается между процессором и ОЗУ. В микропроцессорах 1890ВМ2Т содержится две отдельные кэш-памяти для команд и данных (гарвардская архитектура), каждая из которых имеет объем 8 Кбайт. При этом обеспечивается одновременный доступ к кэшу команд и кэшу данных, что позволяет совместить эти обращения в одном цикле для повышения производительности процессора. Цикл обращения к кэш-памяти производится за 1 рабочий такта (ступень MEM конвейера команд), то есть намного быстрее, чем обращение к ОЗУ по системной шине.

В процессе работы микропроцессорной системы отдельные блоки информации копируются из ОЗУ в кэш-память. Процедура загрузки информации из ОЗУ в кэш-память называется кэширование. Когда процессор обращается за командой или данными, то сначала проверяется их наличие в кэш-памяти. Если необходимая информация находится там, то она быстро извлекается, так как обращение к кэш-памяти производится с тактовой частотой процессора. Такой случай обращения называют кэш-попаданием. Если необходимая информация в кэш-памяти отсутствует, то она выбирается из ОЗУ и одновременно заносится в кэш-память. Такой случай называют кэш-пpомахом. При этом производится обращение к ОЗУ по системной шине.

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

Структура кэш-памяти команд и кэш-памяти данных представлена на рис. 1.5, 1.6. Каждый кэш состоит из двух наборов: A и B, емкостью по 4 Кбайт. Набор содержит 256 строк в кэше команд и 1024 строки в кэше данных. Каждая строка кэш-памяти (рис. 1.4) содержит тэг (старшие 12 разрядов адреса A31-20), поле данных (16 байт в кэше команд и 4 байта в кэше данных) и бит достоверности V (Valid), который принимает значение V=1 при загрузке данных в эту строку (данные доступны для использования) или V=0 при отсутствии в строке требуемых данных (данные не загружены или недействительны - аннулированы).



V

Тэг (20 бит)

Данные (128 бит для кэша команд, 32 бита для кэша данных)


Рис. 1.4. Формат строки кэш-памяти команд и данных

Рис. 1.5. Организация кэш-памяти команд

Рис. 1.6. Организация кэш-памяти данных

При обращении к внутренней кэш-памяти для выборки команд или данных сформированный процессором 32-разрядный физический адрес (рис. 1.7) рассматривается как совокупность двух полей: 20-разрядного тэга (старшие разряды адреса A31-12) и 12-разрядного индекса (младшие разряды адреса A11-0). Индекс указывает строки в наборах A и B соответствующей кэш-памяти, к которым производится текущее обращение. Старшие разряды A31-12 физического адреса сравниваются со значениями тэгов в выбранной строке наборов A и B. Если фиксируется их совпадение в одной из строк, то это означает что адресованная команда или данные находятся в этой строке кэш-памяти (кэш-попадание). В этом случае младшие разряды индекса определяют выбор одной из четырех 32-разрядных команд, хранящихся в соответствующей строке кэш-памяти команд (рис. 1.5), или выбор байта, полуслова или полного слова из строки кэш-памяти данных (рис. 1.6).


31 12

11 0

Тэг (20 бит)

Индекс (12 бит)

Рис. 1.7. Формат физического адреса при обращении к внутренней кэш-памяти

При записи данных одновременно с занесением в соответствующую строку кэш-памяти производится их сохранение в ОЗУ. Такой механизм работы кэш-памяти данных называется сквозной записью (Write-Through). При этом обеспечивается постоянное соответствие содержимого кэш-памяти и ОЗУ (когерентность данных), что позволяет другим устройствам системы в любой момент обращаться к ОЗУ в режиме прямого доступа и получать достоверные результаты.

Для минимизации задержек, связанных с записью в ОЗУ, микропроцессор 1890ВМ2Т имеет буфер записи, который представляет собой блок регистров, работающий в режиме реализации очереди - FIFO (First Input – First Output). В этот буфер за один рабочий такт вводится адрес записи и значение записываемых данных, которые затем через интерфейсный блок IFU микропроцессора поступают в ОЗУ со скоростью работы системной шины. При этом передача данных по системной шине производится без остановки конвейера выполнения команд, если во время обмена не возникают кэш-промахи. Глубина буфера (длина очереди) составляет четыре позиции, то-есть буфер может содержать до четырех ожидающих записи слов.

Если совпадения тэгов не обнаружено, то это означает, что адресованные команда или данные отсутствуют в кэш-памяти (кэш-промах). Кэш-промах фиксируется также, если для соответствующей строки кэш-памяти значение бита V=0, то-есть содержимое этой строки отсутствует (не загружено) или недействительно (аннулировано). В таких случаях производится обращение к ячейке ОЗУ с соответствующим адресом. При этом реализуется необходимое количество тактов останова конвейера команд. Выбранные из ОЗУ команда или данные поступают в процессор и одновременно записываются в строку набора A или B кэш-памяти, имеющей заданный индекс.

Если кэш-промах возникает при выборке команды, то выполняется чтение из ОЗУ четырех последовательно размещенных слов (16 байтов), которые заполняют соответствующую строку кэш-памяти команд. Для этого в составе интерфейсного блока IFU микропроцессора имеется буфер чтения емкостью 4 слова. Блок IFU последовательно реализует четыре цикла чтения 32-разрядных слов по системной шине, а одновременно с этим процессор производит выполнение поступившей из ОЗУ команды. Циклы, во время которых осуществляется процесс одновременного выполнения считанных из ОЗУ команд и заполнения строки кэша новыми командами, называются циклами стриминга (Streaming). Такие циклы позволяют заполнять кэш-память блоками из четырех последовательно расположенных команд.

Если кэш-промах возникает при чтении данных, то также возможно выполнение циклов блочной загрузки четырех слов, последовательно размещенных в ОЗУ, в четыре последовательно расположенных строки кэш-памяти данных. Для этого необходимо установить в 1 бит DBRefill в регистре конфигурации Config сопроцессора CP0 (см. раздел 1.4). Отметим. что при кэш-попадании производится чтение только одного слова при любом значении бита DBFefill.

Содержимое строк в наборах A кэш-памяти команд и данных может быть защищено от перезаписи при кэш-промахе путем установки в 1 бита блокировки ICL (для кэша команд) или DCL (для кэша данных), которые содержатся в регистре состояния Status сопроцессора CP0 (см. раздел 1.4). Таким образом можно обеспечить постоянное сохранение в кэш-памяти определенных фрагментов программного кода или массива данных.

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

Проверяется значение бита V в строках наборов A и B, имеющих указанный в адресе индекс. Если свободна строка в наборе A (для этой строки установлено значение бита V=0), то запись производится в эту строку. Если строка в наборе A занята (значение бита V=1), а строка в наборе B свободна (значение бита V=0), то запись производится в строку набора B. После записи в свободную строку команд или данных для нее устанавливается значение бита V=1, указывающего на заполнение строки достоверной информацией.

Если адресуемые индексом строки в обеих наборах заполнены и запись в набор A блокирована (в регистре Status соответствующий бит ICLили DCL установлен в 1), то производится запись нового содержимого в строку набора B.

Если адресуемые индексом строки в обеих наборах заполнены и запись в набор A не блокирована (в регистре Status бит ICL или DCL сброшен в 0), то выбор набора A или B для записи в соответствующую строку нового содержимого осуществляется случайным образом.

Отметим, что в общем адресном пространстве объемом 4 Гбайт имеется некэшируемый сегмент – область адресов 0xA0000000…0xBFFFFFFF. Кроме того кэширование отдельных страниц памяти может быть программно разрешено или запрещено с помощью диспетчера памяти, входящего в состав сопроцессора управления CP0 (см. раздел 1.4). При обращении к некэшируемой области памяти адресуемые команды и данные выбираются из ОЗУ без их размещения во внутренней кэш-памяти. Обращение к некэшируемой области вызывает останов конвейера ^ Рис. 1.12. Формат содержимого регистров EntryHi и EntryLo Входящие в состав сопроцессора CP0 регистры EntryHi и EntryLo имеют такой же формат содержимого, как строка TLB (рис. 1.12). Эти регистры используются при выполнении команд ^ TLBP, TLBR, TLBWI, TLBWR (см. табл. 1.9), обеспечивая доступ к содержимому определенных строк TLB.
Процедура трансляции виртуального адреса в физический при обращении к сегментам kuseg, kseg2 показана на рис. 1.13. При этом реализуется следующая последовательность этапов трансляции.

Старшие 20 разрядов виртуального адреса A31-12 сравниваются со значениями поля VPN во всех 64 строках TLB. Если ни в одной из строк TLB не обнаруживается совпадение значений A31-12 и VPN, то реализуется исключение типа UTLBMiss при обращении к сегменту kuseg или исключение типа TLBL/TLBS при обращении к сегменту kseg2.

Если обнаруживается совпадение разрядов A31-12 и поля VPN в какой-либо строке TLB, то проверяется значение бита G в этой строке. При значении G=1 (страница глобальная) выполняется следующий этап трансляции. При G=0 (страница неглобальная) производится сравнение значений идентификаторов PID, записанного в регистре EntryHi и хранящегося в данной строке TLB. При их совпадении осуществляется следующий этап трансляции. При несовпадении реализуется исключение типа UTLBMiss при обращении к сегменту kuseg или исключение типа TLBL/TLBS при обращении к сегменту kseg2.

Проверяется значение бита достоверности V выбранной строки. Если значение V=0 (содержимое строки недостоверно), то реализуется исключение типа TLBL/TLBS. Если V=1 (достоверность содержимого строки) и выполняется процедура чтения из памяти, то формируется физический адрес, в котором в качестве старших разрядов A31-12 используется поле PFN из данной строки TLB.

Если V=1 и выполняется процедура записи данных в память, то проверяется значение бита D в выбранной строке TLB. Если D=0 (запрещение записи на данную страницу), то реализуется исключение типа Mod. Если D=1 (запись разрешена), то формируется физический адрес, как описано в п.3.

Проверяется значение бита N выбранной строки TLB. Если N=1 (кэширование страницы запрещено), то обращение по сформированному физическому адресу производится только к ОЗУ. Если N=0 (кэширование разрешено), то обращение производится с использованием кэш-памяти (см. раздел 1.3).



Рис.1.13. Трансляция виртуального адреса в физический

Если при трансляции адреса реализуется один из указанных выше типов исключения, то процессор переходит к выполнению соответствующей программы его обработки в режиме ядра (см. раздел 1.6). Например, при обработке исключений типа UTLBMiss или TLBL/TLBS выполняется процедура записи в TLB строки с новым содержимым, которое должно иметь требуемые значения полей VPN или PID.

Загрузка в строку TLB нового содержимого производится с помощью команд TLBWI, TLBWR. При этом в выбранную строку записывается содержимое регистров EntryHi (разряды 63-32 строки) и EntryLo (разряды 31-0 строки). Выбор строки определяется содержимым регистра Index (при выполнении команды TLBWI) или Random (при выполнении команды TLBWR). Формат содержимого этих регистров показан на рис.1.14. Регистры содержат 6-битные поля Index, Random, которые указывают номер строки TLB, загружаемой при выполнении этих команд.





Рис. 1.14. Формат содержимого регистров Index (а) и Random (б)

Регистр Index, доступный для чтения и записи, используется при выполнении команд ^ TLBWI, TLBR, TLBP. При этом поле Index задает номер строки TLB, в которую загружается содержимое регистров EntryHi, EntryLo при поступлении команды TLBWI, и содержимое которой переписывается в эти регистры при поступлении команды TLBR.

Регистр Random доступен только для чтения. Значение поля Random в этом регистре принимает случайные значения в диапазоне от 8 до 63. Содержимое этого поля позволяет случайным образом задавать номер строки, содержимое которой будет загружаться из регистров EntryHi, EntryLo по команде TLBMR. Механизм случайного выбора строк при обновлении содержимого TLB позволяет упростить алгоритмы и программы обработки исключений, возникающих при трансляции виртуальных адресов. При этом содержимое восьми строк TLB с номерами 0…7 будет защищено от замены при выполнении данных процедур, что может быть использовано для сохранения каких-либо критичных функций операционной системы

Команда TLBP производит поиск строки, содержимое которой совпадает с содержимым регистров ^ EntryHi, EntryLo. При этом номер такой строки указывается в поле Index. Если такой строки не найдено, то в регистре Index устанавливается значение бита P=1. Если совпадение содержимого будет обнаружено для двух или более строк TLB, то устанавливается значение бита TS=1 в регистре Status (см. раздел 1.4) и производится отключение TLB.

Отметим, что при отключенном TLB трансляция виртуальных адресов сегментов kuseg, kseg2 не производится, и физические адреса будут иметь неопределенные значения. В этом случае обращение может производиться только к сегментам kseg0, kseg1. Ситуация отключения TLB возникает также при запуске процессора, поэтому программа начальной загрузки должна выполнить инициализацию TLB до обращения к сегментам kuseg и kseg2. Инициализация осуществляется путем заполнения полей VPN всех строк TLB номерами страниц, относящихся к сегментам kseg0, kseg1 (диапазон номеров 0x80000...0xBFFFF).

1.6. Обслуживание исключений

Микропроцессор 1890ВМ2Т позволяет реализовать
еще рефераты
Еще работы по разное