Следущие шаги в черной магии процессоростроения после того, как вы освоили Харрис & Харрис
Недавно вышло еще одно печатное издание книжки Харрис & Харрис на русском языке. Это широкоохватывающий ликбез про то, как проектируют микросхемы в компаниях типа Apple и Intel (методология проектирования на уровне регистровых передач с использованием языков описания аппаратуры). До этого печатного издания вышло бесплатное электронное издание этой же книжки, которое стало вирусным — его скачивания дважды завалили британский сайт Imagination Technologies, а посты о книжке на Хабре и Гиктаймс собрали более 300,000 просмотров (1, 2, 3, 4, 5 ). История перевода книжки на русский тоже довольно поучительна — он начался как общественный проект группы энтузиастов: преподавателей российских и украинских университетов, а также русских сотрудников компаний как в Silicon Valley (MIPS, AMD, Synopsys, Apple, NVidia …) так и в России (НИИСИ, МЦСТ, Модуль …). Когда вышло первое печатное издание на русском языке, его тоже довольно быстро раскупили и пожаловались, что оно черно-белое. Поэтому следующий принт был цветной, улучшенного качества.
Теперь возникает вопрос: ну хорошо, вы приобрели или скачали бесплатно книжку, поняли основы цифровой схемотехники, языков описания аппаратуры Verilog и VHDL, приобрели вкус писания на ассемблере и разобрались с организацией простейшего конвейерного микропроцессора, а также как все это стыкуется с периферийными устройствами и встроенным программированием. Что делать дальше?
На снимке — Татьяна Волкова, сотрудница образовательных программ компании Samsung в Московском Физико-Техническом Институте
Прежде всего, если вы после H&H подучитесь еще, вы можете получить интересную работу в одной из компаний, которая занимается проектированием микросхем. Например в Байкал Электроникс, которая разрабатывает процессоры для станков, контроллеров газопроводов, коммуникационных устойств и терминалов «Таволга»:
Вот недавняя статья про встроенные компьютеры на основе микропроцессора Байкал-Т и тесты производительности. Байкаловцы с платами для разработчиков. На них работает Линукс:
Еще вы можете пойти работать в зеленоградскую компанию ЭЛВИС-НеоТек, которая изначально занималась космосом, но сейчас все больше расширяется в коммерческий рынок чипов для умных камер с распознаванием образов. Название их продукта «Оруэлл-2000», с аллюзией, если кто не знает, на роман Джорджа Оруэлла, придумал президент компании Ярослав Петричкович, слева на снимке:
Элвисовцы спроектировали чип ELISE с их собственными блоками обработки видео, и сделали на нем вот такую плату для разработчиков, к которой можно приделать камеру и что-нибудь пораспознавать:
Также вы можете пойти в очень интересную группу НИИСИ РАН, где спроектировали микропроцессор КОМДИВ-64 — см. видео с менеджером проекта. КОМДИВ-64 совместим по архитектуре (системе команд) с MIPS64, но имеет собственную, спроектированную в России микроархитектуру суперскалярного конвейера и собственный векторный сопроцессор. Вот пример компьютера на процессоре КОМДИВ-64, который способен работать в экстремальных условиях — от канадской Арктики до южной Аризоны:
Ну и разумеется стоит упомянуть разработчиков «Эльбрусов» МЦСТ, разработчиков встроенных микропроцессорных чипов НИИМА «Прогресс», микроконтроллеров Миландр, чипов для умных карт КМ-211, чипов для цифровой обработки сигналов Модуль, киевское отделение бельгийской компании Melexis и другие компании, в которых вы можете заниматься интересными задачами и построить плодотворную карьеру.
Но прежде чем работать разработчиком чипов, после вводной книжки Харрис & Харрис нужно накачать некоторые рабочие навыки. Для этого существует учеба в университете (зеленоградский МИЭТ, московские МИФИ, МФТИ и МГУ, питерский ИТМО, киевский КПИ и другие), самообразование с помощью книг, онлайн-курсы и open-source проекты.
Начнем с книг. Если вас интересует микроархитектура (строение конвейера и логических блоков процессора), то вы можете попробовать вот такие книжки. Фаворитом среди практикующих микроархитекторов является Шень-Липасти, но синяя книжка посередине может понравиться несколько больше тем, кто не любит много читать (она более краткая):
Также есть курс на курсере преподавателя из Принстона:
Если вы ходили в математический кружок в школе или на матолимпиады, то вы можете покопать глубже область хардвера для арифметических операций, где вы обнаружите, что даже для простого сложения и умножения чисел в столбик существуют десятки реализаций, некоторые из которых используют конвейер для повышения пропускной способности и всякие трюки для частных случаев, типа операций с константами. В этой области и сейчас, в 21 веке, происходят прорывы и эмоциональные споры — см. напр. прошлогодний стон души математика из Беркли «A Critique of John L. Gustafson’s THE END of ERROR — Unum Computation and his A Radical Approach to Computation with Real Numbers». Вот одна из неплохих книжек по компьютерной арифметике:
Но чтобы вам реализовать микроархитектуру или даже просто арифметические блоки, вам нужен инструмент. Когда-то давно цифровые схемы рисовали мышкой на экране, но в последние 25 лет дизайн чаще всего пишется на языке Verilog (иногда VHDL), после чего специальная программа (logic synthesis) превращает дизайн в граф из проводов и логических примитивов, другая программа (static timing analysis) сообщает дизайнеру, вписывается ли он в бюджет скорости, а третья программа (place-and-route) раскладывает этот дизайн по площадке микросхемы. Когда дизайн проходит все этапы: кодирование на верилоге, отладка, верификация, синтез, static timing analysis, floorplanning, place-n-route, parasitics extraction и т.д. – получается файл под названием GDSII, который отправляют на фабрику, и фабрика выпекает микросхемы.
Если вам хочется понять, что такое Verilog и VHDL за пару дней, вы можете почитать вот такие книжки, но вообще говоря, все, что в них есть, есть и в Харрис & Харрис, за исключением тематики PLL (блоков для манипуляции с сигналом тактовой частоты). С другой стороны, про PLL в этих книжках рассказано недостаточно, поэтому я упоминаю их только потому, что они необыкновенно тонкие:
Если же вам хочется почитать про Verilog от людей, которые реально стояли у его истоков, вот три книжки. Первая похожа на Керниган-Ричи для Си, вторая (тяжеловатая) на Страструп для C++, третью написал известный гуру-консультант, который также любит порассуждать на 37 страниц, какой сброс лучше — синхронный или асинхронный.
Тут надо сказать, что Verilog — это не только язык для описания и синтеза схем, но и язык программирования для написания тестов. В некоторых компаниях на каждого инженера, который пишет код на верилоге на уровне регистровых передач, приходится три инженера, которые пишут код для верификации. Функциональная верификация — это вообще отдельное искусство со специальными языками, методологиями с использованием моделирования, автоматическим доказательством свойств схемы и т.д.
Карьера Verification Engineer с писанием сред тестирования на SystemVerilog может понравится опытным программистам, которые хотят сменить карьеру с например писания программ на Джаве. В SystemVerilog есть элементы объектно-ориентированного и симулированно-многопоточного программирования. Суть деятельности заключается в создание фреймворков, которые тестируют хардверные дизайны на прочность, бомбардируя их превдослучайными транзакциями и учитывая покрытие интересных сценариев (functional coverage).
Лучшая книга по языку SystemVerilog — на картинке ниже слева. Справа же — довольно старая книжка по написанию сред тестирования, обновленная для SystemVerilog. Это книжка нудная, но подходит для регулярного чтения, по полчаса в день, в общественном транспорте типа электрички, чтобы перенять опыт предыдущих поколений пользователей верилога.
В центре я привел очень простую и тонкую книжку, которая содержит элементарное введение в Universal Design Methology (UVM). UVM — это библиотека классов на SystemVerilog для создания средств тестирования на уровне блоков. Методология UVM не так универсальна, как обещают ее консультанты менеджменту, но практически каждому верификационному инженеру полезно иметь о ней представление. Книжка справа нелохая, хотя не описывает, как писать драйверы для конвейерных трназакций (это часто нужно). Прочитайте эту книгу за викенд и передайте другому — она реально такая короткая. Хороших длинных книг про UVM нет (они все плохие), поэтому я рекомендую читать стандарт и общаться с коллегами. При использовании UVM желательно использовать здравый смысл, иначе вместо реальной работы вы начнете бесконечно искать способы как обойти довольно жесткую структуру, навязываемую UVM.
Также по функциональную верификацию есть курс, созданный сотрудником ЭЛВИС-НеоТек+МИЭТ и eNano / образовательным отделением РОСНАНО.
Один из первых вопросов, который встает у людей, которые думают про изучение цифровой схемотехники: ну допустим я спроектировал собственный процессор, но как мне его произвести, ведь заказ типичной коммерческой микросхемы на фабрике стоит более миллиона долларов? Ответом является использование ПЛИС / FPGA — это специальные микросхемы, которые представляют собой матрицы из ячеек, логические функции в которых, а также соединения между которыми, можно многократно менять после изготовления. Они гораздо дороже и медленнее, чем обычные специализированные микросхемы, но для них нет “начального взноса” на производство. Сейчас на рынке есть студенческие платы с FPGA стоимостью менее $100, поэтому студенту и университетам для экспериментирования больше не нужно выкладывать крупные суммы. Научиться основам работы с FPGA можно довольно просто (см. напр. статью на сайте росийского производителя FPGA плат), но при более продвинутом использовании возникает много вопросов — как по техническим деталям использования FPGA, так и по подходом м методологиям. Я рекомендую вот эти две книжки для чтения перед сном:
Помимо разработки схемы на логическом уровне есть и физический уровень — размещение логических элементов по площадке микросхемы и соединение их дорожками, с учетом разного рода физических эффектов. Вы можете почитать про это вот в таких книжках. Та, которая слева, описывает процесс, с точки зрения пользователя софтвера для проектирования. Это книгу написал Дэвид Харрис, один из Харрисов в «Цифровой схемотехнике и архитектуре компьютеров». Книга справа — это про алгоритмы, используемые в софтвере для автоматизации проектирования:
Один из соавторов второй книги — наш соотечественник Игорь Марков, который стал в Америке широко признанным авторитетом по автоматизации физического проектирования электроники. Игорь Марков также приезжал в МГУ и провел там семинары, которые помогли мгушникам включиться в алгоритмически интересные исследовательские проекты в этой области. Вот несколько слайдов с этих семинаров:
Но если вы не хотите углубляться в алгоритмы, используемые в софтвере для проектировщика, а хотите быть проектировщиком сами, и при этом хотите получить общую картину всего пути от идеи до фабрики, во можете попробовать ликбезный курс от образовательного отделения РОСНАНО. Курс называется «Специализированные интегральные схемы наноуровня». Ниже выборка из слайдов, которая показывает, о чем идет речь в курсе. Также есть другой, сходный по тематике курс от преподавателя МИЭТ + eNano, и еще один смежный курс:
Приведенная выше куча книг может создать впечатление, что область проектирования электроники очень сложна. Это не совсем так: в ней есть сложные задачи, но основные методы может усвоить даже пятиклассник. Это не преувеличение: вот видео продвинутого пятиклассника Вячеслава, который начился работать с Verilog и FPGA на Летней Школе Юных Программистов в Новосибирске в июле этого года:
А на этом снимке восьмиклассница Дарья (справа) добавила инструкцию в простейший процессор (модифицировав декодер и ALU), синтезировала его, написала тесты на ассемблере и запустила процессор на FPGA плате:
Код, который Дарья модифицировала в Новосибирске, находится здесь. Учебный процессор, используемый в проекте — это schoolMIPS от Станислава Жельнио @sparf. schoolMIPS по сути самый простой процессор, который можно придумать. Он однотактный и выполняет дюжину команд — достаточно, чтобы выполнять программы типа вычисления чисел Фибоначчи. Вот его общая схема:
Станислав Жельнио начал писать процессор schoolMIPS на основе примера их Харрис & Харрис, потом ему начал помогать преподаватель МИЭМ ВШЭ Александр Романов, который хочет использовать этот процессор в своем курсе. Кроме этого, Станислав сделал несколько существенных улучшений и для образовательного проекта MIPSfpga, который основан на промышленном процессорном ядре MIPS microAptiv UP.
И schoolMIPS, и MIPSfpga можно использовать как следущие шаги после изучения Харрис & Харрис. Они могут стать основой для цепочки стуженческих проектов.
schoolMIPS можно шаг за шагом нарастить и добавить к нему конвейерность, работу с памятью, кэши, более длинный конвейер, суперскалярность и даже scoreboard в стиле CDC 6600 и алгоритм Томасуло.
MIPSfpga можно использовать для экспериментов по повышению производительности реальных программ с помощью предсказания переходов, добавлять к нему математические сопроцессоры или переписать модуль кэша, чтобы строить многоядерные системы с когерентными кэшами на основе алгоритма MESI.
Можно просто использовать MIPSfpga для построения прототипа системы на кристалле и интеграции с ним датчиков, как это сделал киевский студент Олег Плотников под руководством Евгения короткого из лаборатории Лампа КПИ:
https://youtu.be/gPI1UbgUHT4
Для таких народных проектов есть три коллекции плат — в Киеве (Киево-Могилянская Академия, Москве (ВШЭ-МИЭМ) и Новосибирске (НГТУ). Если вы хотите сделать скажем пример «CDC 6600 на верилоге» и обязуетесь написать про это пост на Хабре, но у вас нет платы, вы можете одолжить ее в одном из этих мест.
Вот фотография с хакатона в Киево-Могилянской Академии, где школьники использовали FPGA плату, показанную на видео и где собираются внедрить Харрис & Харрис в обучение:
Если вам недостаточно бесплатно скачанного учебника Харрисов, и вы хотите бумажную копию с высоким качеством печати, то помимо интернета, вы можете купить ее в некоторых книжных, например в московском Библиоглобусе. Правда они его поставили не среди книг по электронике, а среди книг по программированию, но он реально находится на границе электроники и программирования, поэтому его можно поставить хоть в два отдела: