Антон Моисеев, преподаватель Нижегородского государственного технического университета (НГТУ) им. Р.Е. Алексеева закончил чрезвычайно полезный экспресс-курс, который позволяет чистым физикам или чистым программистам (а также всем желающим) получить представление, что именно находится между миром электронов и миром программ на языке высокого уровня. Логические элементы и триггеры, ПЛИСы, конечные автоматы, простой процессор, ассемблер и микроконтроллеры - полный букет основ системного (hardware+software) мышления. Теперь остается распостранить это пошире - и российские старшие школьники и младшие студенты получат конкурентное преимущество перед школьниками и студентами тех стран, где данные дисциплины учатся раздельно.
Тем, кто говорит "это мы все знаем" я должен заметить, что я в прошлом году видел разные учеьные пособия в России и Украине, где есть logic design и микроконтроллеры, но нет микроархитектуры и HDLs. Или есть архитектура и микроархитектура, но нет HDLs и привязки к микроконтрллерам. И т.д.
Вот снимок из нашей встречи в Нижнем Новгороде в прошлом году:
Originally posted by
1i7 at
Как пересечь пропасть от физики к программированиюКак пересечь пропасть от физики к программированию за 6 лабораторных работ - от мигающих лампочек на макетной плате через собственную реализацию процессора MIPS на ПЛИС до промышленной реализации MIPS в виде контроллера PIC32.
Курс окончен. Точнее, сам курс был готов еще в конце весны 2012го года, но отчеты осилил дописать только сейчас. С тех пор его прослушало 3 группы прикладных математиков и 1 одна группа автоматики и электромеханики в Нижегородском государственном техническом университете (НГТУ) им. Р.Е. Алексеева.
По результату оказалось, что текста получилось как-то много, но сами лабораторные работы действительно простые и их действительно можно легко пройти за 6-8 трехчасовых занятий вместе со всеми практическими частями. Также текст отчетов снабжен картинками и видеороликами так, чтобы для наблюдения и понимания результатов было не обязательно повторять все действия самостоятельно дома.
![](http://img-fotki.yandex.ru/get/6727/161653612.72/0_de081_b3c297fa_L.jpg)
Оглавление
0. Введение
http://1i7.livejournal.com/515.htmlКак пересечь пропасть от физики к программированию (0)
http://1i7.livejournal.com/1267.htmlВведение (в весь курс вообще и в 1ю лабораторную работу в частности)
1. Подготовка к лабораторным работам с макетными платами и проводами
1.1. Подбор реквизита
http://1i7.livejournal.com/940.html 2. Лабораторная работа 1: сборка простых электронных схем на основе микросхем малой степени интеграции
http://1i7.livejournal.com/1471.html2.1. Главные детали - макетная плата, диоды и светодиоды
2.2. Определение булевых значений TRUE/FALSE на выбранном участке цепи - светодиод в качестве индикатора текущего значения
2.3. Таблица истинности и оператор OR
2.4. Оператор AND
2.5. Оператор NOT и транзистор
2.6. Объединение логических элементов в логическую цепь - оператор NAND как AND+NOT
2.7. Знакомство с модулями цифровой логики - 4 оператора NAND внутри модуля 4011
2.8. Таймер из двух элементов NAND и конденсатора
2.9. Устройство вывода - семисегментный диодный дисплей
2.10. Заключение
3. Подготовка к лабораторным работам с ПЛИС
3.1. Выбор оборудования, литературы и программного обеспечения
http://1i7.livejournal.com/1927.html (1)
3.1.1. Подобрать подходящую плату ПЛИС (FPGA)
3.1.2. Подобрать литературу
3.1.3. Verilog против VHDL
3.1.4. Подобрать и установить необходимое программное обеспечение
3.2. Установка Xilinx ISE WebPack и Digilent Adept2
http://1i7.livejournal.com/2271.html (2)
3.2.1. Установка Xilinx ISE WebPack
3.2.2. Установка Digilent Adept 2 Linux
3.2.3. Проверка работоспособности инструментов Digilent Adept 2 с платой Digilent Basys2
4. Лабораторная работа 2: знакомство с платой ПЛИС (FPGA) - основы комбинаторной логики
http://1i7.livejournal.com/2414.html (1)
4.1. Запуск среды разработки и создание проекта для платы Digilent Basys 2
4.2. Создать файл с исходным кодом на Verilog - пустой модуль
4.3. Структурная единица дизайна на Verilog - модуль как черный ящик со входами и выходами
4.4. Базовые булевы операторы
4.5. Синтез (synthesis) для ПЛИС (FPGA)
4.5.1. Подключение ucf-файла с описанием структуры платы ПЛИС
4.5.2. Создание модуля верхнего уровня для манипуляции реальными устройствами ввода/вывода платы ПЛИС
4.5.3. Синтез прошивки
4.6. Знакомство с симуляцией (simulation)
http://1i7.livejournal.com/2647.html (2)
4.7. Самостоятельная работа - драйвер для семисегментного диодного дисплея
5. Лабораторная работа 3: делаем память (защелки и триггеры)
http://1i7.livejournal.com/6295.html (1)
5.1. RS защелка (RS latch) на макетной плате
5.2. RS защелка (RS latch) на ПЛИС+Verilog
http://1i7.livejournal.com/6473.html (2)
5.3. D защелка (D latch) на ПЛИС+Verilog
5.4. D триггер (D flip-flop) на ПЛИС+Verilog
5.5. 0.5 байта (4 бита) из 4х D триггеров на ПЛИС+Verilog
5.6. Заключение
6. Лабораторная работа 4: простые конечные автоматы
http://1i7.livejournal.com/7503.html (1)
6.1. Разделение частоты тактового сигнала
http://1i7.livejournal.com/7749.html (2)
6.2. Знакомство с конечными автоматами - светофор
6.3. Самостоятельная работа - сделать робота, управляемого простым конечным автоматом
7. Лабораторная работа 5: делаем процессор MIPS
http://1i7.livejournal.com/8270.html (1)
7.1. Основные элементы архитектуры процессора на примере 32хбитного процессора MIPS
7.1.1. Память инструкций и счетчик программы
7.1.2. Память данных
7.1.3. Файл регистров (register file)
7.2. Понятие языка ассемблера и конвертация его в машинный код процессора
7.2.1. Переходим к командам ассемблера
7.2.1.1. Команды типа R-type (register type)
7.2.1.2. Команды типа I-type (immediate type)
7.2.1.3. Команды типа J-type (jump type)
7.2.2. Практическое упражнение - перевести простую программу на ассемблере в машинный код
7.2.3. Ввод-вывод
http://1i7.livejournal.com/10468.html (2)
7.3. Основные модули дизайна HDL
7.3.1. Счетчик программы
7.3.2. Файл регистров
7.3.3. Память данных
7.3.4. Память инструкций
http://1i7.livejournal.com/10806.html (3)
7.4. Шина данных и контроллер
7.4.1. Параметры
7.4.2. Счетчик инструкций и память инструкций
7.4.3. Файл регистров
7.4.4. Разбор команд (контроллер)
7.4.5. Выполнение команд (шина данных)
http://1i7.livejournal.com/11103.html (4)
7.4.5.1. Команда add
7.4.5.2. Команда sub
7.4.5.3. Команда lw
7.4.5.4. Команда sw
7.4.5.5. Команда addi
7.4.5.6. Команда beq
7.4.5.7. Команда j
7.5. Ядро MIPS и модуль верхнего уровня
7.5.1. Ядро MIPS
7.5.2. Модуль верхнего уровня
http://1i7.livejournal.com/11333.html (5)
7.6. Подключение устройств ввода-вывода и демо-запуск на ПЛИС
7.6.1. Видео-память 7мисегментный дисплей v
7.6.2. Массив из 4х рычажков bs
7.6.3. Однобитный флаг bsf
7.6.4. Дополняем модуль Память данных
7.6.5. Дополняем модуль верхнего уровня
http://1i7.livejournal.com/11571.html (6)
7.7. Тестовые программы
7.7.1. Проверка "видео-памяти" - выводим цифру 8
7.7.2. Проверка "видео-памяти" - выводим цифру 5
7.7.3. Проверка ввода (1 бит - порт bsf) и условного перехода beq
7.7.4. Проверка сохранения слова (sw) и загрузки слова (lw)
7.7.5. Проверка рычажкового способа ввода данных
7.7.6. Калькулятор
7.8. Лаба окончена
8. Подготовка к лабораторным работам с промышленной реализацией архитектуры MIPS на примере pic32
http://1i7.livejournal.com/12327.html8.1. Литература
8.2. Оборудование
8.2.1. ChipKIT Uno32
8.2.2. ChipKIT Max32
8.2.3. ChipKIT uC32
8.2.4. Olimex DuinoMite
8.3. Программное обеспечение
8.3.1. Редактор кода
8.3.2. Компилятор Си и транслятор ассемблера в машинный код
8.3.3. Сборка прошивки
8.3.4. Программатор
8.3.5. Подключение платы (для прошивки с avrdude)
8.4. Дополнительно
8.4.1. GDB
8.4.2. MPLAB X
8.4.3. Коммерческие компиляторы от Microchip
8.4.4. PICkit3
9. Лабораторная работа 6: знакомство с промышленной реализацией архитектуры MIPS на примере pic32
http://1i7.livejournal.com/15095.html (1)
9.1. Дополнительно документация
9.2. Поддерживаемые команды - ассемблер MIPS32
http://1i7.livejournal.com/15209.html (2)
9.3. Структура памяти
9.3.1. Как делали мы
9.3.1. Как сделано в PIC32
9.4. Блок памяти RAM
9.5. Блок памяти FLASH
9.6. Блок памяти BOOT
http://1i7.livejournal.com/15637.html (3)
9.7. Блок памяти SFR (ввод-вывод)
9.7.1. Распиновка
9.7.2. Работа с портами ввода-вывода через регистры
http://1i7.livejournal.com/17042.html (4)
9.8. Примеры
9.8.1. Задание 1 - зажечь лампочку ассемблером MIPS
9.8.2. Задание 2 - считать значение с ножки ассемблером MIPS
http://1i7.livejournal.com/17301.html (5)
9.8.3. Задание 3 - мигаем лампочкой программой на Си
9.8.4. Задание 4: считать значение с ножки программой на Си
Также для удобства pdf-файлы с этими же материалами
(пока просто копии веб-страниц с нехорошей версткой):
лаба1:
http://ubuntuone.com/1KqPjHONW8ezOZf6gVGEdJлаба2:
http://ubuntuone.com/11MUJHeyJLXFTBn4z31z4gлаба3:
http://ubuntuone.com/0lJiyuKOftcamSQkOJUGQaлаба4:
http://ubuntuone.com/1XJunJYj7aP4VobVqGuvPDлаба5:
http://ubuntuone.com/0uZS9jsVMHKELL6d1bCST9 Занимательное чтиво по мотивам
Концепт курса и вводная информация:
первый пост у Юрия Панчула:
Как пересечь пропасть от физики к программированию и насолить Алексу Экслерурепост у Аммосова:
Электронная логикаСтатья Юрия Панчула в газете "Троицкий вариант":
"Между программированием и физикой", 06 декабря 2011 года. ТрВ № 93, c. 7, "Образование" (
pdf).
Объявление о начале:
Как пересечь пропасть от физики к программированию (0)репост у Аммосова:
Аппаратное программирование в НГТУрепост у Панчула:
Товарищи в Нижегородском государственном техническом университете воплощают в реал обсуждение в ЖЖ Обсуждение 1й лабораторной работы с мигающими лампочками:
Вакуленко:
Цифровая электроника для программистовАммосов:
Железячные лабыУжас Совка:
Да или Нет? (к сожалению журнал Ужаса уже удален и пост не сохранился даже в кеше яндекса)
Панчул:
А Ужас Совка Против! Цифровые микроэлектронные биороботы на Верилоге:
Пост:
Цифровые микроэлектронные биороботы на ВерилогеПанчул:
Молодые люди, которым есть что показать помимо "открытых человеческих лиц"Статья в Московском Комсомольце:
Детям предложат поиграть в тараканов,
ОккупайМК!,
О нашей затее с преподаванием FPGA и микроконтроллеров написали в "Московском Комсомольце"Ролик на СетиНН:
Цифровые микроэлектронные биороботы на СетиНН,
От телепередачи до матрицы Разное у Юрия Панчула:
Репост c 1i7: Автоматизация проектирования электроники Репост c 1i7: Подготовка к лабам на FPGA Подготовка к лабораторным работам с ПЛИС (2) или как я занимался сексуальным харазментом Написал примерчик на верилоге для начинающих - стековый калькулятор Почему одни культуры уважаемы, а другие нет? Google и Philips поддерживают архитектуру MIPS, а в Нижнем Новгороде студенты собирают роботов С Днем Победы! В XXI веке противником России будет не Германия В чем разница между "креативным классом" и "людьми, создающими новое"? Шоппинг-лист для курса "Знакомство с цифровой микроэлектроникой для математиков и программистов" За то, что я рекомендую российским студентам, американские полицаи арестовуют с пистолетом Написал примерчик на верилоге для начинающих - стековый калькулятор Дополнительное полезное:
Лабораторная работа по программированию на голом железе у Сергея Вакуленко:
Часть 5. Программирование на голом железе и зачатие операционной системы Теперь еще пара картинок с новыми платками, которые можно использовать в курсе:
Обещанная мне лично в реале диджилентовцами платка WF-32 c Microchip PIC32MX (на основе MIPS M4K) и WiFi наконец готова. Это полезно под соусом The Internet of Things:
![](http://www.digilentinc.com/Data/Products/CHIPKIT-WF32/chipKIT_WF32-obl-600.png)
В следущем году должна выйти и платка с PIC32MZ (на основе MIPS microAptiv UP) с относительно большими кэшами, TLB MMU и DSP extensions. С ней курс Антона можно расширить: рассказать о работе с кэшами, задизайнить кэш в FPGA плате и сравнить студенческий кэш с кэшем в PIC32MZ.
Вот еще недорогая новая плата с ПЛИС / FPGA Cyclone V, похожая на более раннюю плату Altera DE1:
![](http://www.terasic.com.tw/attachment/archive/830/image/image_50_thumb.jpg)
Немного дороговатая для младших студентов, но интересная платка с ПЛИС / FPGA Xilinx Spartan-6:
![](http://www.digilentinc.com/Data/Products/ANVYL/ANVYL-obl-600.jpg)
Антон еще собирается поехать на Microchip Masters Russia в Зеленогорске под Санкт-Петербургом. Я тоже буду там, если мне наконец-то прийдет российская виза. Если к нам желает кто-нибудь присоединиться, сообщаю мое примерное расписание. Это даже скорее набросок, а не расписание, тем не менее:
20 октября - прилет в Москву, неформальное тусование
21 октября - презентации
22 октября - презентации. Вечером на поезде "Красная Стрела" или подобном еду в Санкт-Петербург
23 октября - презентации. Вечером еду в Зеленогорск.
24 октября - Microchip Masters в Зеленогорске
25 октября - Microchip Masters в Зеленогорске
26 октября - тусуюсь в Санкт-Петербурге. Вечером на поезде "Красная Стрела" или подобном еду в Москву.
27 октября - тусуюсь в Москве
28 октября - презентации
29 октября - презентации. Вечером - прощание с
radulova (если ее удастся сооблазнить по дороге)
30 октября - с утра, после бессонной ночи, возвращение в Калифорнию
Зарегистрироваться на Microchip Masters Russia:
http://www.microchip.com.ru/Support/Masters.htmlhttp://www.microchip.com.ru/register/reg2013.php ![](http://ic.pics.livejournal.com/panchul/7185727/194377/194377_original.png)
Poll