Взял видеоинтервью у вице-президента Ардуино и обсудил с ней преподавание школьникам ПЛИС-ов

На днях я встретился и взял короткое видеоинтервью у Kathy Giori, Vice President Operations Arduino USA. Мы обсудили с Кати новое веяние, которое уже коснулось и Ардуино-коммьюнити: так как программированию микроконтроллеров с помощью Ардуино уже все более-менее научены, то пора делать следующий шаг: учить школьников использовать язык описания аппаратуры Verilog и микросхемы ПЛИС / FPGA, матрицы логических элементов с изменяемыми функциями. А для того, чтобы сделать освоение FPGA проще, стоит воскресить упражнения с микросхемами малой степени интеграции, популярные в 1970-х, в качестве приквела к современным FPGA. Все это закроет брешь между физикой и программированием, дискретными элементами и микроконтроллерами, транзистором и Ардуино.

FPGA и платы можно использовать от любого производителя (Xilinx, Altera, Lattice, Digilent, Terasic), все что я пишу ниже, не имеет привязки к той или иной компании.

В разговоре с Кати принимала участие преподаватель Стенфорда Светлана Хутка, которая рассказала Кати об эксперименте по бесплатному обучению школьников использованию FPGA в Киеве, силами преподавателей-энтузиатов из нескольких киевских вузов. После этого я поделился с Кати планами проведения следующего такого эксперимента на известной еще с советских времен летней школе юных программистов в Новосибирске, а также поговорил с другими присутствующими товарищами из Ардуино-коммьюнити о внедрении FPGA в двух школах и одном коледже Silicon Valley.

В этом посте я приведу как информацию по результатам киевского эксперимента, так и некоторые планы на будущее, которые сейчас разрабатывают активисты — преподаватели физматшкол и вузов Киева, Чернигова, Новосибирска, Москвы, Нижнего Новгорода, Самары, Санкт-Петербура, Алматы и других городов. На киевском семинаре участники дошли до создания конечных автоматов кодового замка и интеграции с простыми периферийными устройствами (16-кнопочная клавиатура, динамик). На летней школе в Новосибирске у нас времени будет больше и мы попробуем построить со школьниками процессор. В перспективе из этого планируется сделать годовой курс основ цифровой электроники на FPGA для физматшкол, который может обогатить школьное образование, как в 1980-х его обогатило введение элементов программирования.

Плата c FPGA, которую сейчас рекомендует Кати, и которую я несколько переделываю, чтобы приспособить к своим нуждам (про это будет отдельный пост):

А теперь обсудим детально:

1. Зачем учить школьников языкам описания аппаратуры и использованию ПЛИС? Обоснование программы.

В картине мира, представляемой школьным образованием, существует “слепое пятно” в области принципов проектирования цифровой электроники, между физикой и программированием. Курсы роботики и ардуино это слепое пятно не закрывают, так как сводятся к программированию готовых чипов. Упражнения с дискретными элементами и микросхемами малой степени интеграции, хотя и эффективны во введении в основные принципы, базируются на технологиях 1960-1970-х годов и не содержат привязки к современному проектированию. Слепое пятно можно закрыть с помощью введения элементов языков описания аппаратуры (ЯОА) и доступные для школьного экспериментирования микросхемы ПЛИС (программируемые логические интегральные схемы) — матрицы реконфигурируемых логических элементов. Тем самым картина мира становится цельной, и способствует созданию среды для появления большого количества молодых инженеров, имеющих представление о всех сторонах современных микросхем для приложений типа самоуправляемых автомобилей, и способных в будущем специализироваться для проектирования того или иного аспекта таких устройств.

Введение ЯОА и ПЛИС в школьную программу также хорошо привязывается к курсу математики и физики физматшкол — булевская алгебра, арифметические схемы, конечные автоматы.

Заметим, что ЯОА и ПЛИС, несмотря на поверхностное сходство с программированием, используют другие базовые концепции:

Программирование: последовательное исполнение, ветви выбора, циклы, переменные, выражения, массивы (c моделью плоской адресуемой памяти), функции (на основе использования стека), рекурсия.

Проектирование цифровой логики: комбинационный логический элемент; построение из этих элементов облаков комбинационной логики, включающей примитивы выбора с помощью мультиплексоров, а также блоки для реализации арифметических выражений; концепция тактового сигнала для синхронизации вычислений и повторения, концепция D-триггера для хранения текущего состояния между тактами; конечный автомат; параллельность операций, иерархия модулей, концепция конвейера (не только для процессора, но и для арифметических блоков).

2. Общий план таких курсов:

  • Секция 1. Соединение с физикой, с лабораторными на дискретных компонентах.

  • Секция 2. Основы цифровой логики и арифметики, с лабораторными на микросхемах малой степени интеграции.

  • Секция 3. Проектирование схем на основе синтеза языка описания аппаратуры, с лабораторными на ПЛИС Xilinx или Altera.

  • Секция 4. Архитектура процессора: вид со стороны программиста, с лабораторными с помощью симулятора RISC-процессора на уровне инструкций, например MARS MIPS.

  • Секция 5. Микроархитектура: строим процессор.

  • Индивидуальный проект: интеграция датчика или другого периферийного устройства с схемой, реализованной в ПЛИС.

3. Итоги киевского эксперимента.

Развернутый текст с итогами киевского эксперимента написал преподаватель Киевского Политехнического Института Евгений Короткий. Я дополню его своими личными выводами. Предыстория — посты на Хабре и Geektimes — 1, 2, 3, 4). В тех постах были заданы вопросы. Вот какие получились ответы:

  1. Гипотеза, что школьники могут использовать Verilog, подтвердилась

  2. Verilog также оказался достаточному количеству школьников интересен (до Киева некоторые коллеги в этом сомневались, утверждая, что детям более интересны проекты типа роботической руки с микроконтроллером)

  3. Идея, что перед использованием Verilog полезно показать школьникам логические элементы и D-триггер на микросхемах малой степени интеграции — не то чтобы однозначно подтвердилась, но получила большее обоснование.

  4. Всего после дня опыта с верилогом некоторые школьники начали задавать вразумительные вопросы — например когда применять блокирующее, а когда неблокирующее присваивание.

  5. Довести школьников от нуля до конечных автоматов, реализующих протоколы типа SPI — за одну неделю по-видимому нереально, а вот до конечного автомата кодового замка или светофора — реально.

  6. Также нереально довести за одну неделю по конструирования процессора, но мы попробуем это сделать за две недели в Новосибирске.

  7. Во время киевского эксперимента мы пробовали рассказать и про FPGA, и про встроенные процессоры (MediaTek MT7688, находящийся где-то посередине между Ардуино и Интел Галилео или Расбери Пай по производительности). Потом мы сделали хакатон (в Киевско-Могилянской Академии) и пронаблюдали, сколько школьников выбрали для хакатона проект с FPGA и сколько — проект с встроенным процессором. Выяснилось — 50 на 50. Это интересно — до хакатона у меня не было вообще никакого предположения, какая будет разбивка.

  8. У меня было опасение, что школьников может запутать пользовательский интерфейс в Xilinx Vivado, с кучей опций и элементов интерфейса. Но оказалось, что школьникам все равно — сложный GUI их не пугает.

  9. Большинство школьников используют Windows. У меня вместе с моим коллегой Александром Белицем есть идея заготовить для таких мероприятий пару десятков bootable SSD-драйвов с Линуксом (Ubuntu или CentOS) и носить их от мероприятия к мероприятияю. Алекс даже написал скрипт для клонирования таких драйвов. Ubuntu более дружелюбен, но CentOS более официально поддерживается средствами автоматизации проектирования схем на FPGA, в частности Xilinx Vivado и Altera Quartus. Можно ли делать одновременно ликбез по Линуксу и ликбез по Verilog / FPGA во время летнего лагеря? Непонятно, но это можно попробовать.

  10. Оказывается, Xilinx Vivado нещадно глючит приконфигурации Artix-7 FPGA, если использовать дешевые плохо экранированные микро-USB кабели. По какому-то мистическому наитию я перед поездкой в Киев засунул в чемодан дюжину качественных шнуров, и это спасло семинар.

  11. У меня была идея, что использование breadboardable FPGA modules (FPGA плат, которые втыкаются в макетные платы), например Digilent Cmod A7 35T, может облегчить школьникам переход с упражнений с микросхемами малой степени интеграции на упражнения с FPGA. Верна ли эта идея, я так и не понял. Возможно использование более крупных плат с богатым набором периферии, например Terasic DE10-Lite, будет ничуть не хуже. Все равно при переходе с микросхем малой степени интеграции (CMOS 4000 или 74HC) на FPGA — нужно менять напряжение питания (с 9 V или 5 V на 3.3 V), поэтому нельзя воткнуть Cmod A7 вместо скажем CMOD 4013 в одну и ту же макетную плату с лампочками и кнопками, и ожидать, что все будет продолжать работать.

  12. Я подтвердил свое наблюдение, что для проведения краткосрочных (1 неделя) образовательных мероприятий критично, чтобы на месте находилась бригада студентов местного университета, которая бы осуществляла менторство школьников. В киевском случае такую бригаду обеспечил преподаватель Киевского Политехнического Института Евгений Короткий.

  13. Стало более-менее понятно, в каких случаях и в каком объеме стоит включать в программу подобных мероприятий часть про уровень транзисторов и про производства микросхем. Эту часть преподавал доцент Киевского Национального Университета Александр Барабанов, переводчик материалов по курсу Nanometer ASIC для студентов. По-видимому, этот материал стоит в полном объеме включать в годовой курс для школьников, в небольшом — в двухнедельный курс в формате летнего лагеря, но при продолжительности меньше недели нужно наверное сразу (в течение 1 часа после начала) давать школьникам микросхемы малой степени интеграции (например CMOS 4000) и про транзистор упомянуть вскользь, в виде «транзистор — это устройство, в котором ток течет из пукта A в пункт B, если в C стоит напряжение 1 (или 0). Из транзисторов можно строить логические элементы И, ИЛИ, НЕ (показать на картинку)».

  14. Во время лекций перед большой аудиторией школьникам можно показывать схемы, собранные на макетной плате из микросхем малой степени интеграции. Это наглядно, вызывет интерес, а также не требует подключения конструкции к компьютеру — только с батарейке 9 V. Я показывал три таких схемы, наиболее критичных для понимания — логический элемент XOR, комбинационный 4-битный сумматори D-триггер с частотой порядка 1 Герц (т.е. такт в секунду).

  15. Остается открытым вопрос, можно ли преподавать школьникам идею конвейерной обработки, одну из самых мощных идей в цифровом проектировании и организации вычислений вообще. Для этого необязательно строить конвейерный процессор, можно сделать и конвейерное арифметическое устройство. Наверное это можно упомянуть в самом конце курса, когда дети наиграются с простыми комбинационными и последовательностным схемами и конечными автоматами. Скорее всего это будет интересно очень небольшому подмножеству школьников, но попробовать стоит.

  16. Для мероприятий подлиннее можно использовать индивидуальные проекты и проверочные работы.

Код на GitHub использованный для киевского мероприятия

4. Источники информации для разработки будущих материалов.

Источники информации для преподавателей физматшкол, которые по-видимому будут разрабатывать большую часть детальных материалов, после начальных экспериментов со школьниками на Украине, в России и в Silicon Valley:

  1. Учебник Дэвида Харриса и Сары Харрис “Цифровая схемотехника и архитектура компьютера”, 2-е издание, русский перевод. Этот учебник можно скачать бесплатно, см. статьи на Хабре о нем — 1, 2, 3. Недавно также вышло новое бумажное издание с улучшенной цветной полиграфией

  2. Слайды для преподавателей, дополнение к учебнику Харрис & Харрис. Бесплатное скачивание.

  3. Материалы по курсу From NAND to Tetris, который был создан в Израиле и внедрен в некоторые американские университеты. При этом, имхо, от курса стоит использовать идеи и скелет, но реализацию делать на подмножествах “взрослых” средств проектирования, а не искуственных “детских” средствах, как делает это курс. Ключевые части скачиваются бесплатно.

  4. Книга Чарльза Петзольда “Код”, которая адекватно объясняет на пальцах многие концепции и уровень которой соответствует школьному (идея подсказана преподавателем киевской школы ОРТ Сергеем Дзюбой). Опять же, с моей точки зрения, из книги стоит использовать идеи и скелет, но бОльшую часть материала заменить на более корректный (вместо защелок (D-latch) использовать D-триггеры (D-flip-flop)) и современный, например вместо accumulator-based 6800 и архаичного 8080 использовать подмножество RISC-архитектуры.

  5. Наборы для конструирования схем на макетной плате на основе дискретных компонент и микросхем малой степени интеграции от американской компании ETron Circuit Labs, российской компании Киберфизика, украинской компании Радиомаг (я могу объяснить различия между этими наборами в комментариях, если кому интересно).

  6. Материалы компаний-производителей микросхем ПЛИС (Xilinx, Altera) и образовательных плат с микросхемами ПЛИС (Digilent, Terasic).

  7. Примеры кода, контрольные работы и рекомендации по проектам, разработанные Антоном Моисеевым, Юрием Панчулом, Евгением Коротким, Александром Барабановым и другими инженерами компаний и преподавателями университетов для различных мероприятий в Калифорнии, Казахстане, России и Украине.

5. План на будущее номер 1. Формат годового курса на 35 учебных часов, раскиданных на учебный год по часу в неделю

  1. От физики к дискретным элементам

    1. Что такое ток, напряжение и сопротивление. Как устроена макетная плата. Упражнение: первая схема с батарейкой, светодиодом и резистором. Зачем включать резистор в цепь со светодиодом. Чтение маркировки резисторов. Переменные резисторы, фоторезисторы.

    2. Что такое транзистор. Обзор переключающих элементов от реле, радиоламп, дискретных транзисторов до транзисторов на микросхемах. Упражнения с тиристором (SCR — silicon controlled rectifier — нагляднее чем транзистор), биполярным p-n-p и n-p-n транзисторами.

    3. Контрольная работа.

  2. От дискретных элементов к комбинационной логике

    1. Булева алгебра и алгебра логики. Операции, выражения, аксиомы и тождества, включая законы де Моргана. Таблицы истинности.

    2. Комбинационные логические элементы И, ИЛИ, НЕ, И-НЕ, ИЛИ-НЕ, ИСКЛЮЧАЮЩЕЕ-ИЛИ (AND, OR, NOT, NAND, NOR, XOR). Как комбинационные элементы строятся из транзисторов. Упражнение: построить AND, NAND или NOR из дискретных элементов.

    3. Логические элементы в микросхемах малой степени интеграции. Индивидуальное упражнение: каждому ученику выдается персональная микросхема логики серии CMOS 4000, с техническим описанием от производителя, с задачей нарисовать таблицу истинности, продемонстрировать ее работу и словесно описать функцию. Микросхемы содержат логические элементы AND, OR, XOR, NOR, NAND с различным числом входов. Что такое такое подтягивающие резисторы и зачем они нужны. Добавляем к предыдущему упражнению кнопки и подтягивающие резисторы.

    4. Контрольная работа.

  3. Двоичная арифметика и ее реализация

    1. Двоичные числа. Преобразование из двоичных в десятичные числа и наоборот. Операции сложения и умножения. Отрицательные числа и дополнительный код.

    2. Реализация полусумматора и полного сумматора с помощью логических элементов. Перенос. Многоразрядный сумматор с последовательным переносом. Упражнение на макетной плате. Упоминание о длинной временной задержке и схемах с более оптимальной задержкой.

    3. Использование 4-битного полного сумматора CMOD 4008. Построение из него 8-битного сумматора и схемы вычитания. Домашнее задание для продвинутых студентов: изучить и сделать презентацию о реализации быстрых сумматоров с ускоренным групповым переносом.

    4. Контрольная работа.

  4. Последовательностная логика

    1. Построение генератора тактового сигнала на основе микросхемы 555. Изучение влияния конденсаторов и сопротивлений на частоту и длительности высокого и низкого уровней.
      Так как в обвязку 555 входят конденсаторы, могут понадобится дополнительные объяснения, что такое конденсаторы, зачем они нужны в обвязке 555 и как они маркируются. Также может быть полезным и вспомогательное упражнение с зарядкой и разрядкой конденсаторов разной емкости.

    2. Схемы с внутренним состоянием. Построение RS-защелки из логических элементов NAND. Изучение поведения D-триггера с помощью микросхемы CMOS 4013 и тактового сигнала от 555 с частотой 1 Гц.

    3. Последовательностные блоки — счетчик (CMOS 4029) и сдвиговый регистр (4015). Семисегментный индикатор и его драйвер 4511. Упражнения с этими микросхемами.

  5. Экзамен.

  6. От микросхем малой степени интеграции к ПЛИС — комбинационная логика

    1. Понятие о ПЛИС (программируемой логической интегральной схеме) — матрице реконфигурируемых логических элементов. Понятие о языке описания аппаратуры Verilog, процедурах синтеза, размещения, трассировки и конфигурации. Упражнение: синтез простейшего комбинационного модуля с конфигурацией ПЛИС на учебной плате.

    2. Продолжение изучения языка Verilog. Типы данных, выражения, присваивания. Always-блоки и основные операторы. Упражнение: вывод первых букв своего имени и фамилии на семисегментный индикатор, переключаясь между ними с помощью кнопки.

    3. Продолжение изучения языка Verilog. Иерархия модулей. Упражнение: построение мультиплексоров и сумматоров из подмодулей. Домашнее задание для продвинутых студентов: изучить и сделать презентацию о реализации быстрых сумматоров с ускоренным групповым переносом.

    4. Моделирование кода на Verilog без ПЛИС. Подмножества языка для реализации схемы и для ее тестирования / верификации. Моделирование временных задержек. Упражнение: создание среды для проверки работы схемы, описанной на языке Verilog. Использование симулятора Icarus Verilog для моделирования и программы GTKWave для просмотра временных диаграмм.

    5. Презентация группы продвинутых студентов: реализация быстрых сумматоров с ускоренным групповым переносом, моделирование в них временных задержек и сравнение их с сумматорами с последовательным переносом (количество логических элементов и задержки).

    6. Контрольная работа

  7. Проектирование последовательностной логике на языке Verilog с реализацией на ПЛИС

    1. Конструкции языка Verilog, которые порождают D-триггеры по время синтеза. Объяснение правил методологии проектирования на уровне регистровых передач: блокирующие и неблокирующие присваивания в различных always-блоках. Моделирование последовательностных схем на симуляторе Icarus Verilog.

    2. Упражнения: реализация D-триггера, счетчика и сдвигового регистра на ПЛИС. Анализ результатов программы статического анализа о максимальной частоте. Демонстрация: использование последовательностной логики для генерации сигналов звуковой частоты и вывода их на динамик.

    3. Концепция конечного автомата. Диаграммы изменения состояний. Упражнения: конечные автоматы светофора и кодового замка.

    4. Конечные автоматы для протоколов шин. Выбор самостоятельного проекта (со сдачей в конце курса) по интеграции датчиков и других периферийных устройств с платой c ПЛИС. Самостоятельная работа: индивидуальный проект, модифицирующий поведение одного из примеров с последовательностной логикой: счетчика, сдвигового регистра или конечного автомата.

    5. Концепция конвейерной обработки. Сравнение конвейерной реализации арифметических блоков, вычисляющих степень и квадратный корень.

    6. Контрольная работа.

  8. Архитектура процессора: вид со стороны программиста, с лабораторными с помощью симулятора RISC-процессора на уровне инструкций, например MARS MIPS.

    1. Концепция фон-Нейманновской машины. Введение в ассемблер: команды, операнды, регистры, константы. Арифметические и логические операции. Кодирование инструкций. Упражнение с симулятором процессора на уровне инструкций — MARS MIPS. Простые программы на ассемблере для вычисления выражений.

    2. Условные и безусловные переходы, метки, циклы. Пример: вычисление чисел Фибоначчи. Индивидуальное упражнение на основе модификации примера.

    3. Концепция адресуемой памяти. Инструкции загрузки и сохранения в память. Конструкции ассемблера для выделения памяти. Упражнение: программа, заполняющая память вычисленными данными. Индивидуальное упражнение на основе модификации примера.

    4. Контрольная работа.

  9. Микроархитектура: строим процессор

    1. Реализация на Verilog подмножества архитектуры MIPS с памятью инструкций, с регистрами общего назначения, но без памяти данных. Минимальный набор инструкции, достаточный, чтобы вычислять числа Фибоначчи и целочисленный квадратный корень итеративным способом. Однотактовая микроархитектура. Простейшая среда тестирования с закодированным вручную массивом инструкций.

    2. Продолжение 9.1

  10. Представление студенческих проектов по интеграции с датчиками

  11. Экзамен

6. План на будущее номер 2. Формат двухнедельного летнего лагеря

  1. Знакомство с макетной платой, сопротивлениями и логическими элементами.

    1. Первая схема с батарейкой, светодиодом и резистором. Зачем включать резистор в цепь со светодиодом. Чтение маркировки резисторов.

    2. Комбинационные логические элементы. Каждому ученику выдается персональная микросхема логики серии CMOS 4000, с техническим описанием от производителя, с задачей нарисовать таблицу истинности, продемонстрировать ее работу и словесно описать функцию. Микросхемы содержат логические элементы AND, OR, XOR, NOR, NAND с различным числом входов. Входы подключаются к питанию и земле переходниками, и входы и выходы подключаются к светодиодам.

    3. Вариант упражнения 2 с кнопками и подтягивающими резисторами, с объяснением их функции.

  2. Знакомство с двоичной арифметикой

    1. Использование 4-битного сумматора на микросхеме CMOD 4008.
      Построение 8-битного сумматора из двух 4-битных.

    2. Построение схемы вычитания используя тождество -a == ~ a + 1

  3. Знакомство с последовательностной логикой

    1. Построение генератора тактового сигнала на основе микросхемы 555. Изучение влияния конденсаторов и сопротивлений на частоту и длительности высокого и низкого уровней.

    2. Изучение поведения D-триггера с помощью микросхемы CMOS 4013 и тактового сигнала от 555 с частотой 1 Гц.

    3. Использование сдвигового регистра для генерации “бегущих огоньков” на основе микросхемы CMOS 4015.

    4. Строим счетчик (CMOS 4029) и подсоединяем к нему семисегментный индикатор через драйвер 4511.

  4. Знакомство с ПЛИС (программируемой логической интегральной схеме) — матрицей реконфигурируемых логических элементов. Понятие о языке описания аппаратуры Verilog, процедурах синтеза, размещения, трассировки и конфигурации. Типы данных языка Verilog, выражения, присваивания. Always-блоки и основные операторы.

    1. Синтез простейшего комбинационного модуля с конфигурацией ПЛИС на учебной плате.

    2. Вывод первых букв своего имени и фамилии на семисегментный индикатор, переключаясь между ними с помощью кнопки.

    3. Продолжение изучения языка Verilog. Иерархия модулей. Моделирование кода на Verilog без ПЛИС. Подмножества языка для реализации схемы и для ее тестирования / верификации. Моделирование временных задержек.

    4. Упражнение: построение мультиплексоров из подмодулей.

    5. Создание среды для проверки работы схемы, описанной на языке Verilog. Использование симулятора Icarus Verilog для моделирования, а также программы GTKWave для просмотра временных диаграмм.

  5. Проектирование последовательностной логике на языке Verilog. Конструкции языка Verilog, которые порождают D-триггеры по время синтеза. Объяснение правил методологии проектирования на уровне регистровых передач: блокирующие и неблокирующие присваивания в различных always-блоках. Моделирование последовательностных схем на симуляторе Icarus Verilog. Анализ результатов программы статического анализа о максимальной частоте.

    1. Реализация счетчика на ПЛИС.

    2. Реализация сдвигового регистра на ПЛИС.

    3. Использование последовательностной логики для генерации сигналов звуковой частоты и вывода их на динамик.

    4. Модификация упражнения 2 или упражнения 3 на основе индивидуального задания.

  6. Концепция конечного автомата. Диаграммы изменения состояний. Конечные автоматы для протоколов шин. Выбор самостоятельного проекта (со сдачей в конце школы) по интеграции датчиков и других периферийных устройств с платой c ПЛИС.

    1. Конечный автомат “улыбающаяся улитка”.

    2. Конечный автомат кодового замка на основе индивидуального задания.

    3. Конечный автомат для работы с датчиком освещения.

  7. Архитектура процессора: вид вычислительной установки со стороны программиста. Концепция фон-Нейманновской машины. Использование симулятора процессора на уровне инструкций MARS MIPS.

    1. Введение в ассемблер: команды, операнды, регистры, константы. Арифметические и логические операции. Кодирование инструкций. Простые программы для вычисления выражений.

    2. Условные и безусловные переходы, метки, циклы. Программа вычисляющая числа Фибоначчи.

    3. Концепция адресуемой памяти. Инструкции загрузки и сохранения в память. Конструкции ассемблера для выделения памяти. Программа, заполняющая память вычисленными данными. Индивидуальное упражнение на основе модификации примера.

  8. Микроархитектура: строим процессор.

    1. Реализация на Verilog подмножества архитектуры MIPS с памятью инструкций, с регистрами общего назначения, но без памяти данных. Минимальный набор инструкции, достаточный, чтобы вычислять числа Фибоначчи и целочисленный квадратный корень итеративным способом. Однотактовая микроархитектура. Простейшая среда тестирования с закодированным вручную массивом инструкций.

    2. Больше о процессорах.

  9. Работа над индивидуальным проектом

  10. Сдача индивидуального проекта

Приложение A. Что такое язык описания аппаратуры Verilogи как он связан с проектированием микросхем

Из поста на Geektimes Оруженосцы микроэлектроники. Видеорепортаж с конференции по проектированию электроники в Сан-Франциско.

В последние 25 лет дизайн микросхемы чаще всего пишется на языке описания аппаратуры Verilog (в Европе и у военных — VHDL), после чего специальная программа (logic synthesis) превращает дизайн в граф из проводов и логических примитивов, другая программа (static timing analysis) сообщает дизайнеру, вписывается ли он в бюджет скорости, а третья программа (place-and-route) раскладывает этот дизайн по площадке микросхемы.

Когда дизайн проходит все этапы: кодирование на верилоге, отладка, верификация, синтез, static timing analysis, floorplanning, place-n-route, parasitics extraction и т.д. — получается файл под названием GDSII, который отправляют на фабрику, и фабрика выпекает микросхемы. Самые известные фабрики этого типа принадлежат компании Taiwan Semiconductor Manufacturing Company или TSMC.

Приложение B. Что такое ПЛИС / FPGA и почему изучение ПЛИС нельзя заменить более глубоким изучением Ардуино или Расберри Пай

Из поста на Хабре Как начать разрабатывать железо, используя ПЛИС — пошаговая инструкция:

В самом простом варианте FPGA состоит из матрицы однородных ячеек, в функцию каждой из которых можно поменять с помощью мультиплексоров, подсоединенных к битам конфигурационной памяти. Одна ячейка может стать гейтом AND с четырьмя вводами и одним выводом, другая — однобитным регистром и т.д. Загружаем в конфигурационную память последовательность битов из памяти — и в FPGA образуется заданная электронная схема, которая может быть процессором, контроллером дисплея и т.д.

ПЛИС-ы / FPGA — не процессоры, «программируя» ПЛИС (заполняя конфигурационную память ПЛИС-а) вы создаете электронную схему (хардвер), в то время как при программировании процессора (фиксированного хардвера) вы подсовываете ему цепочку написанных в память последовательных инструкций программы (софтвер).

Внизу — схема простейшего блока FPGA, в который входит look-up table (LUT) и flip-flop. Правда в этой схеме не показаны мультиплексоры, которые меняют функцию ячейки, и соединения с конфигурационной памятью.

Диаграммы, иллюстрирующие структуру FPGA:

И еще одна:

Приложение C. Отрывок из заметки про конференции в Томске про то, как образование школьников в данной области привязано к образованию студентов

Системы на кристалле (system on chip, SoC), проектирование высокоинтегрированных микросхем с гетерогенными IP-блоками (CPU, GPU, DSP) — технологическая основа для многих культурных феноменов современного мира, включая смартфоны и быстрый интернет. Значение этой группы технологий еще больше увеличивается с лавинообразным внедрением в автомобильную промышленность чипов для ADAS (advanced driver-assistance systems) и последующим распостранением самоуправляемых автомобилей.

К сожалению, появление ключевых технологий, на которых базируется проектирование систем на кристалле, в мире по времени пришлось аккурат на период коллапса СССР (конец 1980-х — начало 1990-х годов). Западные университеты довольно быстро внедрили в программу обучения языки описания аппаратуры (hardware description languages — HDL), методологию проектирования на уровне регистровых передач (register transfer level — RTL), маршрут проектирования RTL-to-GDSII, превращающий код на языках Verilog и VHDL в геометрическое представление дорожек и транзисторов на кремнии, а также лабораторные работы с использованием реконфигурируемых микросхем FPGA (field-programmable gate arrays). Все эти технологии были внедрены в России гораздо позже, и сейчас их преподавание сконцентрировано в небольшом количестве топ-университетов, таких как МИЭТ в Зеленограде и ИТМО в Санкт-Петербурге. Игнорируется возможность интеграции концепций HDL и RTL в программы физматшкол, где их можно было бы привязать к математической логике, теории конечных автоматов и электричеству, подобно тому, как обогатило советские школьные программы введение в середине 1980-х годов элементов программирования.

Помимо конференции в Томске и планируемого следующего эксперимента в июле а Новосибирске, который поддерживается Новосибирской Летней Школой Юных Программистов, есть еще ранний план организовывать такой эксперимент в Казахстане (этом в частности заинтересована Венера Жаналина посещавшая киевский семинар).

Приложение D. Примеры простейшего кода на Verilog и порождаемые им схемы

Подробное объяснение работы счетчика — в тексте «Введение в дизайн харвера микросхем для тех программистов, которые этим никогда не занимались».

Если вы преподаватель и хотите принять участие в разработке таких материалов (это все на общественных началах, без связи с той или иной компанией), сообщите мне в комментариях. Также интересна любая критика.

About Юрий Панчул