что такое архитектура mips
Сегодня MIPS стал Open Source, против RISC-V и ARM. Как Россия повлияла на стратегию американской процессорной компании
То, о чем говорили сторонники Open Source с 1980-х — свершилось! Сегодня архитектура процессоров MIPS стала Open Source. Учитывая, что такие компании как Broadcom, Cavium, китайский ICT и Ingenic платили MIPS за архитектурную лицензию (право сделать совместимую по системе команд микроархитектурную реализацию) миллионы долларов (иногда более десяти миллионов), это историческая веха. Теперь у RISC-V нет преимущества в этом аспекте, да и ARM придется оправдываться. У MIPS до сих пор есть технические преимущества перед RISC-V — лучшая плотность кода у nanoMIPS, лучшая поддержка аппаратной многопоточности, лучшие бенчмарки на high-end ядрах, более полная экосистема. И 8 миллиардов выпущенных чипов на основе MIPS.
Вот команда разработчиков 64-битного процессорного ядра MIPS I6400 «Samurai» и MIPS I6500 «Daimyo» в Сан-Франциско. Это ядро лицензировала в частности японская компания автомобильной электроники DENSO, поставщик Тойоты:
А вот представители российской компании ЭЛВИС-НеоТек вместе с русскими, украинскими и казахстанским разработчиком ядер MIPS и софтвера для него. ЭЛВИС-НеоТек является как лицензиатом ядер MIPS, так и разработчиком собственного по микроархитектуре ядра, совместимого с архитектурой MIPS. А также аппаратных блоков видео-обработки и алгоритмов распознавания:
Российское MIPS-коммьюнити оказано непосредственное влияние на этот шаг:
Сегодня я разговаривал с президентом MIPS Артом Свифтом. До нынешнего поста Арт был вице-председателем комитета по маркетингу RISC-V, вице-президентом Sun, DEC и Cirrus Logic. Я спросил у Арта, чем же отличается Open MIPS от не ставшего популярным Open SPARC.
Арт ответил, что Sun Microsystems была открытой только на словах и не очень любила строить коммьюнити. А вот мы в Open MIPS будем заниматься именно построением коммьюнити. Причем методы построения всемирного коммьюнити будут основаны на опыте строительства MIPS-коммьюнити в России (!), а точнее на работе с российскими компаниями (ЭЛВИС-НеоТек, Байкал Электроникс, НИИСИ, НИИМА Прогресс) и университетами, которые проводили семинары по MIPSfpga (МИЭТ, МФТИ, ИТМО, МИФИ, МГУ, СГАУ, НГТУ, ТГУ, КПИ и другие).
Немного истории. Истоки MIPS — в Стенфорде начала 1980-х годов. В 1984 году была основана компания MIPS Computer Systems, которая потом неоднократно меняла владельцев (Silicon Graphics, MIPS Technologies, Imagination Technologies, Wave Computing). В том же 1984 году возникла и компания ARM. Вот основатель MIPS Джон Хеннесси с первым чипом:
Впоследствие MIPS использовался в ранних игровых приставках Nintendo64 и Sony Playstation. Вот девушка Ирина в музее компьютеров рядом с рабочими станциями Silicon Graphics, которые использовались для съемок первых реалистично-графических голливудских фильмов, включая «Парк Юрского Периода». Эти же компьютеры упомянуты в романе русского писателя Виктора Пелевина «Поколение П». Внутри — процессор MIPS R4000:
А вот — встреча в прошлом году в Москве участников семинаров по MIPSfpga, образовательной программы, в которой университетские исследователи могут модицифировать реальный промышленный процессор MIPS interAptiv UP, синтезировать его для ПЛИС и посмотреть, как он работает, в том числе в потактовом режиме. В центре — Роберт Оуэн, менеджер образовательных программ Imagination Technologies, слева от него — Станислав Жельнио, автор российского учебного ядра schoolMIPS (его можно найти на GitHub):
В вот российский компьютер на основе процессора КОМДИВ-64, с вариантом архитектуры MIPS + спроектированной в России микроархитектурой + разработанными в России векторными расширениями архитектуры:
А вот Максим Горбунов, менеджер из НИИСИ, где был спроектирован КОМДИВ-64. Максим — второй слева, между специалистом по образовательным программам из российского Самсунга Татьяной Волковой и специалистом по образованию школьников из МФТИ Андреем Огневым:
Вот в офисе лицензиата MIPS Байкал Электроникс. Процессор Байкал-Т1 на основе MIPS P5600 «Apache» используется сейчас в российских контроллерах станков и сетевых устройствах:
А вот в Киевском Политехническом Институте на хакатоне MIPSfpga. Победители этого хакатона впоследствие получили бронзу на европейском финале конкурса Innovate FPGA, организованного Интелом:
Этот хакатон также вошел в презентации и статьи про практику MIPSfpga в университетах:
MIPS вдохновил создателей специализированных вычислительных устройств, например David Wentzlaff, который читает курс по продвинутой процессорной архитектуре в Принстоне и на Курсере:
Устройство, которое разработано Девидом, предстваляло из себя сетку (mesh) из 64 процессоров. Интересно, что сейчас Wave Computing, компания, частью которой является MIPS, тоже работает над сеткой, но из десятков тысяч процессорных элементов. Эта архитектура предназначена для ускорителя нейросетей, чипа на 7 нанометров, который Wave Computing разрабатывает совместно с Broadcom. Вот в офисе Wave Computing в Campbell, California. Слева специалист по функциональной верификации и UVM Jon Wang, а справа старший директором по Custom Design Steve Dilbeck. Стив — большой авторитет в asynchronous design, dynamic logic и разных эффектах на уровне транзисторов, когда размеры опускаются до 7 нанометров, а частоты поднимаются выше 6 гигагерц:
Вот слайд из презентации по нейроускорителю:
Системные вызовы MIPS
Этим летом appplemac опубликовал статью, посвященную изучению ассемблера MIPS. В ней, в частности, была рассмотрена команда syscall, генерирующая системный вызов. Автор сосредоточился на объяснении ассемблера MIPS, и на мой взгляд, недостаточно подробно рассказал, что же это такое — системный вызов. Я в тот момент занимался переносом проекта под архитектуру MIPS, разбирался с прерываниями, исключениями и системными вызовами.
Сейчас, когда код уже написан и отлажен, я решил написать статью, которая бы более подробно раскрывала, как работает механизм системных вызовов в MIPS. Можно рассматривать ее как дополнение к той статье об ассемблере.
Введение
Систе́мный вы́зов (англ. system call) в программировании и вычислительной технике — обращение прикладной программы к ядру операционной системы для выполнения какой-либо операции.
С точки зрения программиста системный вызов обычно выглядит как вызов подпрограммы или функции из системной библиотеки. Однако системный вызов как частный случай вызова такой функции или подпрограммы следует отличать от более общего обращения к системной библиотеке, поскольку последнее может и не требовать выполнения привилегированных операций.
Другими словами, системный вызов — это вызов функции с заранее известным адресом и одновременным переводом процессора с привилегированный режим (режим ядра). Перевод в режим ядра позволяет выполнять привилегированные команды, например, управление таблицами виртуальной памяти, запрещение/разрешение прерываний, а также обращаться к данным, хранящимся в ядре.
А заранее известный адрес означает, что все функции обработки можно представить массивом указателей, а данному обработчику будет соответствовать индекс в этом массиве. Отличие системного вызова от вызова функции заключается в том, что управление на базовый адрес + смещение передается аппаратно, самим процессором.
То есть процессор, встретив инструкцию, генерирующую системный вызов, прерывает последовательное исполнение команд пользовательской программы и передает управление на нужный адрес с сохранением необходимой информации для возврата в основную программу. Это очень напоминает поведение процессора при возникновении исключения или внешнего прерывания, поэтому обычно эти подсистемы реализуются похожим образом и рассматриваются совместно.
Архитектура MIPS
Перейдем к конкретной реализации данных подсистем в архитектуре MIPS.
Задаются эти режимы в специальных регистрах процессора MIPS. Специальные регистры, в отличие от регистров общего назначения, используются программой для управления самим процессором.
В MIPS такие регистры вынесены в сопроцесор 0. И обращение к ним ведется специальными ассемблерными командами: mfc0 — для чтения регистров, и mtc0 — для записи в регистр.
Регистры адресуются индексом и селектором сопроцессора. Вот несколько важных для обработки системных вызовов регистров:
Название | Индекс | Селектор | Описание |
---|---|---|---|
CP0_STATUS | 12 | 0 | управляющие флаги для процессора |
CP0_CAUSE | 13 | 0 | информация о причине возникновения прерывания |
CP0_EPC | 14 | 0 | адрес команды, которая исполнялась в момент прерывания |
CP0_EBASE | 15 | 1 | базовый адрес процедуры обработки исключения |
Возвращаясь к заданию режимов обработки исключений, они задаются в двух регистрах: CP0_STATUS и СP0_CAUSE, имеющих следующий формат.
СP0_STATUS
31-28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18-16 | 15-8 | 7 | 6 | 5 | 4-3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CU3..CU0 | RP | FR | RE | MX | PX | BEV | TS | SR | NMI | Impl | IM7..IM0 | KX | SX | UX | KSU | ERL | EXL | IE |
CP0_CAUSE
31 | 30 | 29-28 | 27 | 26 | 25-24 | 23 | 22 | 21-16 | 15-10 | 9-8 | 7 | 6-2 | 1-0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BD | TI | CE | DC | PCI | 0 | IV | WP | 0 | IP | IP | 0 | exCode | 0 |
Инициализация процессора
Я буду рассматривать только первый режим работы, как самый простой и совместимый со всеми MIPS процессорами. Все остальные режимы делаются похожим образом.
Для перевода процессора в этот режим нужно сбросить бит BEV в регистре статуса и бит IV в регистре причины.
Си-шный код из проекта
После очистки этих бит при возникновении прерывания, исключения или системного вызова процессор прерывает последовательное выполнение инструкций и передает управление по адресу 0x80000180, где находится код первичной обработки, скопированный нами по данному адресу. Одновременно с этим процессор переходит в привилегированный режим, сохраняет адрес возврата в регистре CP0_EPC, и записывает причину (тип) исключения в регистр CP0_CAUSE (в поле exception code).
Про поле exception code стоит рассказать немного подробнее. Как было сказано выше, в MIPS, как, впрочем, и в других архитектурах, прерывания, системные вызовы и аппаратные исключения обычно реализуются похожим образом, в одной подсистеме. То есть первое, что должен сделать код обработчика, это сохранить информацию о том, что же произошло. Именно эта информация и заносится в поле exception code. В MIPS это поле может принимать следующие значения:
Код | Обозначение | Описание |
---|---|---|
0 | INT | Внешнее прерывание |
1-3 | Работа с виртульной памятью | |
4 | ADDRL | Чтение с невыравненного адреса |
5 | ADDRS | Запись по невыравненному адресу |
6 | IBUS | Ошибка при чтении инструкций |
7 | DBUS | Ошибка на шине данных |
8 | SYSCALL | Системный вызов |
9 | BKPT | Брейкпоинт |
10 | RI | Зарезервированная инструкция |
11 | Ошибка сопроцессора | |
12 | OVF | Арифметическое переполнение |
13 и выше | Операции с плавающей точкой |
Обработка системных вызовов
Обработчик первого уровня
Первичный обработчик написан на ассемблере.
Еще одна особенность, о которой стоит здесь упомянуть, это регистр k1.
В MIPS архитектуре существуют 32 регистра общего назначения r0 — r31. И по соглашению некоторые регистры используются специальным образом, например, регистр r31 используется как указатель на стек, и к нему можно обратиться по специальному имени sp. То же самое и с регистрами k0 (r26) и k1 (r27), компилятор их не использует, они зарезервированы для использования в ядре ОС, и обработка прерываний — это как раз такой случай специального использования.
Обработчик второго уровня
Перейдем к обработчику второго уровня. Его основное назначение — это подготовка к вызову Си-шной функции, то есть прежде всего это сохранение остальных регистров, которые могут быть использованы в этой самой функции. Он также написан на ассемблере.
SAVE_ALL это ассемблерный макрос. Выглядит он следующим образом.
Не буду приводить исходный текст всех вложенных макросов. Скажу лишь, что в первой строчке резервируется стек фрейм для прерывания, куда последовательно сохраняются все необходимые регистры.
SAVE_AT — регистр at (r1) зарезервирован для использования ассемблере и работа с ним должна отделяться директивами «.set noat» и «.set at» (чтобы не было предупреждений компилятора)
SAVE_TEMP — сохраняет временные регистры (r8-r15) и (r24-r25)
SAVE_STATIC — регистры s0-s7
SAVE_SOME — необходимые служебные регистры, например, указатель на стек и специальные регистры сопроцессора (например, регистр статуса), поэтому данный макрос должен стоять первым.
Затем происходит выбор правильного обработчика третьего уровня. Указатели на обработчики третьего уровня в нашем проекте хранятся в обычном массиве, тип исключения задает смещение. Именно смещение, а не индекс, поскольку создатели MIPS помещают в регистр CAUSE номер исключения со сдвигом на два бита влево, поэтому мы можем напрямую вызвать функцию из массива указателей, не проводя дополнительную арифметику.
Затем, перед вызовом функции мы хотим записать адрес возврата (ra). Ну и наконец, мы передаем в функцию обработчика информацию о состоянии, в котором мы вошли в прерывание, для этого мы передаем указатель на стек, а в сигнатуре Си-шной функции мы укажем описание (структуру) данного фрейма.
Вот описание этой структуры
Обработчик третьего уровня (С-код)
Код си-шного обработчика следующий
Получение системного вызова
Теперь нужно рассказать о том, как же сделать системный вызов.
Системный вызов генерируется специальной ассемблерной командой: например, в x86 это int, в SPARC — ta, а в MIPS — syscall.
Как наверное стало понятно из предыдущего раздела, на момент системного вызова в регистре v0 должен храниться номер вызова, а в регистрах a0, a1, a2, a3 передаваемые параметры. Вот, например, код функции, которая положит один аргумент в регистр a0 и сделает системный вызов 0x11. Я предполагаю, что читатель знаком с gcc inline ассемблером
Конечно, функции для каждого типа писать не удобно, поэтому применяют макросы. Ниже приведен код макроса, который объявляет функцию системного вызова с одним параметром.
Код для системных вызовов с другим количеством параметров аналогичен приведенному.
Собираем все вместе. У нас в проекте используется несколько тестов, среди которых тот, что расположен ниже.
Макрос SYSCALL раскрывается в приведенный выше код с inline ассемблером, в качестве номера у него подставляется 1 (первый аргумент макроса) в качестве имени вызова syscall_1 (третий параметр), тип возврата int (второй параметр макроса) и тип переменной тоже int (четвертый параметр макроса).
В самом тесте проверяется, что результат вызова syscall_1(1), будет равен единице.
Ссылки по теме
Заключение
В завершение, тем, кому интересно более детально разобраться в данной теме, рекомендую взять код проекта и поиграться на qemu (на вики-страницах описано, как запустить). Понять, как все устроено гораздо проще, если походить по точкам останова со всеми удобствами Eclipse.
Спасибо всем, кто дочитал до конца! Буду рад услышать замечания, рекомендации и пожелания.
MIPS (архитектура)
Из Википедии — свободной энциклопедии
MIPS (сокращение от названия соответствующего проекта Стэнфордского университета англ. Microprocessor without Interlocked Pipeline Stages [1] ) — система команд и микропроцессорных архитектур, разработанных компанией MIPS Computer Systems (в настоящее время Wave Computing [2] ) в соответствии с концепцией проектирования процессоров RISC (то есть для процессоров с упрощенным набором команд). Ранние модели процессора имели 32-битную структуру, позднее появились его 64-битные версии. Существует множество модификаций процессора, включая MIPS I, MIPS II, MIPS III, MIPS IV, MIPS V, MIPS32 и MIPS64, из них действующими являются MIPS32 (для 32-битной реализации) и MIPS64 (для 64-битной реализации). MIPS32 и MIPS64 определяют как набор регистров управления, так и набор команд.
Существует несколько наборов команд: MIPS32, MIPS64, microMIPS и nanoMIPS. Помимо этого, доступны дополненные наборы инструкций и модели процессоров, например, MIPS-3D, включающий в себя набор SIMD-команд для обработки чисел с плавающей запятой, предназначенный для решения простых 3D-задач, MDMX (MaDMaX) — с ещё более широкими возможностями — набором SIMD-команд и использующий 64-битные регистры с плавающей запятой для работы с целыми числами, MIPS16e, который сжимает поток команд, чтобы уменьшить объём памяти, занимаемый программами, а также MIPS MT, обеспечивающий многопотоковый режим обработки.
Архитектуру MIPS часто изучают в программе курса «Компьютерная архитектура» в университетах и технических лицеях. Эти процессоры значительно повлияли на более поздние RISC-архитектуры, в частности на Alpha.
В настоящее время различные реализации MIPS используются в основном во встроенных системах, например, в смартфонах, маршрутизаторах, шлюзах, а также до 2010-х в игровых консолях, таких, как Sony PlayStation 2 и Sony PlayStation Portable. До конца 2006 года они применялись и в компьютерах SGI. К концу 1980-х и 1990-х эта архитектура широко использовалась многими компаниями, среди них Digital Equipment Corporation, NEC, Pyramid Technology, Siemens Nixdorf и Tandem Computers. С середины до конца 1990-х годов каждым третьим микропроцессором на рынке был процессор под управлением MIPS.
Архитектура процессоров. MIPS, Sparc, ARM и PowerPC
Архитектура PowerPC лежит в основе процессоров Playstation 3 и xBox 360. Ни MIPS, ни ARM на эту роль не годятся, процессоры Intel тоже, а об AMD и говорить не приходится.
Продолжение статьи об истории развития архитектур процессоров. Чтение лучше начать с первой части.
MIPS-архитектура: «Pentium 4» восьмидесятых годов
Регистровые окна SPARC
Условные инструкции ARM
Архитектура ARM (Advanced RISC Machines) разработана в 1983-85 годах в компании Acorn Computers. Команда Роджера Вильсона и Стива Фербера взяла за основу набора инструкций ARM некогда популярный, а ныне забытый процессор MOS Technology 6502 и снабдила его специальным четырехбитным кодом условия, которым можно было дополнить любую инструкцию.
Если (условие) то Выполнить1 иначе Выполнить 2
вместо того, чтобы записать традиционную конструкцию
2. Если условие выполнено, то идти к 5
используя условные инструкции, можно записать
1. Вычислить условие и поставить Флаг1 по результатам вычисления
2. Выполнить1 при условии выставленного Флаг1
3. Выполнить2 при условии невыставленного Флаг1
Еще ряд дополнений в ARM предусматривал введение инструкций, одновременно выполняющих несколько простых операций, тем самым избавляя регистры процессора от необходимости сохранять результаты промежуточных вычислений и увеличивая вычислительную плотность кода. Этот подход нетипичен для RISC-процессоров, поскольку плохо вписывается в «основную идею» их максимального упрощения, но в конечном счете он привел к тому, что процессоры Acorn при прочих равных получили большую производительность на единицу частоты. Конечно, ARM-подход тоже имеет недостатки (например, необходимость выполнять пустые инструкции), однако в общем и целом он позволяет создавать очень простые процессоры с очень хорошей производительностью.
Архитектура PowerPC
MIPS (архитектура)
MIPS (англ. Microprocessor without Interlocked Pipeline Stages ) — микропроцессор, разработанный компанией MIPS Computer Systems (в настоящее время MIPS Technologies) в соответствии с концепцией проектирования процессоров RISC (то есть для процессоров с сокращенным набором команд). Ранние модели процессора имели 32-битную структуру, позднее появились его 64-битные версии. Существует множество модификаций процессора, включая MIPS I, MIPS II, MIPS III, MIPS IV, MIPS V, MIPS32 и MIPS64, из них действующими являются MIPS32 (для 32-битной реализации) и MIPS64 (для 64-битной реализации). MIPS32 и MIPS64 определяют как набор регистров управления, так и набор команд.
Помимо этого, доступны дополненные модели, например, MIPS-3D, включающий в себя набор SIMD команд для обработки чисел с плавающей точкой, предназначенный для решения простых 3D задач, MDMX (MaDMaX) — с ещё более широкими возможностями — набором SIMD команд и использующий 64-битные регистры с плавающей точкой для работы с целыми числами, MIPS16e, который сжимает поток команд, чтобы уменьшить объём памяти, занимаемый программами, а также MIPS MT, обеспечивающий многопотоковый режим обработки.
Архитектуру MIPS часто изучают в программе курса Компьютерная Архитектура в университетах и технических лицеях. Эти процессоры значительно повлияли на более поздние RISC-архитектуры, в частности на Alpha.
В настоящее время различные реализации MIPS используются в основном во встроенных системах, например, в смартфонах, маршрутизаторах, шлюзах, а также в игровых консолях, таких как Sony PlayStation 2 и Sony PlayStation Portable. До конца 2006 года они применялись и в компьютерах SGI. К концу 1980х и 1990х эта архитектура широко использовалась многими компаниями, среди них Digital Equipment Corporation, NEC, Pyramid Technology, Siemens Nixdorf и Tandem Computers. С середины до конца 1990х годов каждым третьим микропроцессором на рынке производства был процессор под управлением MIPS.
Содержание
История
Основоположник RISC
В 1981 году коллектив под руководством Джона Хеннеси (John L. Hennessy) из Университета Стэнфорда начал работу над проектом, который получил название MIPS. Главной идеей было увеличить производительность процессора, используя удлиненный конвейер. Концепция применения конвейера в качестве основной технологии была известна ещё задолго до этого (например, в IBM 801), но она не использовала весь свой потенциал. Центральный процессор включает в себя несколько специальных субблоков, таких как декодеры команд, целочисленное АЛУ (арифметико-логическое устройство), блоки загрузки/хранения (работа с памятью) и т. д. В традиционной не оптимизированной реализации отдельная команда в программе должна быть (почти всегда) завершена, прежде, чем запустится другая; в то время как в конвейерной архитектуре последовательные команды могут выполняться параллельно. Например, когда математическая инструкция вносится в блок с плавающей точкой, блок загрузки/хранения памяти может в этот же момент вызвать следующую команду.
Одним из главных препятствий в использовании конвейера был тот факт, что некоторые команды, такие как деление, выполняются намного дольше, и, вследствие этого, центральному процессору приходится ждать, прежде, чем передать на конвейер следующую команду. Единственное решение этой проблемы — использовать серию блокировок, позволяющих определенным стадиям конвейера индицировать, что они заняты и, в этом случае, приостанавливать вышестоящие в потоке команды. Группа Хеннеси рассматривала эти блокировки как огромный барьер в увеличении производительности, поскольку было необходимо обращаться ко всем модулям Центрального процессора, что занимает лишнее время и ограничивает тактовую частоту. Главным аспектом устройства MIPS было согласовать каждую подфазу каждой команды, в том числе кэширование, в один цикл, таким образом избегая необходимости в блокировках и пропуская на конвейер только один цикл.
Хотя такая реализация и исключала бы некоторые очень полезные операции, такие как умножение и деление, очевидно, что предельная производительность системы значительно увеличилась бы, так как микросхемы смогли бы работать с более высокой тактовой частотой. Достижение высокой скорости с использованием блокировок было бы сложным, так как время, необходимое для установки блокировок, пропорционально тактовой частоте (зависящей, в свою очередь, от размера кристалла). Вот почему исключение вышеупомянутых операций стало спорным вопросом.
Другое отличие дизайна MIPS от конкурирующих с ним Berkеley-архитектур — это внедренная в Berkеley-RISC возможность обработки вызова подпрограмм. Чтобы увеличить производительность столь общей задачи, в Berkеley-RISC была использована технология, называемая регистровым окном, которая, тем не менее ограничивала максимальную глубину многоуровневых вызовов. Каждый вызов подпрограммы требовал свой набор регистров, что приводило к необходимости увеличению их количества. А аппаратная реализация данного механизма занимала дополнительное пространство в кристалле ЦП. Но Хеннесси полагал, что более «тщательный» компилятор мог бы найти свободные регистры для передачи параметров функции, и что всего лишь увеличение числа регистров могло бы не только упростить эту задачу, но и увеличить производительность всех операций. Поэтому было принято решение отказаться от данной технологии в MIPS.
Архитектура MIPS была, в некотором отношении, наиболее типичной для RISC. Чтобы сэкономить биты в коде команды, в RISC было уменьшено количество инструкций для кодирования. В MIPS из 32 битов слова всего 6 используются для основного кода, а остальные могут содержать либо единственный 26-битный адрес перехода, либо до 5 полей, устанавливающих от 1 до 3 регистров + длина сдвига регистра. Существует и ряд других форматов, например, когда 2 регистра задаются непосредственно выделенным 16-битным полем и т. д. Такое распределение позволило процессору загружать команду и необходимые ей данные в одном цикле, в то время как в более старых архитектурах (не являвшихся RISC), например, таких как MOS Technology 6502, требовались отдельные циклы для загрузки основного кода и данных.
Это было одним из главных усовершенствований производительности, которые предлагали RISC. Однако, стоит сказать, что архитектуры, не являющееся RISC все же достигли подобной скорости, но другими средствами (такими, как очереди в ЦП).
Первая аппаратная реализация
В 1984 году, убежденный в коммерческом успехе своей разработки, Хеннесси покинул Стэнфорд, чтобы основать компанию MIPS Computer Systems. В 1985 году была реализована первая версия микропроцессора MIPS — R2000, доработанная в 1988 году и получившая название R3000. Эти 32-битные процессоры легли в основу компании в 1980х и использовались преимущественно в SG-сериях рабочих станций. Новые коммерческие проекты не соответствовали Стэнфордским научным исследованиям, так как практически все блокировки выполнялись на аппаратном уровне, к тому же операции умножения и деления были полностью реализованы.
В 1991 году MIPS впервые был представлен как 64-битный микропроцессор, в версии R4000. R4000 имеет расширенный TLB, в котором запись содержит не только виртуальный адрес, но и виртуальный идентификатор адресного пространства. Такой буфер устраняет основные проблемы производительности микроядра, достаточно медленного в архитектурах конкурирующих компаний (Pentium, PowerPC, Alpha) из-за необходимости сбрасывать TLB во время частого переключения контекста.
Тем не менее, у MIPS возникали финансовые трудности в связи с поставкой процессоров на рынок. Проект был настолько важен для SGI (в то время являвшихся одними из немногих основных покупателей MIPS), что в 1992 году SGI выкупили права на компанию с условием гарантии, что конструкция микропроцессоров не изменится. Став дочерней компанией, MIPS Computer Systems получили название MIPS Technologies.
Лицензируемая архитектура
В 1999 году MIPS формализовали свои системы лицензирования вокруг двух основных конструкций — 32-разрядной MIPS32 (на базе MIPS II с некоторыми дополнительными функциями MIPS III, IV MIPS и MIPS V) и 64-разрядных MIPS64 (на базе MIPS V). Лицензия на MIPS64 была приобретена каждой из компаний NEC, Toshiba и SiByte (впоследствии приобретенная Broadcom) сразу же после объявления о её выпуске. Вскоре, к ним присоединились Philips, LSI Logic и IDT. Успех следовал за успехом, и сегодня процессоры MIPS являются одним из наиболее востребованных товаров на рынке устройств компьютерного типа (карманных компьютеров, приставок и т. п.), наряду с другими разработчиками, тщетно пытающимися их вытеснить.
Через несколько лет после того, как MIPS-архитектура стала лицензируемой, она начала привлекать все больше и больше новых компаний по разработке процессоров. Первой такой компанией была Quantum Effect Devices (см. следующий раздел). Команда разработчиков, собравших MIPS R4300i основала компанию SandCraft, предоставившую компании NEC новый процессор R5432, а немного позднее смоделировавшую R71000 — один из первых нестандартных процессоров для рынка встраиваемых систем. Команда основателей компании DEC StrongARM в конце концов разделилась на две новых компании по разработке процессоров, в основу которых лег MIPS: SiByte, производившая SB-1250 — одну из первых чиповых систем с высокой производительностью, основанных на MIPS (SOC) и Alchemy Semiconductor (позднее приобретенная AMD), производившая Au-1000 SOC для маломощных приложений. Компания Lexra использовала архитектуру, подобную MIPS, добавив к ней DSP для рынка аудио микросхем, а также поддержку многопотокового режима для сетевого рынка. Так как Lexra не покупала лицензию на MIPS, вскоре, между двумя компаниями разгорелись судебные процессы. Первый был довольно быстро погашен уже после того, как Lexra пообещала не продвигать свои процессоры, как сходные с MIPS. Второй процесс (о патенте MIPS 4814976 на обработку невыровненной инструкции (unaligned) доступа к памяти) был более затяжным и негативно отразился на бизнесе обеих компаний, а по его завершении MIPS Technologies выдали Lexra бесплатную лицензию и выплатили денежную компенсацию в крупном размере.
Следом за этими событиями на рынке появились две компании, специализирующиеся на создании многоядерных устройств, использующих архитектуру MIPS. Корпорация Raza Microelectronics выкупили производственную линию у менее успешных SandCraft, а затем начали выпускать восьмиядерные устройства для рынка телекоммуникаций и сетей. Cavium Networks, изначально являвшиеся поставщиком средств защиты процессоров, тоже начали производство восьми, а позже и 32-ядерных архитектур для тех же рынков. Обе компании сами проектировали ядра, и лишь лицензировали разработки, вместо того, чтобы покупать готовые процессоры MIPS.
Потеря рынка ПК
Среди производителей, создавших рабочие станции с использованием микропроцессоров MIPS такие компании, как SGI, MIPS Computer Systems, Inc., Whitechapel Workstations, Olivetti, Siemens-Nixdorf, Acer, Digital Equipment Corporation, NEC, и DeskStation. В числе операционных систем, портированных на архитектуру MIPS: IRIX компании SGI, Windows NT (до версии 4.0) компании Microsoft, Windows CE, Linux, BSD, UNIX System V, SINIX, QNX, и операционная система RISC непосредственно принадлежащая компании MIPS Computer Systems.
В начале 1990х существовало предположение, что MIPS вместе с другими мощными процессорами RISC вскоре обгонят архитектуру IA32 компании Intel. Этому способствовала поддержка двух первых версий Windows NT для Alpha, MIPS и PowerPC компании Microsoft, и, в несколько меньшей степени, — архитектуры Clipper и SPARC. Однако, как только Intel выпустил новейшие версии ЦП класса Pentium, Microsoft Windows NT v4.0 перестал поддерживать все, кроме Alpha и Intel. После решения SGI перейти на архитектуры Itanium и IA32, процессоры MIPS практически полностью перестали использоваться в персональных компьютерах.
Рынок встраиваемых систем
В 1990е годы, MIPS-архитектура была широко распространена на рынке встраиваемых систем: для сетей, телекоммуникаций, видео игр, игровых консолей, принтеров, цифровых приставок, цифровых телевизоров, xDSL и кабельных модемов, а также карманных компьютеров.
Низкое энергопотребление и температурные характеристики встраиваемых MIPS-архитектур, широкие возможности внутренних функций делают этот микропроцессор универсальным для многих устройств.
Синтезируемые ядра для рынка встраиваемых систем
В последние годы большинство технологий, используемых в различных поколениях MIPS, предложены в виде IP-ядер (стандартных блоков) для встраиваемых реализаций процессора. Более того, предложены оба типа ядер — основанные на 32 и 64 битах, известные как 4K и 6K. Такие ядра могут совмещаться с другими структурными элементами, такими как FPU, системами SIMD, различными устройствами ввода/вывода и т. д.
Некогда коммерчески успешные ядра MIPS, и в настоящее время нашли потребительское и промышленное применение. Эти ядра можно найти в новых маршрутизаторах Cisco, Linksys и MikroTik, кабельных и ADSL модемах, смарт-картах, механизмах лазерных принтеров, цифровых приставках, роботах, карманных компьютерах, Sony PlayStation 2 и Sony PlayStation Portable. Тем не менее, в приложениях мобильных телефонов и PDA MIPS не удалось сместить прочно установившуюся там конкурирующую ARM-архитектуру.
Процессоры под управлением MIPS включают в себя: IDT RC32438; ATI Xilleon; Alchemy Au1000, 1100, 1200; Broadcom Sentry5; RMI XLR7xx, Cavium Octeon CN30xx, CN31xx, CN36xx, CN38xx and CN5xxx; Infineon Technologies EasyPort, Amazon, Danube, ADM5120, WildPass, INCA-IP, INCA-IP2; Microchip Technology PIC32; NEC EMMA and EMMA2, NEC VR4181A, VR4121, VR4122, VR4181A, VR5432, VR5500; Oak Technologies Generation; PMC-Sierra RM11200; QuickLogic QuickMIPS ESP; Toshiba Donau, Toshiba TMPR492x, TX4925, TX9956, TX7901.
Суперкомпьютеры MIPS
Одним из наиболее интересных применений архитектуры MIPS является их использование в многопроцессорных вычислительных суперкомпьютерах. В начале 1990х компания Silicon Graphics (SGI) перенаправила свой бизнес с графических терминалов на рынок высокопроизводительного вычисления. Успех первых попыток компании в области серверных систем (а именно, серия Challenge, основанная на R4400, R8000 и R10000) мотивировал SGI создать гораздо более мощную систему. Использование R10000 позволило компании спроектировать систему Origin 2000, в конечном счете расширяемую до 1024 ЦП, используя собственную межсистемную связь cc-NUMA (NUMAlink). Позже Origin 2000 породила новую систему — Origin 3000, вышедшую с теми же максимальными 1024 ЦП, но использовавшую в разработке микросхемы R14000 и R16000 с частотой до 700 МГц. Однако, в 2005 году, когда SGI приняла стратегическое решение о переходе на архитектуру Intel IA-64, суперкомпьютеры, базированные на MIPS были сняты с производства.
В 2007 году корпорация SiCortex представила новый многопроцессорный персональный суперкомпьютер, основанный на архитектуре MIPS. В его разработку легли MIPS64 и высокопроизводительная межсистемная связь с использованием топологии графов Кауца (англ. Kautz graph ). Данная система является предельно эффективной и вычислительно мощной. Её уникальный аспект — многоядерный узел обработки, интегрирующий шесть ядер MIPS64, коммутатор контроллера памяти, межсистемную связь механизмов прямого доступа к памяти, локальную сеть с пропускной способностью 1 Гбит и PCI Express контроллеры. И все это на одном кристалле, который потребляет 10 Вт энергии, но выполняет максимум 6 миллиардов операций с плавающей точкой в секунду. Самая мощная конфигурация такого суперкомпьютера — версия SC5832, состоящая из 972 узлов (всего 5832 ядер MIPS64) и выполняющая 8,2 триллионов операций с плавающей точкой в секунду.
Loongson возвращает к персонализации
Компания Loongson, в надежде обойти патент MIPS, выпустила свою архитектуру, которая была полностью схожа с разработкой MIPS Technologies и поддерживалась ОС Linux. Так как производство процессоров Loongson было более дешёвым, MIPS получили возможность возродиться на рынке персональных компьютеров в лице Loongson. (В дальнейшем Loongson купили лицензию на MIPS — см. основную статью)
Процессоры под управлением MIPS также используются в нетбуках компаний iUnika, Bestlink, Lemote и Golden Delicious Computers.
MIPS IV
MIPS IV — это четвёртое поколение архитектуры, представляет собой расширенную версию MIPS III и совместим со всеми существующими моделями MIPS. Первый выпуск MIPSIV был представлен в 1994 году под названием R8000. MIPS IV включил в себя:
MIPS V
MIPS V — пятая версия архитектуры, была представлена 21 октября 1996 года на Форуме Микропроцессоров 1996. Эта модель была разработана для того, чтобы повысить производительность графических 3D-приложений. В середине 1990х большая часть не встроенных микропроцессоров MIPS приходилась на графические терминалы от SGI. Разработка MIPS V была дополнена целочисленными мультимедийными расширениями MDMX (MIPS Digital Media Extensions), которые были представлены в тот же день, что и MIPS V.
Реализации MIPS V так никогда и не были внедрены. В 1997 году SGI представила микропроцессоры под названиями «H1» («Beast») и «H2» («Capitan»), которые должны были быть произведены в 1999 году. Но вскоре их объединили, и в конечном итоге в 1998 году эти проекты были отменены.
В MIPS V был добавлен новый тип данных — PS (pair-single), который представляет собой два числа с плавающей точкой двойной точности (32-битные), хранящиеся в 64-битном регистре с плавающей точкой. Чтобы работать с этим типом данных в режиме SIMD, были добавлены различные варианты арифметических, сравнительных операций над числами с плавающей точкой, а также команда условного перехода. Появились новые инструкции для загрузки, реконфигурации и преобразования PS-данных. Это первая архитектура, сумевшая реализовать обработку чисел с плавающей точкой в SIMD-режиме с имеющимися ресурсами.
Семейство процессоров с архитектурой MIPS
Первым коммерческим микропроцессором с архитектурой MIPS был микропроцессор R2000, представленный в 1985 году. В нём были реализованы операции умножения и деления, которые выполнялись за несколько тактов. Устройство умножения и деления не было тесно интегрировано в ядро процессора, хотя и размещалось на том же кристалле; по этой причине система команд расширена инструкциями для загрузки результатов умножения и деления в регистры общего назначения, эти инструкции блокировали конвейер.
Микропроцессор R2000 мог быть загружен как в режиме big-endian, так и в режиме little-endian, содержал тридцать два 32-разрядных регистра общего назначения. Подобно процессорам AMD 29000 и Alpha микропроцессор R2000 не имел отдельного регистра флагов условий, так как разработчики посчитали его потенциальным «узким местом». Следует отметить, что счётчик команд непосредственно недоступен.
Микропроцессор R2000 поддерживал подключение до четырёх сопроцессоров, один из которых является встроенным и обеспечивает работу с исключениями, а также управление памятью (MMU). В случае необходимости в качестве ещё одного сопроцессора можно было подключить микросхему R2010, арифметический сопроцессор, который содержал тридцать два 32-разрядных регистра, которые можно было использовать как шестнадцать 64-разрядных регистров для работы с числами двойной точности. Следующим в семействе стал R3000, который появился в 1988 году. Он содержал кэш-память данных объёмом 64 КБ (R2000 — 32 КБ). Кроме того, R3000 обеспечивал когерентность кэш-памяти при работе в мультипроцессорных конфигурациях. Несмотря на то, что в поддержке мультипроцессорности R3000 имеется ряд недостатков, на базе R3000 было создано несколько работоспособных многопроцессорных систем. Как и для R2000, для R3000 был создан арифметический сопроцессор в виде отдельной СБИС: R3010. Микропроцессор R3000 стал первым коммерчески успешным процессором с архитектурой MIPS, было изготовлено более миллиона процессоров. Ускоренная версия R3000, работающая на тактовой частоте 40 МГц, названная R3000A, достигла производительности в 32 VUPs (VAX Unit of Performance). Дальнейшее развитие R3000A, микропроцессор R3051, работающий на частоте 33,8688 МГц был использован в игровой приставке Sony PlayStation. Другие производители также представили процессоры, совместимые с R3000A: в Performance Semiconductor был разработан R3400, в то время как компания IDT создала R3500, оба упомянутых процессора имели в интегрированный математический сопроцессор R3010. Первой системой на кристалле, использующей процессор с архитектурой MIPS, стала разработка R3900 фирмы Toshiba; данная микросхема использовалась в портативном компьютере, работавшем под управлением Windows CE. Был разработан радиационно-устойчивый вариант R3000 с интегрированным R3010, предназначенный для применения в космических аппаратах, который получил название Mongoose-V.
Серия R4000, выпущенная в 1991 году, расширила процессоры MIPS до 64 битов. (MIPS Technology была первой компанией выпустившей процессоры с 64-битовой архитектурой) R4000 состоит из 1,3 млн транзисторов, имеет встроенный кэш данных и кэш инструкций (оба по 8 Кб). В этом процессоре внешняя тактовая частота 50 МГц удваивается, а внутренняя тактовая частота составляет 100 МГц. Процессор R4400 выполнен на основе R4000, состоит из 2,2 млн транзисторов, имеет встроенный кэш данных и кэш инструкций (оба по 16 Кб), а внутренняя тактовая частота составляет 150 МГц. Набор команд этих процессоров (спецификация MIPS II) был расширен командами загрузки и записи 64-разрядных чисел с плавающей точкой, командами вычисления квадратного корня с одинарной и двойной точностью, командами условных прерываний, а также атомарными операциями, необходимыми для поддержки мультипроцессорных конфигураций. В процессорах R4000 и R4400 реализованы 64-битовые шины данных и 64-битовые регистры.
MIPS, теперь являющийся отделом SGI под названием MTI, разработал недорогие процессоры R4200, послужившие основой для будущих (ещё более дешёвых) R4300i. Производная этого процессора, NEC VR4300, использовалась в игровых консолях Nintendo 64.
Quantum Effect Devices (QED), самостоятельная компания, основанная разработчиками MIPS, разработала серию процессоров R4600 Orion, R4700 Orion, R4650 и R5000. Если в R4000 увеличили тактовую частоту, но пожертвовали количеством кэш-памяти, то QED уделили большое внимание и емкости кэш-памяти (доступ к которой можно получить всего за 2 цикла), и эффективному использованию поверхности кристалла. Процессоры R4600 и R4700 использовались в недорогих версиях рабочей станции SGI Indy, а также в первых маршрутизаторах Cisco (основанных на MIPS), например, серии 36х0 и 7х00. Микропроцессор R4650 применялся в телевизионных приставках WebTV (в настоящее время — Microsoft TV). В процессоре R5000 FPU диспетчеризация операций с плавающей точкой (одинарной точности) была более гибкой, чем в R4000, и, вследствие этого, рабочие станции SGI Indys, базированные на R5000 отличались лучшей графической производительностью, чем R4400 с такой же тактовой скоростью и графическим аппаратным устройством. Чтобы подчеркнуть улучшение после объединения R5000 и старой графической платы, SGI дала ей новое название. Немного позднее QED разработали семейство процессоров RM7000 и RM9000 для рынка сетей и лазерных принтеров. В Августе 2000 года компания QED была приобретена производителем полупроводников PMC-Sierra, и последняя продолжила инвестирование MIPS-архитектур. Процессор RM7000 включал в себя 256 Кб встроенной кэш-памяти 2го уровня и контроллер для дополнительной кэш-памяти 3го уровня. Были созданы процессоры RM9xx0 — семейство SOC-устройств, в которые включены такие периферийные составляющие (на северном мосту) как: контроллер памяти, PCI-контроллер, контроллер Ethernet, а также быстрые устройства ввода-вывода (например, высокопроизводительная шина типа HyperTransport).
R8000 (представлен в 1994 году) был первой суперскалярной архитектурой MIPS, способной осуществлять 2 целочисленные инструкции (или с плавающей точкой) и 2 инструкции обращения к памяти за один цикл. Данная разработка использовала 6 схем: устройство для целочисленных команд (16 Кб — команды и 16 Кб — кэш данных), для команд с плавающей точкой, три вторичных дескриптора кэш-памяти ОЗУ (два для вторичного доступа к кэш-памяти + один для отслеживания шины), а также кэш-контроллер ASIC. Архитектура имеет два полностью конвейеризованных устройства умножения-сложения (с двойной точностью), которые могут передавать поток данных в 4 Мб внекристального вторичного кэша. В середине 1990х процессоры R8000 запустили SGI серверы POWER Challenge, а позже стали доступны на рабочих станциях POWER Indigo2. Хотя производительность этого FPU и была наиболее подходящей для научных сотрудников, ограниченность его целочисленной производительности и высокая цена не смогли привлечь большинство пользователей, поэтому R8000 был на рынке всего год, и даже сейчас его едва ли можно найти.
В 1995 году был выпущен R10000. Этот процессор в однокристальном исполнении, работал с более высокой тактовой частотой, чем R8000, а также включал в себя объемную (32 КБ) первичную кэш-память данных и команд. Кроме того, он был суперскалярным, но это главное новшество было неисправно. Но даже с более простым FPU, значительно увеличенная производительность целочисленный вычислений, более низкая цена и высокая плотность записи сделали R10000 предпочтительным для большинства пользователей.
Все более поздние проекты были основаны на ядре R10000. В R12000 был использован 0.25 микронный технологический процесс с целью уменьшить чип и достигнуть большей тактовой скорости. Исправленный R14000 имел более высокую тактовую частоту в дополнение с поддержкой DDR SRAM для внекристальной кэш-памяти. Следом были выпущены R16000 и R16000A, тактовая частота которых была также увеличена; в них была встроена дополнительная кэш-память первого уровня, а их производство требовало более мелких кристаллов, чем прежде.
Среди других представителей семейства MIPS — R6000, ЭСЛ-реализация, выполненная компанией Bipolar Integrated Technology. R6000 относится к поколению процессоров MIPS II. Его TLB и устройство кэш-памяти значительно отличаются от остальных представителей данного семейства. R6000 не принес обещанной выгоды, и, хотя был признан в некоторой степени полезным для компьютеров Control Data, он мгновенно исчез с основного рынка.
Модель | Частота (МГц) | Год | Технология разработки (µm) | Транзисторы (млн.) | Размер кристалла (мм²) | Число выводов | Мощность (Вт) | Напряжение (В) | Кэш данных (KБ) | Кэш инструкций (KБ) | Кэш 2го уровня | Кэш 3го уровня |
---|---|---|---|---|---|---|---|---|---|---|---|---|
R2000 | 8—16.67 | 1985 | 2.0 | 0.11 | ? | ? | ? | ? | 32 | 64 | НЕТ | НЕТ |
R3000 | 12—40 | 1988 | 1.2 | 0.11 | 66.12 | 145 | 4 | ? | 64 | 64 | 0-256 Kб Внешняя | НЕТ |
R4000 | 100 | 1991 | 0.8 | 1.35 | 213 | 179 | 15 | 5 | 8 | 8 | 1 Mб Внешняя | НЕТ |
R4400 | 100—250 | 1992 | 0.6 | 2.3 | 186 | 179 | 15 | 5 | 16 | 16 | 1-4 Mб Внешняя | НЕТ |
R4600 | 100—133 | 1994 | 0.64 | 2.2 | 77 | 179 | 4.6 | 5 | 16 | 16 | 512 Kб Внешняя | НЕТ |
R4700 | 133 | 1996 | ? | ? | ? | 179 | ? | ? | 16 | 16 | Внешняя | НЕТ |
R5000 | 150—200 | 1996 | 0.35 | 3.7 | 84 | 223 | 10 | 3.3 | 32 | 32 | 1 Mб Внешняя | НЕТ |
R8000 | 75—90 | 1994 | 0.7 | 2.6 | 299 | 591+591 | 30 | 3.3 | 16 | 16 | 4 Mб Внешняя | НЕТ |
R10000 | 150—250 | 1996 | 0.35, 0.25 | 6.7 | 299 | 599 | 30 | 3.3 | 32 | 32 | 512 Kб—16 Mб Внешняя | НЕТ |
R12000 | 270—400 | 1998 | 0.25, 0.18 | 6.9 | 204 | 600 | 20 | 4 | 32 | 32 | 512 Kб—16 Mб Внешняя | НЕТ |
RM7000 | 250—600 | 1998 | 0.25, 0.18, 0.13 | 18 | 91 | 304 | 10, 6, 3 | 3.3, 2.5, 1.5 | 16 | 16 | 256 Kб Внутренняя | 1 Mб Внешняя |
R14000 | 500—600 | 2001 | 0.13 | 7.2 | 204 | 527 | 17 | ? | 32 | 32 | 512 Kб—16 Mб Внешняя | НЕТ |
R16000 | 700—1000 | 2002 | 0.11 | ? | ? | ? | 20 | ? | 64 | 64 | 512 Kб—16 Mб Внешняя | НЕТ |
R24K | 750+ | 2003 | 65 nm | ? | 0.83 | ? | ? | ? | 64 | 64 | 4-16 Mб Внешняя | НЕТ |
Формат инструкций MIPS I
Инструкции разделяются на три типа: R, I и J. Каждая инструкция начинается с 6-битного кода. В дополнение к коду, инструкции R-типа определяют три регистра, область размера сдвига регистра, и область функции; инструкции I-типа определяют два регистра и непосредственное значение; инструкции J-типа следуют коду операции с 26-битным шагом.
Далее приведена таблица применения трех форматов инструкции в архитектуре ядра:
Тип | −31- формат (в битах) −0- | |||||
---|---|---|---|---|---|---|
R | код (6) | rs (5) | rt (5) | rd (5) | shamt (5) | функция (6) |
I | код (6) | rs (5) | rt (5) | immediate (16) | ||
J | код (6) | адрес (26) |
Язык ассемблера MIPS
Данные инструкции языка ассемблера имеют прямую аппаратную реализацию, в отличие от псевдоинструкций, которые перед сборкой транслируются в настоящие составные инструкции.
Целочисленные операции
Примечание: в коде языка ассемблера MIPS, смещение для ветвящихся инструкций может быть представлено маркировками в другом месте кода.
Операции над числами с плавающей точкой
MIPS имеет 32 регистра с плавающей точкой. Регистры соединены по 2 для двойной точности вычислений. Регистры с нечетными номерами не могут быть использованы для арифметических операций или ветвления, они могут лишь частично указывать двойную точность в паре регистров.
Эти инструкции принимаются языком ассемблера MIPS, однако они не являются реальными. Ассемблер переводит их в последовательности настоящих инструкций.
Несколько других важных инструкций
Использование регистра транслирования
Аппаратная архитектура определяет следующие критерии:
Это единственные ограничения, которые аппаратная архитектура накладывает на использование регистров общего назначения.
Различные устройства MIPS реализовывают специальные соглашения о вызовах, которые ограничивают использование регистров. Соглашения о вызовах полностью поддерживаются комплексом ПО, но не требуются аппаратным обеспечением.
Название | Номер | Применение | нужно ли резервировать? |
---|---|---|---|
$zero | $0 | всегда хранит 0 | N/A |
$at | $1 | временный регистр для языка ассемблера | НЕТ |
$v0—$v1 | $2-$3 | значения функций и выражений | НЕТ |
$a0—$a3 | $4-$7 | аргументы функций | НЕТ |
$t0—$t7 | $8-$15 | временные | НЕТ |
$s0—$s7 | $16-$23 | сохраненные временные значения | ДА |
$t8—$t9 | $24-$25 | временные | НЕТ |
$k0—$k1 | $26-$27 | зарезервирована для ядра операционной системы | НЕТ |
$gp | $28 | глобальный указатель | ДА |
$sp | $29 | указатель стека | ДА |
$fp | $30 | указатель фрейма | ДА |
$ra | $31 | возвращает адрес | N/A |
Эмуляторы
Среди Open Virtual Platforms существует бесплатный эмулятор OVP-sim, доступный для некоммерческого использования, который представляет собой библиотеку моделей процессоров и платформ, а также интерфейсов API, позволяющих пользователю проектировать свои собственные модели. Библиотека моделей является открытым ресурсом, написанном на языке С, и включает в себя ядра MIPS 4K, 24K и 34K. Данные модели созданы и поддерживаются компанией Imperas, которая в сотрудничестве с MIPS Tеchnologies протестировала эмулятор и отметила его знаком MIPS-Verified. Образцы платформ, основанных на MIPS включают в себя как само металлическое оборудование, так и платформы для загрузки немодифицированных двоичных отображений Linux. Такие платформы-эмуляторы эффективны для обучения, а также доступны, бесплатны и просты в использовании. OVPsim разработанный и поддерживаемый Imperas работает с высокой скоростью (сотни миллионов инструкций с секунду), и применим для описания многоядерных архитектур.
Существует свободно доступный эмулятор MIPS32 (ранние версии могли имитировать только R2000/R3000), выпущенный под названием SPIM и предназначенный для использования в обучении. EduMIPS64 — это межплатформенный графический эмулятор процессора MIPS64, написанный на языке Java/Swing. Он поддерживает множество MIPS64 ISA и позволяет пользователю наглядно увидеть, что происходит в конвейере, когда ЦП выполняет программу на языке ассемблера. Проект имеет строго образовательные цели и широко используется на некоторых курсах компьютерной архитектуры во всем мире.
Ещё один GUI-эмулятор процессоров MIPS — это MARS, тоже разработанный в образовательных целях, особенно эффективен вкупе с книгой Хеннесси Computer Organization and Design.
Более продвинутые версии бесплатных эмуляторов — Gxemul (ранее известные как проекты mips64emul), а также проекты QEMU. Они имитируют различные модели микропроцессоров MIPS III и MIPS IV (в качестве дополнения к компьютерным системам, их использующим).
Коммерческие разработки эмуляторов доступны в основном для встроенного использования процессоров MIPS, например, Virtutech Simics (MIPS 4Kc и 5Kc, PMC RM9000, QED RM7000), VaST Systems (R3000, R4000), и CoWare (MIPS4KE, MIPS24K, MIPS25Kf и MIPS34K).