1.1. Структура ядра в архитектуре MIPS
Ядро M4K содержит как обязательные, так и дополнительные (опциональные) блоки (рис.1.1).Обязательные блоки составляют основу MIPS архитектуры. Дополнительный блок может быть добавлен к M4Kядру исходя из особенностей внедрения.
Рис.1.1. Структурна схема взаимодействия функциональных блоков ядра M4K MIPS архитектуры
Обязательные блоки следующие: исполнительное ядро, блок умножения/деления (MDU), системный сопроцессор (CP0), модуль управления памятью (MMU), FixedMappingTranslation (FMT), интерфейс SRAM, управление электропитанием
Дополнительные или конфигурируемые блоки включают: Блок интеграции с разработанным пользователем сопроцессором Coprocessor 2 (СP2), Расширение системы команд с помо-
щью CorExtend(User Defined Instructions) –UDI, улучшенный JTAG (EJTAG) контроллер.
6
1.1.1. Исполнительное ядро (регистровый файл (RF), АЛУ, сдвиговый регистр)
Висполнительном ядре M4K реализуется архитектура загрузки/сохранения с одиночным циклом АЛУ следующих операций: логических, сдвиговых, сложения, вычитания, а также автономный блок умножения/деления.
Исполнительное ядро включает в себя:32-х битный сумматор, используемый для вычисления адреса данных; адресное устройство для вычисления адреса следующей команды; логика определения перехода и вычисления адреса перехода; блок выравнивания при загрузке данных; мультиплексоры обходных путей передачи данных для исключения остановок конвейера в тех случаях, когда команды, производящие данные и команды, использующие эти данные, расположены в программе достаточно близко; блок обнаружения Нуля/Единицы для реализации командCLZ(команды подсчета количества старших нулевых битов) и CLO (единичных битов)внутри 32-разрядного слова); АЛУ для выполнения побитных операций; сдвигающее устройство и устройство выравнивания при сохранении данных.
Вядре M4K содержится тридцать два 32-битных регистров общего назначения, использующихся используются для операций с целыми числами и вычисления адресов. Соответственно в регистр размером в 32 бита целиком помещается од-
но значение типа int. Для хранения переменной типа long необходимо использовать сразу два регистра. К каждому регистру можно обратиться по его порядковому названию и по его общему названию.
Имеются следующие регистры:
$zero ($0) – регистр, всегда содержащий значение 0 и доступный только для чтения;
7
$at ($1) – временный регистр процессора;
$v0-$v1 ($2-$3) – для результатов, возвращаемых функциями;
$a0-$a3 ($4-$7) – для аргументов функций;
$t0-$t9 ($8-$15, $24-$25) – для временных данных,
можно использовать как угодно;
$s0-$s8 ($16-$23, $30) – для постоянных дан-
ных, можно использовать как угодно;
$k0-$k1 ($26-$27) – зарезервировано для ядра операционной системы;
$gp ($28) – указатель для глобальных переменных, практически не используется;
$sp ($29) – указатель стека, его значение всегда равно верхнему адресу стека;
$ra ($31) –адрес инструкции, из которой была вызвана
функция;
$f0 – для результатов, возвращаемых функциями, с плавающей запятой;
$f4, $f6, $f8, $f10, $f16, $f18 – для временных данных
сплавающей запятой;
$f12, $f14 – для параметров функций с плавающей за-
пятой;
hi,lo — используется при умножении и делении.
pc — программный счетчик.
Чтобы команды могли быстро выполняться, они должны быстро получать доступ к операндам. Но чтение операндов из памяти занимает много времени, поэтому большинство архитектур предоставляют небольшое количество регистров для хранения наиболее часто используемых операндов. Архитектура MIPS использует 32 регистра, которые называют набором регистров или регистровым файлом. Чем меньше количество регистров, тем быстрее к ним доступ.
Найти необходимую информацию получится гораздо быстрее в небольшом количестве тематически подобранных
8
книг, лежащих на столе, а не в многочисленных книгах, находящихся на полках в библиотеке. То же самое и с чтением данных из регистров и памяти.
Прочитать данные из небольшого набора регистров (например, из 32 регистров) можно гораздо быстрее, чем из 1000 регистров или из большой памяти. Небольшие регистровые файлы обычно состоят из маленького массива памяти SRAM. Такой массив использует небольшой дешифратор адреса, подключенный битовыми линиями к относительно малому количеству ячеек памяти, благодаря чему цепи с наибольшей задержкой получаются короче, чем при доступе к большой памяти.
В примере показана инструкция add с регистровыми операндами. Имена регистров MIPS начинаются со знака $.
Переменные a, b и c произвольно размещены в регистрах $s0, $s1 и $s2. Имя $s1 произносят как «регистр s1» или «доллар s1». Инструкция складывает 32-битные значения, хранящиеся в $s1 (b) и $s2 (c) и записывает 32-битный результат в $s0 (a).
a = b + c
# $s0 = a, $s1 = b, $s2 = c
add $s0, $s1, $s2 # a = b + c
MIPS обычно хранит переменные в 18 из 32 регистров: $s0–$s7 и $t0–$t9. Регистры, имена которых начинаются на $s, называют сохраняемыми (англ.: saved) регистрами. В соответствии с соглашением об использовании регистров MIPS эти регистры используются для размещения в них переменных таких,
как a, b и c.
Сохраняемые регистры имеют особое значение в контексте вызова процедур. Регистры, имена которых начинаются с $t, называют временными (англ.: temporary) регистрами. Они используются для хранения временных переменных.Следующий пример кода показывает написанный на ассемблере MIPS код, использующий временныйрегистр $t0 для вычисленного промежуточного значения c – d.
9
Код на языке высокого уровня |
|
|
a = b + c − d; |
|
|
Коднаязыкеассемблера MIPS |
|
|
# $s0 = a, $s1 = b, $s2 = c, $s3 |
= d |
|
sub $t0, $s2, $s3 |
# t = c − d |
|
add $s0, $s1, $t0 |
# a = b + t |
|
1.1.2. Модуль умножения/деления (MDU )
ВM4K Core включёнблок умножения/деления (MDU), который предполагает наличие отдельного конвейера для операций умножения и деления. Этот конвейер работает параллельно с блоком целочисленной арифметики.
MDUвыполняет операции умножения за 17 тактов, операции умножения с накоплением за 18 тактов, операции деления за 33 такта и операции деления с накоплением за 34 такта. Попытка активизировать следующую команду умножения/деления до завершения выполнения предыдущей, так же как и использование результата этой операции до того, как она закончена, вызывает остановку конвейера. В MDU имеется вывод, определяющий формат операции – знаковый или беззнаковый.
1.1.3. Системный сопроцессор
Сопроцессор отвечает за преобразование виртуального адреса в физический, протоколы кэш, систему управления исключениями, выбор режима функционирования (Kernel/User) и за разрешение/запрещение прерываний.
Системный Управляющий Сопроцессор (CP0) обеспечивает регистровый интерфейс с процессорным ядром MIPS32 и поддерживает управление памятью, преобразование адреса, обработку исключений и другие привилегированные операции. Каждому регистру CP0 соответствует определяющий его уни-
10