$30 off During Our Annual Pro Sale. View Details »

Цифровая микроэлектроника для математиков и программистов

Anton
September 22, 2017

Цифровая микроэлектроника для математиков и программистов

Как пересечь пропасть от физики к программированию и начать делать своих роботов

Anton

September 22, 2017
Tweet

More Decks by Anton

Other Decks in Education

Transcript

  1. Цифровая микроэлектроника для
    математиков и программистов
    Антон Евгеньевич Моисеев
    НГТУ им Ростислава Алексеева,
    Клуб изобретательства и робототехники ДОСААФ Нижегородской области

    View Slide

  2. Rb: «Как мы научили беженцев кодить и
    помогли найти работу программистом»

    View Slide

  3. TLDR: новых пузырей в IT не светит

    View Slide

  4. Как пересечь пропасть от физики к
    программированию и насолить Алексу Экслеру

    Пост Юрия Панчула от 29 сентября 2011 года, в котором он
    защищает школьника Степана Большедворского и его наставника
    от атаки Алекса Экслера, который высмеивал их за фразу
    «каждый программист будет делать процессор под себя» и
    за «новый потрясающий способ ввода данных в компьютер —
    рычажковый»;

    Попутно констатировал, что студенты «айти»-шных
    специальностей МФТИ имеют крайне туманные представления о
    том, что происходит в компьютере ниже в лучшем случае команд
    ассемблера

    И предложил концепт обзорного курса «булева алгебра на
    макетной плате → свой процессор МИПС, выполняющий
    ассемблерные программы на плате ПЛИС»

    View Slide

  5. Зачем математикам ПЛИС и Верилог?

    Внезапно оказалось, что цифровые устройства можно
    проектировать без паяльника и микроскопа

    Математики-программисты гибки умом в области
    абстракций, концептов, парадигм

    Предпочитают не иметь дел с физикой

    Верилог — еще один язык «программирования» со
    своими граничными условиями, правилами,
    заморочками

    ПЛИС — еще одна платформа для воплощения
    абстракций в реальный мир

    View Slide

  6. За плечами

    ~2 года (не считая школы) матанализа, линейной
    алгебры, дискретной и другой математики

    Начальный уровень программирования: Си, C++,
    Java, Matlab и т.п.

    Всё это в процессе знакомства и усвоения, мозг
    еще не успел закостенеть, легко переключается
    на новые концепты

    При условии, что они умещаются внутри экрана
    компьютера

    View Slide

  7. Как пересечь пропасть от физики
    к программированию

    Студенты специальность Прикладная
    математика и информатика в НГТУ им Р.Е.
    Алексеева, ИРИТ

    2й курс

    2 потока: весна 2012, 2013

    + пара малых групп факультативом

    + факультатив для группы студентов-
    электронщиков ФАЭ (по приглашению
    Александра Сергеевича Плехова)

    View Slide

  8. Как пересечь пропасть от физики
    к программированию

    Серия ознакомительных лабораторных работ

    90% практики

    Каждая лаба — «здравствуй мир» по
    выбранной теме начального уровня

    Всё, о чем рассказано, далее испробовано

    View Slide

  9. Лабораторная работа 1:
    сборка простых электронных схем на основе
    микросхем малой степени интеграции

    Булева алгебра на макетной плате:

    TRUE/FALSE,

    AND, OR, NOT,

    цепочки операторов: NAND=AND+NOT

    Не боимся микросхем: 4 NAND внутри 4011

    Таймер из 2х NAND и конденсатора

    Семисегментный диодный дисплей

    View Slide

  10. View Slide

  11. Лабораторная работа 2:
    знакомство с платой ПЛИС (FPGA) -
    основы комбинаторной логики

    Запуск среды разработки и создание проекта
    (Xilinx ISE, Altera Quartus)

    Модуль — структурная единица дизайна Verilog
    (черный ящик входы-выходы)

    Булевы операторы

    Модуль верхнего уровня, подключение устройств

    Синтез и запуск на ПЛИС

    Знакомство с симуляцией (что она вообще есть)

    View Slide

  12. Лабораторная работа 3: делаем
    память (защелки и триггеры)

    RS защелка (RS latch) на макетной плате

    RS защелка (RS latch) на ПЛИС+Verilog

    D защелка (D latch) на ПЛИС+Verilog

    D триггер (D flip-flop) на ПЛИС+Verilog

    0.5 байта (4 бита) из 4х D триггеров на
    ПЛИС+Verilog

    View Slide

  13. Лабораторная работа 4: простые
    конечные автоматы

    Разделение частоты тактового сигнала

    Знакомство с конечными автоматами —
    светофор

    Самостоятельная работа — сделать робота,
    управляемого простым конечным автоматом

    View Slide

  14. View Slide

  15. View Slide

  16. View Slide

  17. View Slide

  18. Цифровые микроэлектронные биороботы на Верилоге

    View Slide

  19. Лабораторная работа 5:
    делаем процессор MIPS

    Основные элементы архитектуры процессора
    на примере 32-битного процессора MIPS:
    память инструкций и счетчик программы,
    память данных, файл регистров (register file)

    Понятие языка ассемблера и конвертация его
    в машинный код процессора (практическое
    упражнение — перевести простую программу
    на ассемблере в машинный код)

    View Slide

  20. Лабораторная работа 5:
    делаем процессор MIPS

    Реализация на Верилоге (в основе — однотактовый
    процессор из Харрис и Харрис в значительной степени
    переписанный для большей наглядности и запуска на
    ПЛИС)

    Основные модули дизайна HDL: счетчик программы,
    файл регистров, память данных, память инструкций

    Шина данных и контроллер: разбор команд
    (контроллер), выполнение команд (шина данных)

    Команда add, sub, lw, sw, addi, beq, j

    Ядро MIPS и модуль верхнего уровня

    View Slide

  21. Лабораторная работа 5:
    делаем процессор MIPS

    Подключение устройств ввода-вывода и демо-
    запуск на ПЛИС

    Видео-память 7мисегментный дисплей v

    Массив из 4х рычажков bs

    Однобитный флаг bsf

    Отображение устройств на адреса в памяти
    данных

    Подключение устройств в модуле верхнего уровня

    View Slide

  22. Лабораторная работа 5:
    делаем процессор MIPS

    Тестовые программы

    Проверка "видео-памяти" — выводим цифру 8

    Проверка "видео-памяти" — выводим цифру 5

    Проверка ввода (1 бит — порт bsf) и условного перехода beq

    Проверка сохранения слова (sw) и загрузки слова (lw)

    Проверка рычажкового способа ввода данных

    Калькулятор (в процессе поймал дребезг контактов)

    Самостоятельная работа (поток 2): реализовать
    самостоятельно новую команду архитектуры MIPS

    View Slide

  23. Лабораторная работа 6: знакомство с
    промышленной реализацией архитектуры
    MIPS на примере pic32

    Работа с документацией на контроллер

    Поддерживаемые команды — ассемблер MIPS32

    Структура памяти: RAM, FLASH, BOOT

    Блок памяти SFR (ввод-вывод): распиновка, работа с
    портами ввода-вывода через регистры

    Задание 1: зажечь лампочку ассемблером MIPS

    Задание 2: считать значение с ножки ассемблером MIPS

    Задание 3: мигаем лампочкой программой на Си

    Задание 4: считать значение с ножки программой на Си

    View Slide

  24. Выводы по результатам

    Степан Большедворский отмщен: мы —
    программисты, сделали процессор под себя и
    вводили в него данные рычажками!

    Всё получилось вместить в один семестр

    Студенты-математики действительно воспринимают
    Верилог как очередную платформу со своей
    парадигмой

    Ломка от перехода на Верилог не сильнее, чем при
    осознании ООП после квикбейсика или
    функционального программирования после
    процедурного

    Выражение текстом предпочтительнее визуального

    View Slide

  25. Вскрытые сложности

    Неудачные дизайны сложно отлаживать на ПЛИС
    (нужно углублять симуляцию, добавлять верификацию)

    Нужно организовать лабораторию, аккуратно хранить
    железо (провода, макетки, платы)

    Для погружения студентам нужен доступ к
    оборудованию за пределами занятий, желательно дома

    Лаба с процессором растянулась на несколько занятий
    и в итоге получилась довольно утомительной

    Курс является довольно поверхностным, для
    реализации простейших проектов потребуется
    дополнительное время на изучение литературы,
    типовых решений, обзор экосистемы модулей (теперь
    есть учебник Харрис и Харрис)

    View Slide

  26. Размышления

    Полученные навыки нужно применять в
    дальнейшей программе обучение — новые
    курсы, персональные проекты, курсовые и
    дипломные работы

    Подборка типичных косяков (дребезг контактов)

    Хороший программист мыслит не столько
    парадигмой языка, сколько шаблонами
    проектирования для оптимальных решений
    типовых сценариев. Здесь необходимо
    аналогичный подход

    Необходим обзор библиотек элементарных
    шаблонных модулей для типовых задач и IP-
    блоков

    View Slide

  27. Размышления

    Подобрать демо-задачи, на которых
    проявляется преимущество ПЛИС
    (критические/краевые условия)

    Что-нибудь модное с математикой: ИИ,
    распознавание образов

    Роботы, станки с ЧПУ, моторы

    Не циклиться на текущем рынке труда —
    запускать свои проекты

    View Slide

  28. Прикладная математика + автомибилисты: БМН
    (пример хорошего проекта, без моего участия)

    View Slide

  29. Факультатив на ФАЭ
    (автоматика и электроника)

    Вполне внятно представляют, зачем всё это
    нужно (заменить кучу рассыпухи на один чип)

    Сильная физика

    С абстракциями-парадигмами похуже

    Этап привыкания к среде разработки

    Скорее всего графическое представление
    пойдет лучше текстового

    Интересуют и ПЛИС и контроллеры

    View Slide

  30. Автомобилисты

    Хорошо с физикой (могут спроектировать
    схему силового привода до контактов
    контроллера)

    Способны реализовать простые вещи на
    Си/С++

    Сложнее - сложнее

    Платформа: C++, ChipKIT (Arduino)

    Верилог даже не пробовали

    Ультра-простота среды Ардуино здесь в плюс

    View Slide


  31. Материалы курса выложены в виде серии
    постов в ЖЖ, за это время на отдельных
    страницах накопилось до ~3000 просмотров

    Регулярные ежедневные заходы на разные
    страницы курса (3-8 в день) продолжаются
    до сих пор (не знаю, живые люди или боты)

    Преподавание в НГТУ по этой линии до поры
    заморожено

    View Slide

  32. Клуб изобретательства и
    робототехники ДОСААФ

    View Slide

  33. Вводный курс,
    азы микроэлектроники,
    робототехники и персонального
    цифрового производства:
    законченное устройство на
    ресурсах мастерской

    View Slide

  34. View Slide


  35. 3Д-моделирование и 3Д-печать (OpenSCAD
    и любой 3Д-принтер)

    2Д-моделирование и изготовление плоских
    деталей (Inkscape и лазерная резка
    пластика)

    Программирование микроконтроллеров —
    моторчики и датчики (ChipKIT/Arduino)

    View Slide

  36. 3Д-моделирование и 3Д-принтер

    View Slide

  37. View Slide

  38. 2Д-моделирование и плоские детали

    View Slide

  39. View Slide

  40. View Slide

  41. Микроконтроллер, моторчики и датчики

    View Slide

  42. View Slide

  43. View Slide


  44. Моделирование корпуса робота-машинки в
    OpenSCAD и Inkscape

    Цифровое производство деталей, покупка
    компонентов, сборка готовой модели

    View Slide

  45. View Slide

  46. Дальше

    Азы программирования: езда по линии,
    вышибание банок

    Литье эластичных покрышек из силикона в
    пластиковые формы, распечатанные на 3Д-
    принтере

    ...

    View Slide

  47. Линия

    View Slide

  48. View Slide

  49. View Slide

  50. Проекты — игрушечные роботы и
    настольные станки с ЧПУ

    View Slide

  51. View Slide

  52. View Slide

  53. View Slide

  54. View Slide

  55. View Slide

  56. View Slide

  57. View Slide

  58. View Slide

  59. View Slide

  60. View Slide

  61. 1i7.livejournal.com
    Антон Моисеев

    View Slide