
Продолжаем хроники занятий со школьниками на Verilog Meetup в Hacker Dojo. Цель занятий - собрать за месяц несколько демонстраций и показать их на городском мероприятии Technology Showcase в Mountain View. Для тех кто не в курсе, Маунтин-Вью - это такой город, в котором я однажды увидел на улице Сергея Брина, выходящего из-за угла с озабоченным лицом.
Как я уже писал, на первое занятие, на которое я ожидал придет человека три - пришло двадцать, и их не было никакой возможности обслужить. На второе занятие пришло десять: трое русских мальчиков с предыдущего занятия, трое новых русских мальчиков и девочка, китайский мальчик и их родители. Также зашел соратник Виктор и один товарищ на пять минут посмотреть. Под конец зашел американец, который советуется со мной по поводу FPGA. Он раньше работал в NASA JPL в Пасадене и похвастался мне что снимки его трансляций с Марса до сих лежат на сайте Института космических исследований Российской академии наук.
В процессе дискуссии возникли три возможных проекта:
1). Девочке стало интересно, как из логических элементов, в частности XOR, строится сумматор. Я объяснил идею полусумматора однобитных чисел с переносом (XOR для суммы, AND для переноса), сказал что из цепочки таких блоков можно построить каскадный (ripple carry) сумматор, а потом оптимизировать его в виде carry-lookahead adder, сумматора с ускоренным переносом. А также сказал что сумматоров есть десятки типов, и есть люди, которым платят за создание арифметических блоков зарплату всю жизнь. Мы может построить на микросхемах малой степени интеграции и потом в FPGA и ASIC (TinyTapeout) следующее:
Полусумматор на микросхемах CMOS 4070 (2-input XOR) и 4081 (2-input AND).
Полный однобитный сумматор с переносом, тоже из базовых логических элементов.
2-битный сумматор с переносом из (1) и (2).
4-битный сумматор на микросхеме CMOS 4008.
Каскад из двух CMOS 4008 для сложения восьмибитных чисел.
Демонстрацию побитового сложения с помощью последовательностного сумматора CMOS 4032 и сдвиговых регистров.
Я использовал вопрос (6) на верилоге для собеседований студентов на интерншип и обнаружил что есть индивидуалы, которые не могут написать его сходу после 4 или 6 лет в вузе (Чем они там занимаются? Впрочем это тема другого поста).
Ниже скриншот полного сумматора из учебника Dally и Harting, который используют в Стенфорде.

2). Одному мальчику стало интересно, как хардвером на FPGA можно распознать звуки (ноты и песни). Я объяснил, что можно:
Принимать уровень звука с помощью MEMS-микрофона INMP411 по протоколу I2S.
Для чистых нот из инструмента типа флейты звук образует достаточно хорошую синусоиду, период которой можно определять, включая счетчик когда синусоида пересекает ноль.
Тут мальчик спросил меня “но ведь на гитаре же так не получится”, на что я ответил “да, для аккордов на гитаре нужно преобразование Фурье, и это уже вузовская, а не школьная математика”.Когда ноты распознаны, для распознавания песен можно использовать конечный автомат, что я могу продемонстрировать.

Тут мальчик сказал что ему вообще больше интересны длины волн не звуков, а световых лучей. “То есть цвет”, сказал я. Хорошо, вот и проект - я принесу две камеры и за месяц можно сделать следующие демо:
Уровень освещенности с помощью FPGA и датчика PmodALS с протоколом SPI.
TangNano 4K и/или 9K с камерой OV2640.
Какая-нибудь альтеровская FPGA плата с камерой OV7670.
Когда есть цвет, из него можно сгенерить что-нибудь еще, например музыку.

Еще один мальчик начал на митапе собирать на макетной плате схему с процессором Z80, который он принес сам. Я сообщил что тоже работал с Z80 на Новосибирской Летней Школе Юных программистов в возрасте 15 лет в 1986 году, где сделал переключение контекстов по прерыванию от таймера, короче многозадачность на ПЭВМ MSX Yamaha. Я также знаком с создателем Z80 Федерико Фаджином, который был одним из инвесторов в мой стартап в 2000 году. Короче на эту тему есть следущие мысли:
Показать на Technology Showcase собранный таким образом Z80. Кстати если бы было больше времени, можно было бы интегрировать с Z80 видеопроцессор TMS9918 и запустить на нем игру Knightmare.
У меня в 1987 году был конфликт по поводу этой игры с гопниками в киевском микрорайоне Теремки. Они хотели играть в нее в подшефной школе Института Кибернетики, а я закрыл комнату с Ямахами. Так они потом собрались меня побить как в сериале “Слово пацана”, а я их заболтал, дошел с ними до остановки, вбежал в автобус Икарус, двери закрылись и пацаны остались ни с чем.Показать на FPGA работу процессора Y80, синтетического процессора на верилоге, совместимого с Z80. Этот процессор создал бывший сотрудник Zilog по имени Монте, который сейчас пенсионерствует в городе Ливермор, где с ним можно встретится и сходить на ланч. Монте онписал его в книжке Microprocessor Design Using Verilog HDL by Monte Dalrymple, и я давно ищу кого-нибудь, кто бы интегрировал этот процессор в инфраструктуру образовательных примеров в Basic Graphics Music ( https://github.com/yuri-panchul/basics-graphics-music ), который используется в ~30 университетах.
Узнать у юноши, не хочет ли он сделать проект по RISC-V, с прерываниями, многозадачностью, демонстрацией конвейера итд. Это тоже нужно для Basics-Graphics-Music.


Короче пока мы обсуждали все эти проекты, сидящий в углу китайский юноша собрал на макетной плате двоичный счетчик и я всем его показал. Вот чего не хватало на первом занятии!

Следующее заседание пройдет в воскресенье с 11.00 до 14.00 в Hacker Dojo, 855 Maude Ave, Mountain View, California. См. https://verilog-meetup.com/ для дополнительной информации.
Комментарии (18)

Chetverovod
02.07.2026 20:45В список устройств я бы еще добавил реализацию схемы RC-генератора на логических CMOS-вентилях и схему линейного усилителя на них же. А вот еще на D-триггере формирователь импульсов.

YuriPanchul Автор
02.07.2026 20:45Мой личный выбор задач для школьников идет от сохи, то есть от моей личной ситуации на работе. Я прооектировщих блока GPU в чипах в телефонах Самсунг. При это я front-end RTL (register transfer level) designer. То есть D-триггеры я вижу - их в моем блоке сотни тысяч, а вот то что вы описываете вокруг меня нет. Я не занят ни ASIC library design, ни analog-mixed signal. Более того, я подозреваю что чтобы объяснить это по-человечески, нужны дифуры. А если объяснять на пальцах - то это просто отвлечение школьника от моего маршрута: логические элементы + D-триггеры -> System Verilog + Register Transer Level -> микроархитектура простейших процессоров.

SIISII
02.07.2026 20:45Ну, мне удавалось объяснить работу мультивибратора на двух транзисторах "на пальцах", без всяких дифуров. Постепенный заряд/разряд конденсатора вполне понимабелен, тем более, что легко придумывается "гидравлический" аналог и конденсаторов, и резисторов.

misha_erementchouk
02.07.2026 20:45По собственному опыту могу сказать, что объяснения на пальцах - вещь неоднозначная. Мне несколько раз пытались объяснить кольцевые генераторы на пальцах, у меня каждый раз возникало ощущение недоговаривания и попыток надурить. В итоге перешел в режим вежливого игнорирования (добавляло то, что они мне нужны в чудаковатых режимах работы). Потом сел с диффурами, все оказалось несложно, понятно и даже красиво.
В качестве примера побочки от рассказа на пальцах. В русской Википедии пишут
Один инвертирующий каскад с линией задержки (Фиг. 1) в связи вход-выход, однако, способен к генерации.
Есть сомнения в справедливости этого утверждения.

Chetverovod
02.07.2026 20:45Нет, все верно. Если величина задержки и коэфициент усиления будут достаточные, то возникнут автоколебания.

misha_erementchouk
02.07.2026 20:45Без контекста чушь с моей стороны получилась. То-то когда копировал подумал, что слова не совсем те. Была дискуссия, где коэффициент усиления потерялся и из внутренних времен только время задержки в инвертере осталось. Условно говоря, предел больших времен задержек. Дискуссия давно закрылась, а закладка с Википедией осталась. Что хотелось сказать это то, что на одних пальцах переходы между разными режимами тяжело понять. Собственно от дифуров там не так уж и много, но вообще без формул тяжело.

SIISII
02.07.2026 20:45Именно на таком каскаде (инвертор + линия задержки) построены тактовые генераторы некоторых советских вычислительных машин, в частности, ЕС-1020 и ЕС-1030. В роли линии задержки там был длиннющий кусок коаксиального кабеля.

misha_erementchouk
02.07.2026 20:45Это хорошие примеры. Вашу статью на Хабре про ЕС-1020 я нашел, но там у меня вопросов возникло больше, чем получилось ответов. Про отражение от линии задержки было полезно прочитать. Вообще не так про эти задержки думал и идею с длинным кабелем сразу отмел.
Моя задача крутится вокруг перехода к установившемуся автоколебательному режиму и его структуры в сети таких генераторов. Сами генераторы могут быть построены и на нескольких инверторах, здесь ограничений нет. В частности возникла идея, что можно избежать ряда проблем и сделать конструкцию более предсказуемой путем добавления линий задержки. 100-метровый коаксиальный кабель нам, конечно, не подойдет, но это мы потом с инженерами работать будем. Но до того как пойти к инженерам, мне надо разобраться с тем, что будет происходить в лучшем случае и как определить насколько мы далеки от лучшего случая. Для этого надо составить разумную динамическую модель. В ходе разбирательств начитался всякого. Но почему именно от Википедии у меня осадок остался, непонятно. Будет мне уроком.

Chetverovod
02.07.2026 20:45Диффуры в школе не дают. Так что, только, как говорит @SIISII, заряд-разряд и закон Ома. В качестве примера могу привести книгу "Радио это очень просто" где на пальцевых методах объяснена работа радиоприемника и его компонентов. Потом, когда школьник подрастет, он сможет увеличить степень детализации своего понимания, освоив диффуры. Конечно, я ничего не навязываю, но когда под рукой есть микросхемы мелкой логики, базовые вещи вроде согласования уровней, задержек сигнала, логические гонки, можно показать вживую на экране осциллографа.

YuriPanchul Автор
02.07.2026 20:45Да, но это не моя цель. Моя личная цель - привести к простому CPU на языке описания аппаратуры SystemVerilog, на уровне регистровых передач (register transfer level - RTL), с реализацией на ПЛИС/FPGA. А самых мотивированных из тинейджеров постарше - к микроархитектурным комструкциям: конвейеры, FIFO итд - то есть к тому, с чем я работаю как проектировщик GPU, до этого проектировщик сетевых чипов, до этого CPU.
Если я буду отвлекаться на любые вещи, которые не входят в этом маршрут, то они просто не дойдут. И операционным усилителям и RC-генераторам уже долго учили и учат другие люди, а вот микроархитектуре и уровню регистровых передач - сильно меньше.
Процессор из учебника Харрис & Харрис:


Картинка из одной из моих статей про конвейер обработки данных

sergyk2
02.07.2026 20:45ну вот у кетайчёнка самое то для школьников - логические микросхемы и светодиоды, можно вжывую потыркать как это всё работает
misha_erementchouk
А вы свою элементную базу используете или есть какой-то "Набор юного инженера цифровых систем", желательно недорогой? Я тут попытался племянников (11, вроде, лет) на микроконтроллеры подсадить (micro:bit), но там хоть лампочки и мигают, но надо программы писать и подозреваю, что перенос активности на компьютер все ломает. Хочу проверить идею, что если своими руками делать, а они совсем не против что-нибудь помастерить, то может зацепить.
YuriPanchul Автор
Для FPGA репозиторий примеров который сделали мы с сотоварищами поддерживает 45 плат
https://github.com/yuri-panchul/basics-graphics-music
Недорогой комплект из частей с Ali Express, который я часть использую, выглядит вот так:
https://verilog-meetup.com/2025/05/25/tang-nano-9k-setup-update/
Это набор на 10 студентов:
https://docs.google.com/spreadsheets/d/1HVJeVRhpTN54L7gBe2VHG5KTsQEmqQKKFdBnXWFDw2Q/edit?usp=sharing
На одного студента получается около $60, около 5 тыс. рублей.
Насчет набора из микросхем малой степени интеграции я сделаю список несколько потом.
Chetverovod
Компания Arduino выпустила официальное мобильное приложение Arduino Create (доступно в Google Play). Есть и сторонние приложения.
YuriPanchul Автор
Ардуино - это другое, чем упражнения с микросхемами малой степени интеграции и FPGA. Ардуино - это не про микроэлектронику, а про встроенное программмирование микроконтроллеров и немного проектирование систем (интеграцию микроконтроллеров и сенсоров).
В микроконтроллере на плате Ардуино уже находится готовая схема – микропроцессорное ядро, готорое может выполнять программы. А внутри FPGA находится матрица элементов, из которых можно составить схему, в том числе сконфигурировать работающий процессор.
Никакое количество программирования Ардуино не поможет понять функцию логических элементов и D-триггеров, а также не приблизит к пониманию, как сделать сам чип на плате Ардуино. Примерно как никакое количество вождения автомашины не поможет изучить, как сконструировать ее двигатель.
Chetverovod
Прошу прощения, сообщение про Ардуино, было для дяди племянники которого опасаются компьютера.
misha_erementchouk
Спасибо за рекомендацию, посмотрю.
У micro:bit совершенно шикарная экосистема, представленная на microbit.org. Эти микроконтроллеры можно программировать, даже собирая программу из визуальных блоков. Так же поддерживается программирование на их варианте MicroPython. А поскольку там внутри Cortex-M, можно вообще уйти в сторону и использовать и С, и С++, и Rust. Аксессуаров же столько, что не составит труда сделать подавальщика масла, который будет спрашивать в чем смысл его существования.
Все это здорово, но удивительным образом не хватает программирования, путем настукивания чисел на какой-нибудь специально подключаемой цифровой клавиатуре. Или даже перещелкиванием тумблеров на какой-нибудь коробочке. У этих балбесов еще нет представления, что компьютер это чертовски полезный инструмент для достижения каких-то целей. Он у них вещь в себе. Я еще держу на примете всякие Exa Punks и их же TIS-100, Turing Complete и nandgame (этот вариант хороший, но, правда, сильно сложный), но, понятно, специально подсаживать на серьезные компьютерные игры мне не хочется.
Поэтому хочу попробовать поделать что-то цифровое, но со всей активностью ограниченной столом, деталями, работой руками и рисованием на бумажке. Чтобы определенная элементарность получаемых результатов соответствовала элементарности используемых средств. Как-то так.