В этой заметке я кратко опишу, что входит в СнК HR5000 и его процессорное ядро, покажу фотографии двух из ключевых разработчиков линеек MIPS 4K и 5K, а также расскажу, как вы можете поиграться дома на плате ПЛИС с «потомком младшего брата» этого компьютера — 32-битным ядром MIPS microAptiv UP, код которого на языке описания аппаратуры Verilog был основан на MIPS 4KEc.
![](https://habrastorage.org/getpro/habr/post_images/5fa/02a/94a/5fa02a94a100a6e139fe53bfb77f4cc5.png)
Японское аэрокосмическое агентство JAXA лицензировало процессорное ядро MIPS 5Kf у американской компании MIPS Technologies. Это произошло еще в 2000-е годы. Группа, которая разработала это ядро, существует в разных конфигурациях уже 40 лет:
- Сначала в 1978-1984 MIPS был проектом в Стенфорде, под руководством Джона Хеннесси. На успехе от этого проекта Хеннесси стал автором самого известного учебника по компьютерной архитектуре и в некоторый момент — президентом Стенфорда.
- Затем, в 1984 году, MIPS стал коммерческой компанией — MIPS Computer Systems. В этом же году коммерциализировался и ARM. В 1991 году MIPS выпустил первый в мире 64-битный микропроцессор — MIPS R4000.
- После этого MIPS был поглощен Silicon Graphics и в 1990-х использовался внутри графических станций, на которых в Голливуде делали первые фильмы с реалистичной графикой («Парк Юрского Периода»).
- В 2000-е группа выделилась в компанию MIPS Technologies и в частности спроектировала процессор для JAXA. Штаб-квартира MIPS находилась в Калифорнии, часть разработчиков MIPS 5Kf сидела в европейском отделении MIPS в Копенгагене.
- В 2012 году MIPS Technologies купила британская компания Imagination Technologies, которая прославилась как разработчик GPU внутри ранних Apple iPhone.
- В 2017 году Apple кинула Imagination и после некоторых пертурбаций технологии и часть группы MIPS интегрировались в компанию Wave Computing, стартап, который разрабатывает чип для ускорения нейросетей.
- Чип Wave Computing является комбинацией из кластера 64-битных процессоров MIPS I6500, матричного умножителя на основе систолического массива а-ля Google TPU, а также процессора потоков данных (dataflow processor) на основе устройства с крупнозернистой реконфигурируемой архитектурой (Coarse-Grained Reconfigurable Architecture — CGRA). Классические процессоры в кластере I6500 загружают матричный умножитель и процессор потоков данных данными, матричный умножитель обеспечивает вычислительную плотность, а процессор потоков данных по задачам находится посередине между классическим процессоров и матричным умножителем — он более гибкий, чем умножитель, и более производителен, чем классический CPU.
Вот я сфотографировался с одним из двух ключевых разработчиков линейки MIPS 4K и 5K — Larry Hudepohl, Ларри Хьюдепол (справа в красной рубашке). Ларри начинал свою карьеру в Digital Equipment Corporation (DEC) как дизайнер процессоров для MicroVAX. Потом Ларри работал в небольшой компании Cyrix, которая в конце 1980-х бросила вызов Интелу и сделала FPU сопроцессор, который был совместим Intel 80387 и при этом был его на 50% быстрее. Потом Ларри проектировал чипы MIPS в Silicon Graphics. Когда MIPS Technologies отделилась от Silicon Graphics, Ларри вдвоем с Райаном Кинтером начали первый продукт независимого MIPS — MIPS 4K, который стал основой линейки, доминирующей в домашней электронике 2000-х (DVD-плееры, фотокамеры, цифровые телевизоры). Потом MIPS 5K полетел в космос — его использовало японское космическое агентство JAXA. Потом Ларри на должности VP Hardware Engineering руководил разработкой следующих линеек, а сейчас работает над новыми архитектурами Wave акселератора:
![](https://habrastorage.org/getpro/habr/post_images/3c4/034/18a/3c403418a02c7b913f7503333ff8f467.jpg)
Теперь вернемся к процессору в Хаябусе-2 (в Хаябусе-1 он другой). Вот datasheet на процессорное ядро MIPS64 5Kf и страничка с данными системы на кристалле HR5000. Отметим несколько интересных моментов.
Прежде всего, MIPS 5Kf — конвейерный процессор. Если вы незнакомы, как это работает, то самый простой способ познакомиться — это проштудировать седьмую главу книжки «Цифровая схемотехника и архитектура компьютера» Дэвида М. Харрис и Сары Л. Харрис, последнюю версию перевода которой на русский язык которой можно скачать здесь или здесь). При этом конвейер в MIPS 5Kf отличается от классического конвейера MIPS из Харрис & Харрис. Те из вас, кто читали Х&Х, могут посмотреть на различия и догадаться почему:
![](https://habrastorage.org/getpro/habr/post_images/2f7/b1f/8bf/2f7b1f8bffa3a8b3486caeb42f4ebe7a.png)
Конечно же — у MIPS 5Kf не пять стадий конвейера, а шесть, с дополнительной стадией Dispatch. Эта стадия нужна, чтобы сделать MIPS 5Kf ограниченно-суперскалярным. Он может выполнять не только операции одна за другой в конвейере, но еще и может выполнять операцию с плавающей точкой одновременно с целочисленной операцией или с операцией работы с памятью (загрузка или сохранение). Стадия Dispatch запускает сопроцессор с плавающей точкой, у которого есть собственный семи-стадийный конвейер:
![](https://habrastorage.org/getpro/habr/post_images/508/bff/391/508bff391f1203e66c0673688e1b0d9f.png)
А вот справа на фото — Даррен Джонс, Darren Jones, разработчик FPU в MIPS 5Kf. Буква «f» в «5Kf» означает именно то, что у него есть плавающая точка:
![](https://habrastorage.org/getpro/habr/post_images/156/d3b/e04/156d3be04866e0fb1b7dab56bb79920a.jpg)
Вот в этой табличке вы можете увидеть, сколько циклов требуют разные операции в FPU и как часто (repeat rate) их можно запускать в конвейер. Например умножение одинарной точности требует четырех циклов, но при этом вы можете запускать в конвейер новое умножение каждый цикл. Так что FPU может одновременно обрабатывать четыре умножения одинарной точности на каждой стадии обработки. А вот умножение двойной точности требует пяти циклов, и запускать его можно только с паузой в цикл. Сложная операция взятия квадратного корня двойной точности требует аж 32 циклов, причем запустить новое взятие квадратного корня можно только через 29 циклов. Вот так оптимизируется вычисление координат корабля и формул его движения в космическом пространстве:
![](https://habrastorage.org/getpro/habr/post_images/458/e2f/e00/458e2fe00a0c894f6de90233ce342d44.png)
Хаябуса-2 использует конфигурацию MIPS 5Kf с раздельными 32-килобайтными кэшами инструкций и данных. При этом из краткого описания HR5000 непонятно, использует ли он четырехканальный кэш по 8 килобайт — или двухканальный кэш по 16 килобайт. Вы можете почитать, как работают эти кэши как в Х&Х, так и в моей старой презентации про кэши, а также в полезной книжке See MIPS Run Linux 2nd Edition by Dominic Sweetman:
![](https://habrastorage.org/getpro/habr/post_images/49b/b0f/5f2/49bb0f5f26816d0b214fbcb702f3fc23.jpg)
На Хаябусе-2 также стоит устройство управления памятью (Memory Management Unit — MMU), с буфером ассоциативной трансляции адресов (Translation Lookaside Buffer — TLB). TLB — это универсальное средство быстрого преобразования адресов из виртуального в физические. TLB позволяет:
Cкрывать память операционной системы от непривилегированного кода.
Защитить пользовательские программы друг от друга.
Предоставить доступ программы к объему виртуальной памяти, который превосходит объем физической оперативной памяти.
Адресовать бОльшую по размеру физическую память, чем доступно виртуальных адресов.
Разместить программу в любой части физической памяти.
Позволяет нескольким регионам памяти выглядеть как последовательный кусок.
Позволяет подгружать куски программы с внешнего устройства по необходимости.
TLB также ассоциирует с адресом разные атрибуты: запрета чтения, записи и исполнения, а также атрибуты кэшируемости и когерентности.
Атрибут кэшируемости нужен, чтобы показать процессору, где находится адресное пространство для следующего уровня кэша, а где — для решистров ввода-вывода, которые нельзя кэшировать.
Атрибуты когерентности нужны для совместной работы нескольких процессорных ядер, в каждом из которых свой кэш первого уровня, а все вместе они используют общий кэш второго уровня.
TLB может хранить индикатор, что на страницу с данным адресом происходила запись. Это помогает при своппировании, загрузке-выгрузке страниц памяти в системах с объемом физической памяти меньшей, чем нужно приложению для адресации всех кусков своего кода и данных виртуальными адресами.
Вот так выглядит трансляция 64-битного виртуального адреса в 36-битный физический на MIPS 5Kf. Зачем на Хаябусе-2 64-битный процессор с 36-битными физическими адресами? Я подозреваю, что Хаябуса-2 делает фотографии и должна обрабатывать изображения, для чего нужно много памяти. Возможно для некоторых алгоритмов 64-битная арифметика и 64-битные обмены с кэшем (или 64-битные некэшируемые обмены с памятью) что-то улучшают, и оно оказывается полезным в космосе. Но точно не знаю, наверное нужно спросить у Zelenyikot и amartology, которые знают про космос больше, чем я.
![](https://habrastorage.org/getpro/habr/post_images/1f4/b5e/54e/1f4b5e54e0f42636b906fe5d4f851682.png)
Вы можете почитать про TLB в Х&Х и See MIPS Run, но есть нюанс: обе книжки описывают, как выглядит TLB с точки зрения программиста. Но с точки зрения железячника проектировщики процессора обманывают программиста, показывая ему TLB как одну ассоциативную таблицу трансляций, при том, что на самом деле внутри TLB Хаябусы-2 таблиц три: микро-TLB инструкций, микро-TLB данных и общее (Joint TLB). Сначала устройство управления памятью ищет в ITLB и DTLB, и только если не находит, берет из JTLB. Это стоит процессору лишних 2 цикла. Также см. мою старую презентацию про TLB:
![](https://habrastorage.org/getpro/habr/post_images/f00/7eb/578/f007eb578f4887c7cf8f890444d61684.png)
Интерфейс между кэшами первого уровня и контроллером памяти у MIPS 5Kf у Хаябусы-2 называется EB (произносится И-Би). Это сокращение от «External Bus». Он похож на AHB и AXI, и позволяет делать burst, выдавать из кэша или заливать в кэш из памяти целую строку, с помощью трансферов в последовательных циклах.
![](https://habrastorage.org/getpro/habr/post_images/f3d/013/feb/f3d013feb5e2960574d69d66fa610a7a.png)
![](https://habrastorage.org/getpro/habr/post_images/e87/867/c8b/e87867c8bdc823d7f4551bdfbf431eae.png)
Вне процессорного ядра у HR5000 есть контроллер прерываний, модуль UART, контроллер прямого доступа к памяти, таймеры и контроллер PCI:
![](https://habrastorage.org/getpro/habr/post_images/172/8c3/b43/1728c3b431ac6ddb63bcbc7f38bf847b.png)
Для работы в космосе чип должен быть защищен от радиации. Я не специалист по радиационной защите, для этого на Хабре есть amartology, но знаю, что такая защита может делаться как на уровне физической технологии производства, так и на уровне разнообразных проверок ECC, и даже на уровне архитектуры, с троированием и т.д. Создатели системы на кристалле HR5000 решили применить обычный принятый в коммерческих применениях маршрус RTL2GDSII, синтез графа из логических элементов из кода на языке описания аппаратуры Verilog. Однако после получения такого графа (netlist), они модифицируют его с помощью специальной библиотеки примитивов hardness-by-design (HBD) (никогда такое не использовал, поэтому любое разъяснение в комментах приветствуется):
![](https://habrastorage.org/getpro/habr/post_images/142/c66/1f0/142c661f0bfe8b1237c9e33a968887f8.png)
Так как MIPS 5Kf написан на Verilog, его можно превратить не только в нетлист, и не только в маску для производства чипа на фабрике, но и в конфигурацию ПЛИС. К сожалению исходники MIPS 5Kf не лежат в открытом доступе, но в открытом доступе лежат исходники потомка его «младшего брата», 32-битного процессора MIPS 4K. Этот «потомок» называется MIPS microAptiv UP, и его базовая конфигурация входит в пакет MIPSfpga. Код MIPS 4K/4KEc/microAptiv UP/M5150 (это все прогрессирующие версии линейки) тоже в свое время писали Ларри, Райан и Даррен.
Вы можете поиграться с конвейером, кэшами, устройством управления памятью и прерываний ядра MIPS microAptiv UP, запустить его на симуляторе или плате с ПЛИС/FPGA. Для этого достаточно загрузить пакет MIPS Open™ FPGA Getting Started Package, вместе с MIPS Open™ FPGA Labs, и (это важно!) дополнить его MIPSfpga+. В последнем есть лабы про конвейер, кэш и устройство управления памятью.
Синтезировать и запустить процессор MIPS microAptiv UP можно на недорогой плате за $85 (академическая цена $55):
![](https://habrastorage.org/getpro/habr/post_images/a20/82b/988/a2082b988e8b633dac41bbc31659326d.jpg)
Для работы с пакетом MIPSfpga/MIPSfpga+ нужно знание языка описания аппаратуры Verilog, принципов проектирования на уровне регистровых передач и умение писать на ассемблере MIPS.
Ассемблер MIPS выучить проще всего. Для этого можно скачать симулятор MARS (MIPS Assembler and Runtime Simulator). Пользоваться им можно научиться за 5 минут, фактически в нем три кнопки — ассемблировать, запустить, запускать пошагово:
![](https://habrastorage.org/getpro/habr/post_images/159/348/2f7/1593482f7897e6462c5b6ebe7455b3cd.png)
Потом можно провести день, упражняясь в писани на ассемблере по книжкам Харрис & Харрис и See MIPS Run Linux.
Если вы совсем ничего не знаете про разработку цифровых схем вообще и на языке описания аппаратуры в частности, вы можете начать с роснановского онлайнового курса для школьников, из трех частей: «От транзистора до микросхемы», «Логическая сторона цифровой схемотехники», «Физическая сторона цифровой схемотехники»). Потом можно изучить Verilog по Х&Х и понять что есть процессор по упрощенному процессору schoolMIPS.
Если вы заинтересовались этой темой и хотите участвовать в работе над MIPS Open (в рамках которого было открыто ядро MIPS microAptiv UP), напишите в комментариях. Роснановцы также проводят семинар для школьников по цифровому проектированию 17-19 апреля, где будет речь в том числе и об этом космическом процессоре. Хаябуса-2 бомбардировала Рюгу не зря — это в том числе повод для российских школьников и студентов узнать, что у нее внутри.