Введение

Архитектура наборов инструкций

MIPS (Microprocessor without Interlocked Pipelined Stages) — это семейство архитектур наборов инструкций (ISA) для компьютеров с уменьшенным набором инструкций (RISC), разработанных компанией MIPS Computer Systems, ныне MIPS Technologies, базирующейся в Соединенных Штатах. Существует несколько версий MIPS, включая MIPS I, II, III, IV и V, а также пять выпусков MIPS32/64 (для 32- и 64-битных реализаций соответственно). Первые архитектуры MIPS были 32-битными, 64-битные версии были разработаны позднее. По состоянию на апрель 2017 года текущей версией MIPS является MIPS32/64 Release 6. MIPS32/64 в основном отличается от MIPS I–V тем, что определяет копроцессор управления системой в привилегированном режиме ядра в дополнение к архитектуре пользовательского режима. Архитектура MIPS имеет несколько необязательных расширений: MIPS 3D — простой набор SIMD-инструкций с плавающей запятой, предназначенный для распространенных 3D-задач; MDMX (MaDMaX) — более расширенный набор SIMD-инструкций для целочисленных операций, использующий 64-битные регистры с плавающей запятой; MIPS16e — добавляет сжатие к потоку инструкций, чтобы уменьшить размер программ; и MIPS MT — добавляет поддержку многопоточности. Архитектура MIPS часто изучается на курсах компьютерной архитектуры в университетах и технических училищах. Эта архитектура оказала значительное влияние на более поздние RISC-архитектуры, такие как Alpha. В марте 2021 года компания MIPS объявила о завершении разработки архитектуры MIPS в связи с переходом на RISC V.

История

Первая версия архитектуры MIPS была разработана MIPS Computer Systems для микропроцессора R2000, первой реализации MIPS. И MIPS, и R2000 были представлены вместе в 1985 году. Когда был представлен MIPS II, MIPS был переименован в MIPS I, чтобы отличать его от новой версии. В середине 1990-х годов основным применением не встраиваемых микропроцессоров MIPS были графические рабочие станции от Silicon Graphics. MIPS V был дополнен расширением MDMX, предназначенным только для целочисленных операций, чтобы обеспечить полную систему для повышения производительности 3D-графических приложений. Реализации MIPS V так и не были выпущены. 12 мая 1997 года Silicon Graphics анонсировала микропроцессоры H1 ("Beast") и H2 ("Capitan"). Первый из них должен был стать первой реализацией MIPS V и планировался к выпуску в первой половине 1999 года. Проекты H1 и H2 позже были объединены и окончательно отменены в 1998 году. Хотя реализаций MIPS V не было, MIPS64 Release 1 (1999) был основан на MIPS V и сохраняет все его функции в качестве опциональной функции сопроцессора 1 (FPU), называемой Paired Single. Когда MIPS Technologies была выделена из Silicon Graphics в 1998 году, компания переориентировалась на встраиваемый рынок. С MIPS V каждая последующая версия была строгим надмножеством предыдущей, но это оказалось проблемой, и определение архитектуры было изменено для определения 32-битной и 64-битной архитектур: MIPS32 и MIPS64. Обе были представлены в 1999 году. MIPS32 основан на MIPS II с некоторыми дополнительными функциями из MIPS III, MIPS IV и MIPS V; MIPS64 основан на MIPS V. По словам директора по маркетингу продуктов в MIPS, выпуск 4 был пропущен, поскольку число четыре считается несчастливым во многих азиатских культурах. В декабре 2018 года Wave Computing, новый владелец архитектуры MIPS, объявила, что MIPS ISA станет открытым исходным кодом в рамках программы под названием MIPS Open initiative. Программа была направлена на открытие доступа к самым последним версиям 32-битных и 64-битных конструкций, делая их доступными без лицензионных или роялти-сборов, а также предоставляя участникам лицензии на существующие патенты MIPS. В марте 2019 года одна версия архитектуры была доступна под лицензией без роялти, но позже в том же году программа была снова закрыта. В марте 2021 года Wave Computing объявила о прекращении разработки архитектуры MIPS. Компания присоединилась к RISC-V Foundation, и будущие процессоры будут разрабатываться на основе архитектуры RISC-V. Несмотря на это, некоторые лицензиаты, такие как Loongson, продолжают самостоятельно разрабатывать новые расширения совместимых с MIPS ISA. В январе 2024 года Loongson выиграла дело о правах на использование архитектуры MIPS.

Дизайн

MIPS — это модульная архитектура, поддерживающая до четырех сопроцессоров (CP0/1/2/3). В терминологии MIPS, CP0 — это сопроцессор системного управления (важная часть процессора, реализация которого определяется в MIPS I–V), CP1 — это необязательный блок операций с плавающей запятой (FPU), а CP2/3 — это необязательные сопроцессоры, определяемые реализацией (MIPS III упразднил CP3 и повторно использовал его опкоды для других целей). Например, в игровой консоли PlayStation, CP2 является движком геометрических преобразований (GTE), который ускоряет обработку геометрии в трехмерной компьютерной графике.

MIPS I

MIPS — это архитектура с загрузкой/сохранением (также известная как архитектура "регистр-регистр"); за исключением инструкций загрузки/сохранения, используемых для доступа к памяти, все инструкции оперируют только с регистрами.

Реестры

MIPS I имеет тридцать два 32-битных регистра общего назначения (GPR). Регистр $zero жестко зафиксирован на нуле и любые записи в него игнорируются. Регистр $ra является регистром возврата. Для инструкций целочисленного умножения и деления, выполняющихся асинхронно от других инструкций, предусмотрена пара 32-битных регистров HI и LO. Существует небольшой набор инструкций для копирования данных между регистрами общего назначения и регистрами HI/LO. Программный счетчик имеет 32 бита. Два младших бита всегда равны нулю, так как инструкции MIPS I имеют длину 32 бита и выровнены по границе слова.

Формат инструкции

Инструкции делятся на три типа: R (регистровые), I (непосредственного адреса) и J (перехода). Каждая инструкция начинается с 6-битного кода операции (опкода). Помимо опкода, инструкции типа R указывают три регистра, поле сдвига и поле функции; инструкции типа I указывают два регистра и 16-битное непосредственное значение; инструкции типа J следуют за опкодом 26-битным адресом перехода. Был добавлен набор инструкций "Ловушка по условию". Эти инструкции вызывали исключение, если вычисленное условие истинно. Для всех существующих инструкций ветвления были добавлены версии с вероятным ветвлением, которые выполняли инструкцию в слоте задержки ветвления только в случае выполнения ветвления. MIPS IV был разработан в основном для повышения производительности операций с плавающей точкой (FP). Для улучшения доступа к операндам был добавлен индексированный режим адресации (база + индекс, оба значения берутся из GPR) для загрузки и сохранения FP, а также инструкции предварительной выборки для выполнения предварительной выборки памяти и указания подсказок кэша (они поддерживали режимы адресации база + смещение и база + индекс). MIPS IV добавил несколько функций для повышения параллелизма на уровне инструкций. Чтобы устранить узкое место, вызванное одним битом условия, семь битов кодов условий были добавлены в регистр управления и статуса FP, доведя их общее количество до восьми. Инструкции сравнения FP и ветвления были переопределены таким образом, чтобы они могли указывать, в какой бит условия записывалось или из какого бита условия считывалось (соответственно); и слот задержки между ветвлением FP, которое считывало бит условия, записанный предыдущим сравнением FP, был удален. Поддержка частичной условной оценки была добавлена в виде инструкций условного перемещения для GPR и FPR; реализация могла выбирать между точными или неточными исключениями для ловушек IEEE 754. MIPS IV добавил несколько новых арифметических инструкций FP для одинарной и двойной точности: fused multiply-add (умножение с последующим сложением или вычитанием), обратную величину и обратный квадратный корень. Инструкции FP fused multiply-add выполняют либо одно, либо два округления (это определяется реализацией), чтобы превысить или соответствовать требованиям точности IEEE 754 (соответственно). Инструкции FP для вычисления обратной величины и обратного квадратного корня не соответствуют требованиям точности IEEE 754 и выдают результаты, отличающиеся от требуемой точности на одну или две единицы в младшем разряде (это определяется реализацией). Эти инструкции предназначены для приложений, где важна задержка выполнения инструкции, а не точность.

микроМИПС

Архитектуры microMIPS32/64 являются расширениями архитектур MIPS32 и MIPS64 (соответственно) и разработаны для замены ASE MIPS16e. Недостатком MIPS16e является необходимость переключения режима перед обработкой любой из его 16-битных инструкций. microMIPS добавляет версии наиболее часто используемых 32-битных инструкций, которые кодируются в виде 16-битных инструкций. Это позволяет программам чередовать 16- и 32-битные инструкции без переключения режимов. microMIPS был представлен вместе с MIPS32/64 Release 3, и каждый последующий выпуск MIPS32/64 имеет соответствующую версию microMIPS32/64. Процессор может реализовывать microMIPS32/64 или одновременно microMIPS32/64 и соответствующее подмножество MIPS32/64. Начиная с MIPS32/64 Release 6, поддержка MIPS16e была прекращена, и microMIPS является единственным способом сжатия кода в MIPS.

Применение

Процессоры MIPS используются во встраиваемых системах, таких как домашние шлюзы и маршрутизаторы. Изначально MIPS был разработан для универсальных вычислений. В 1980-х и 1990-х годах процессоры MIPS для персональных компьютеров, рабочих станций и серверов использовались многими компаниями, такими как Digital Equipment Corporation, MIPS Computer Systems, NEC, Pyramid Technology, SiCortex, Siemens Nixdorf, Silicon Graphics и Tandem Computers. Исторически процессоры MIPS применялись в игровых консолях, таких как Nintendo 64, Sony PlayStation, PlayStation 2 и PlayStation Portable. Процессоры MIPS также были популярны в суперкомпьютерах в 1990-х годах, но все эти системы исключены из списка TOP500. Первоначально это применение дополнялось встраиваемыми приложениями, но в 1990-х годах MIPS занял значительную долю на рынке встраиваемых процессоров, и к 2000-м годам большинство процессоров MIPS предназначались именно для этих целей. В середине и конце 1990-х годов оценивалось, что каждый третий производимый RISC-микропроцессор был процессором MIPS. К концу 2010-х годов машины на базе MIPS все еще широко использовались во встраиваемых системах, включая автомобильную промышленность, беспроводные маршрутизаторы, LTE-модемы (в основном через MediaTek) и микроконтроллеры (например, Microchip Technology PIC32M). В настоящее время они практически исчезли из сегментов персональных компьютеров, серверов и прикладных систем.