- PVSM.RU - https://www.pvsm.ru -
На днях японская автоматическая станция Хаябуса-2 сбросила бомбу на астероид Рюгу [1]. Космическим кораблем управляет радиационно-устойчивая система на кристалле HR5000 (JAXA2010/101) с 64-битным процессорным ядром MIPS 5Kf. На бортовом компьютере работает операционная система реального времени uITRON, одна из семейства RTOS-ов стандарта TRON, который появился в Японии еще в 1980-е годы и заслуживает отдельного поста [2].
В этой заметке я кратко опишу, что входит в СнК HR5000 и его процессорное ядро, покажу фотографии двух из ключевых разработчиков линеек MIPS 4K и 5K, а также расскажу, как вы можете поиграться дома на плате ПЛИС с «потомком младшего брата» этого компьютера — 32-битным ядром MIPS microAptiv UP, код которого на языке описания аппаратуры Verilog был основан на MIPS 4KEc.

Японское аэрокосмическое агентство JAXA лицензировало процессорное ядро MIPS 5Kf у американской компании MIPS Technologies. Это произошло еще в 2000-е годы. Группа, которая разработала это ядро, существует в разных конфигурациях уже 40 лет:
Вот я сфотографировался с одним из двух ключевых разработчиков линейки 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 акселератора:

Теперь вернемся к процессору в Хаябусе-2 (в Хаябусе-1 он другой). Вот datasheet на процессорное ядро MIPS64 5Kf [4] и страничка с данными системы на кристалле HR5000 [5]. Отметим несколько интересных моментов.
Прежде всего, MIPS 5Kf — конвейерный процессор. Если вы незнакомы, как это работает, то самый простой способ познакомиться — это проштудировать седьмую главу книжки «Цифровая схемотехника и архитектура компьютера» Дэвида М. Харрис и Сары Л. Харрис, последнюю версию перевода которой на русский язык которой можно скачать здесь [6] или здесь [7]). При этом конвейер в MIPS 5Kf отличается от классического конвейера MIPS из Харрис & Харрис. Те из вас, кто читали Х&Х, могут посмотреть на различия и догадаться почему:

Конечно же — у MIPS 5Kf не пять стадий конвейера, а шесть, с дополнительной стадией Dispatch. Эта стадия нужна, чтобы сделать MIPS 5Kf ограниченно-суперскалярным. Он может выполнять не только операции одна за другой в конвейере, но еще и может выполнять операцию с плавающей точкой одновременно с целочисленной операцией или с операцией работы с памятью (загрузка или сохранение). Стадия Dispatch запускает сопроцессор с плавающей точкой, у которого есть собственный семи-стадийный конвейер:

А вот справа на фото — Даррен Джонс, Darren Jones, разработчик FPU в MIPS 5Kf. Буква «f» в «5Kf» означает именно то, что у него есть плавающая точка:

Вот в этой табличке вы можете увидеть, сколько циклов требуют разные операции в FPU и как часто (repeat rate) их можно запускать в конвейер. Например умножение одинарной точности требует четырех циклов, но при этом вы можете запускать в конвейер новое умножение каждый цикл. Так что FPU может одновременно обрабатывать четыре умножения одинарной точности на каждой стадии обработки. А вот умножение двойной точности требует пяти циклов, и запускать его можно только с паузой в цикл. Сложная операция взятия квадратного корня двойной точности требует аж 32 циклов, причем запустить новое взятие квадратного корня можно только через 29 циклов. Вот так оптимизируется вычисление координат корабля и формул его движения в космическом пространстве:

Хаябуса-2 использует конфигурацию MIPS 5Kf с раздельными 32-килобайтными кэшами инструкций и данных. При этом из краткого описания HR5000 [5] непонятно, использует ли он четырехканальный кэш по 8 килобайт — или двухканальный кэш по 16 килобайт. Вы можете почитать, как работают эти кэши как в Х&Х, так и в моей старой презентации про кэши [8], а также в полезной книжке See MIPS Run Linux 2nd Edition by Dominic Sweetman:

На Хаябусе-2 также стоит устройство управления памятью с буфером ассоциативной трансляции адресов (Translation Lookaside Buffer — TLB). TLB — это универсальное средство быстрого преобразования адресов из виртуального в физические:
На Хаябусе-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 [9] и amartology [10], которые знают про космос больше, чем я.

Вы можете почитать про TLB в Х&Х и See MIPS Run, но есть нюанс: обе книжки описывают, как выглядит TLB с точки зрения программиста. Но с точки зрения железячника проектировщики процессора обманывают программиста, показывая ему TLB как одну ассоциативную таблицу трансляций, при том, что на самом деле внутри TLB Хаябусы-2 таблиц три: микро-TLB инструкций, микро-TLB данных и общее (Joint TLB). Сначала устройство управления памятью ищет в ITLB и DTLB, и только если не находит, берет из JTLB. Это стоит процессору лишних 2 цикла. Также см. мою старую презентацию про TLB [11]:

Интерфейс между кэшами первого уровня и контроллером памяти у MIPS 5Kf у Хаябусы-2 называется EB (произносится И-Би). Это сокращение от «External Bus». Он похож на AHB и AXI, и позволяет делать burst, выдавать из кэша или заливать в кэш из памяти целую строку, с помощью трансферов в последовательных циклах.


Вне процессорного ядра у HR5000 есть контроллер прерываний, модуль UART, контроллер прямого доступа к памяти, таймеры и контроллер PCI:

Для работы в космосе чип должен быть защищен от радиации. Я не специалист по радиационной защите, для этого на Хабре есть amartology [10], но знаю, что такая защита может делаться как на уровне физической технологии производства, так и на уровне разнообразных проверок ECC, и даже на уровне архитектуры, с троированием и т.д. Создатели системы на кристалле HR5000 решили применить обычный принятый в коммерческих применениях маршрус RTL2GDSII, синтез графа из логических элементов из кода на языке описания аппаратуры Verilog. Однако после получения такого графа (netlist), они модифицируют его с помощью специальной библиотеки примитивов hardness-by-design (HBD) (никогда такое не использовал, поэтому любое разъяснение в комментах приветствуется):

Так как 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 [12], вместе с MIPS Open™ FPGA Labs [13], и (это важно!) дополнить его MIPSfpga+ [14]. В последнем есть лабы про конвейер, кэш и устройство управления памятью [15].
Синтезировать и запустить процессор MIPS microAptiv UP можно на недорогой плате за $85 (академическая цена $55):

Для работы с пакетом MIPSfpga/MIPSfpga+ нужно знание языка описания аппаратуры Verilog, принципов проектирования на уровне регистровых передач и умение писать на ассемблере MIPS.
Ассемблер MIPS выучить проще всего. Для этого можно скачать симулятор MARS (MIPS Assembler and Runtime Simulator) [16]. Пользоваться им можно научиться за 5 минут, фактически в нем три кнопки — ассемблировать, запустить, запускать пошагово:

Потом можно провести день, упражняясь в писани на ассемблере по книжкам Харрис & Харрис [6] и See MIPS Run Linux [17].
Если вы совсем ничего не знаете про разработку цифровых схем вообще и на языке описания аппаратуры в частности, вы можете начать с роснановского онлайнового курса для школьников, из трех частей: «От транзистора до микросхемы» [18], «Логическая сторона цифровой схемотехники» [19], «Физическая сторона цифровой схемотехники» [20]). Потом можно изучить Verilog по Х&Х и понять что есть процессор по упрощенному процессору schoolMIPS [21].
Если вы заинтересовались этой темой и хотите участвовать в работе над MIPS Open [22] (в рамках которого было открыто ядро MIPS microAptiv UP), напишите в комментариях. Роснановцы также проводят семинар для школьников по цифровому проектированию 17-19 апреля [23], где будет речь в том числе и об этом космическом процессоре. Хаябуса-2 бомбардировала Рюгу не зря — это в том числе повод для российских школьников и студентов узнать, что у нее внутри.
Автор: Юрий Панчул
Источник [24]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/open-source/313999
Ссылки в тексте:
[1] японская автоматическая станция Хаябуса-2 сбросила бомбу на астероид Рюгу: https://lenta.ru/news/2019/04/05/bomb/
[2] и заслуживает отдельного поста: https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B5%D0%BA%D1%82_TRON
[3] сидела в европейском отделении MIPS в Копенгагене.: https://www.hpcwire.com/1998/11/20/mips-technologies-opens-development-center-denmark/
[4] datasheet на процессорное ядро MIPS64 5Kf: http://www.silicon-russia.com/wp-content/uploads/2019/04/MIPS645Kf.pdf
[5] страничка с данными системы на кристалле HR5000: http://www.silicon-russia.com/wp-content/uploads/2019/04/320MIPS64bitMPU.pdf
[6] здесь: http://www.mips.com/downloads/digital-design-and-computer-architecture-russian-edition-second-edition-ver3
[7] здесь: http://silicon-russia.com/public_materials/2018_01_15_latest_harris_harris_ru_barabanov_version/digital_design_rus-25.10.2017.pdf
[8] моей старой презентации про кэши: http://silicon-russia.com/public_materials/2015_11_14_mipsfpga_related_presentations/caches_in_mips_microaptive_up_2015_10_25.pdf
[9] Zelenyikot: https://habr.com/ru/users/zelenyikot/
[10] amartology: https://habr.com/ru/users/amartology/
[11] мою старую презентацию про TLB: http://silicon-russia.com/public_materials/2015_11_14_mipsfpga_related_presentations/tlb_mmu_in_mips_microaptiv_up_2015_10_25.pdf
[12] MIPS Open™ FPGA Getting Started Package: https://www.mipsopen.com/mips-open-components/mips-open-fpga-getting-started-guide/
[13] MIPS Open™ FPGA Labs: https://www.mipsopen.com/mips-open-components/mips-open-fpga-labs/
[14] MIPSfpga+: https://github.com/MIPSfpga/mipsfpga-plus
[15] лабы про конвейер, кэш и устройство управления памятью: https://github.com/MIPSfpga/mipsfpga-plus/tree/master/documentation/html_labs
[16] скачать симулятор MARS (MIPS Assembler and Runtime Simulator): http://courses.missouristate.edu/KenVollmar/MARS/
[17] See MIPS Run Linux: https://www.dropbox.com/s/dbdlz3qsgsfe23z/Sweetman%20D.See%20MIPS%20run%20Linux.2007.pdf?dl=0
[18] «От транзистора до микросхемы»: https://stemford.org/#course?id=6410690722451343819
[19] «Логическая сторона цифровой схемотехники»: https://stemford.org/#course?id=6410690722451344036
[20] «Физическая сторона цифровой схемотехники»: https://stemford.org/#course?id=6410690722451344042
[21] schoolMIPS: https://github.com/MIPSfpga/schoolMIPS
[22] MIPS Open: https://mipsopen.com
[23] семинар для школьников по цифровому проектированию 17-19 апреля: http://bit.ly/nanochip-2019
[24] Источник: https://habr.com/ru/post/447324/?utm_source=habrahabr&utm_medium=rss&utm_campaign=447324
Нажмите здесь для печати.