Цифровая микроэлектроника для математиков и программистов Антон Евгеньевич Моисеев НГТУ им Ростислава Алексеева, Клуб изобретательства и робототехники ДОСААФ Нижегородской области
Как пересечь пропасть от физики к программированию и насолить Алексу Экслеру ● Пост Юрия Панчула от 29 сентября 2011 года, в котором он защищает школьника Степана Большедворского и его наставника от атаки Алекса Экслера, который высмеивал их за фразу «каждый программист будет делать процессор под себя» и за «новый потрясающий способ ввода данных в компьютер — рычажковый»; ● Попутно констатировал, что студенты «айти»-шных специальностей МФТИ имеют крайне туманные представления о том, что происходит в компьютере ниже в лучшем случае команд ассемблера ● И предложил концепт обзорного курса «булева алгебра на макетной плате → свой процессор МИПС, выполняющий ассемблерные программы на плате ПЛИС»
Зачем математикам ПЛИС и Верилог? ● Внезапно оказалось, что цифровые устройства можно проектировать без паяльника и микроскопа ● Математики-программисты гибки умом в области абстракций, концептов, парадигм ● Предпочитают не иметь дел с физикой ● Верилог — еще один язык «программирования» со своими граничными условиями, правилами, заморочками ● ПЛИС — еще одна платформа для воплощения абстракций в реальный мир
За плечами ● ~2 года (не считая школы) матанализа, линейной алгебры, дискретной и другой математики ● Начальный уровень программирования: Си, C++, Java, Matlab и т.п. ● Всё это в процессе знакомства и усвоения, мозг еще не успел закостенеть, легко переключается на новые концепты ● При условии, что они умещаются внутри экрана компьютера
Как пересечь пропасть от физики к программированию ● Студенты специальность Прикладная математика и информатика в НГТУ им Р.Е. Алексеева, ИРИТ ● 2й курс ● 2 потока: весна 2012, 2013 ● + пара малых групп факультативом ● + факультатив для группы студентов- электронщиков ФАЭ (по приглашению Александра Сергеевича Плехова)
Как пересечь пропасть от физики к программированию ● Серия ознакомительных лабораторных работ ● 90% практики ● Каждая лаба — «здравствуй мир» по выбранной теме начального уровня ● Всё, о чем рассказано, далее испробовано
Лабораторная работа 1: сборка простых электронных схем на основе микросхем малой степени интеграции ● Булева алгебра на макетной плате: ● TRUE/FALSE, ● AND, OR, NOT, ● цепочки операторов: NAND=AND+NOT ● Не боимся микросхем: 4 NAND внутри 4011 ● Таймер из 2х NAND и конденсатора ● Семисегментный диодный дисплей
Лабораторная работа 2: знакомство с платой ПЛИС (FPGA) - основы комбинаторной логики ● Запуск среды разработки и создание проекта (Xilinx ISE, Altera Quartus) ● Модуль — структурная единица дизайна Verilog (черный ящик входы-выходы) ● Булевы операторы ● Модуль верхнего уровня, подключение устройств ● Синтез и запуск на ПЛИС ● Знакомство с симуляцией (что она вообще есть)
Лабораторная работа 3: делаем память (защелки и триггеры) ● RS защелка (RS latch) на макетной плате ● RS защелка (RS latch) на ПЛИС+Verilog ● D защелка (D latch) на ПЛИС+Verilog ● D триггер (D flip-flop) на ПЛИС+Verilog ● 0.5 байта (4 бита) из 4х D триггеров на ПЛИС+Verilog
Лабораторная работа 5: делаем процессор MIPS ● Основные элементы архитектуры процессора на примере 32-битного процессора MIPS: память инструкций и счетчик программы, память данных, файл регистров (register file) ● Понятие языка ассемблера и конвертация его в машинный код процессора (практическое упражнение — перевести простую программу на ассемблере в машинный код)
Лабораторная работа 5: делаем процессор MIPS ● Реализация на Верилоге (в основе — однотактовый процессор из Харрис и Харрис в значительной степени переписанный для большей наглядности и запуска на ПЛИС) ● Основные модули дизайна HDL: счетчик программы, файл регистров, память данных, память инструкций ● Шина данных и контроллер: разбор команд (контроллер), выполнение команд (шина данных) ● Команда add, sub, lw, sw, addi, beq, j ● Ядро MIPS и модуль верхнего уровня
Лабораторная работа 5: делаем процессор MIPS ● Подключение устройств ввода-вывода и демо- запуск на ПЛИС ● Видео-память 7мисегментный дисплей v ● Массив из 4х рычажков bs ● Однобитный флаг bsf ● Отображение устройств на адреса в памяти данных ● Подключение устройств в модуле верхнего уровня
Лабораторная работа 5: делаем процессор MIPS ● Тестовые программы ● Проверка "видео-памяти" — выводим цифру 8 ● Проверка "видео-памяти" — выводим цифру 5 ● Проверка ввода (1 бит — порт bsf) и условного перехода beq ● Проверка сохранения слова (sw) и загрузки слова (lw) ● Проверка рычажкового способа ввода данных ● Калькулятор (в процессе поймал дребезг контактов) ● Самостоятельная работа (поток 2): реализовать самостоятельно новую команду архитектуры MIPS
Лабораторная работа 6: знакомство с промышленной реализацией архитектуры MIPS на примере pic32 ● Работа с документацией на контроллер ● Поддерживаемые команды — ассемблер MIPS32 ● Структура памяти: RAM, FLASH, BOOT ● Блок памяти SFR (ввод-вывод): распиновка, работа с портами ввода-вывода через регистры ● Задание 1: зажечь лампочку ассемблером MIPS ● Задание 2: считать значение с ножки ассемблером MIPS ● Задание 3: мигаем лампочкой программой на Си ● Задание 4: считать значение с ножки программой на Си
Выводы по результатам ● Степан Большедворский отмщен: мы — программисты, сделали процессор под себя и вводили в него данные рычажками! ● Всё получилось вместить в один семестр ● Студенты-математики действительно воспринимают Верилог как очередную платформу со своей парадигмой ● Ломка от перехода на Верилог не сильнее, чем при осознании ООП после квикбейсика или функционального программирования после процедурного ● Выражение текстом предпочтительнее визуального
Вскрытые сложности ● Неудачные дизайны сложно отлаживать на ПЛИС (нужно углублять симуляцию, добавлять верификацию) ● Нужно организовать лабораторию, аккуратно хранить железо (провода, макетки, платы) ● Для погружения студентам нужен доступ к оборудованию за пределами занятий, желательно дома ● Лаба с процессором растянулась на несколько занятий и в итоге получилась довольно утомительной ● Курс является довольно поверхностным, для реализации простейших проектов потребуется дополнительное время на изучение литературы, типовых решений, обзор экосистемы модулей (теперь есть учебник Харрис и Харрис)
Размышления ● Полученные навыки нужно применять в дальнейшей программе обучение — новые курсы, персональные проекты, курсовые и дипломные работы ● Подборка типичных косяков (дребезг контактов) ● Хороший программист мыслит не столько парадигмой языка, сколько шаблонами проектирования для оптимальных решений типовых сценариев. Здесь необходимо аналогичный подход ● Необходим обзор библиотек элементарных шаблонных модулей для типовых задач и IP- блоков
Размышления ● Подобрать демо-задачи, на которых проявляется преимущество ПЛИС (критические/краевые условия) ● Что-нибудь модное с математикой: ИИ, распознавание образов ● Роботы, станки с ЧПУ, моторы ● Не циклиться на текущем рынке труда — запускать свои проекты
Факультатив на ФАЭ (автоматика и электроника) ● Вполне внятно представляют, зачем всё это нужно (заменить кучу рассыпухи на один чип) ● Сильная физика ● С абстракциями-парадигмами похуже ● Этап привыкания к среде разработки ● Скорее всего графическое представление пойдет лучше текстового ● Интересуют и ПЛИС и контроллеры
Автомобилисты ● Хорошо с физикой (могут спроектировать схему силового привода до контактов контроллера) ● Способны реализовать простые вещи на Си/С++ ● Сложнее - сложнее ● Платформа: C++, ChipKIT (Arduino) ● Верилог даже не пробовали ● Ультра-простота среды Ардуино здесь в плюс
● Материалы курса выложены в виде серии постов в ЖЖ, за это время на отдельных страницах накопилось до ~3000 просмотров ● Регулярные ежедневные заходы на разные страницы курса (3-8 в день) продолжаются до сих пор (не знаю, живые люди или боты) ● Преподавание в НГТУ по этой линии до поры заморожено
● 3Д-моделирование и 3Д-печать (OpenSCAD и любой 3Д-принтер) ● 2Д-моделирование и изготовление плоских деталей (Inkscape и лазерная резка пластика) ● Программирование микроконтроллеров — моторчики и датчики (ChipKIT/Arduino)
Дальше ● Азы программирования: езда по линии, вышибание банок ● Литье эластичных покрышек из силикона в пластиковые формы, распечатанные на 3Д- принтере ● ...