Комментарии 29
А вы свою элементную базу используете или есть какой-то "Набор юного инженера цифровых систем", желательно недорогой? Я тут попытался племянников (11, вроде, лет) на микроконтроллеры подсадить (micro:bit), но там хоть лампочки и мигают, но надо программы писать и подозреваю, что перенос активности на компьютер все ломает. Хочу проверить идею, что если своими руками делать, а они совсем не против что-нибудь помастерить, то может зацепить.
Для 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 тыс. рублей.

Насчет набора из микросхем малой степени интеграции я сделаю список несколько потом.
Компания Arduino выпустила официальное мобильное приложение Arduino Create (доступно в Google Play). Есть и сторонние приложения.
Ардуино - это другое, чем упражнения с микросхемами малой степени интеграции и FPGA. Ардуино - это не про микроэлектронику, а про встроенное программмирование микроконтроллеров и немного проектирование систем (интеграцию микроконтроллеров и сенсоров).
В микроконтроллере на плате Ардуино уже находится готовая схема – микропроцессорное ядро, готорое может выполнять программы. А внутри FPGA находится матрица элементов, из которых можно составить схему, в том числе сконфигурировать работающий процессор.
Никакое количество программирования Ардуино не поможет понять функцию логических элементов и D-триггеров, а также не приблизит к пониманию, как сделать сам чип на плате Ардуино. Примерно как никакое количество вождения автомашины не поможет изучить, как сконструировать ее двигатель.
Спасибо за рекомендацию, посмотрю.
У micro:bit совершенно шикарная экосистема, представленная на microbit.org. Эти микроконтроллеры можно программировать, даже собирая программу из визуальных блоков. Так же поддерживается программирование на их варианте MicroPython. А поскольку там внутри Cortex-M, можно вообще уйти в сторону и использовать и С, и С++, и Rust. Аксессуаров же столько, что не составит труда сделать подавальщика масла, который будет спрашивать в чем смысл его существования.
Все это здорово, но удивительным образом не хватает программирования, путем настукивания чисел на какой-нибудь специально подключаемой цифровой клавиатуре. Или даже перещелкиванием тумблеров на какой-нибудь коробочке. У этих балбесов еще нет представления, что компьютер это чертовски полезный инструмент для достижения каких-то целей. Он у них вещь в себе. Я еще держу на примете всякие Exa Punks и их же TIS-100, Turing Complete и nandgame (этот вариант хороший, но, правда, сильно сложный), но, понятно, специально подсаживать на серьезные компьютерные игры мне не хочется.
Поэтому хочу попробовать поделать что-то цифровое, но со всей активностью ограниченной столом, деталями, работой руками и рисованием на бумажке. Чтобы определенная элементарность получаемых результатов соответствовала элементарности используемых средств. Как-то так.
Кстати, а вы пробовали шикарный симулятор simulide.com ?
Симуляторов есть много, но существуют ли школьники 10-13 лет кому интересно водить мышкой по экрану соединяя виртуальные компоненты? Кроме этого в симуляторе нет реалистичности - вот вчера у меня на занятии школьник светодиод в семисегментном индикаторе сжег неправильным подключением - раздался хлопок и было видно что светодиод сгоревший. Это делает занятия более интересными!
Классная игрушка какая! Нет, не знал, спасибо большое!
Может вам глянуть в сторону tronix? https://vk.com/wall-188945400_401 вся рассыпуха доступна чтоб пощупать
Tronix.2 был прекрасным набором для 1970-х годов, но сейчас он устарел:
Tronix.2 использует стандартные светодиоды, которые требуют резистор. Сейчас в продаже есть светодиоды толерантные к 5V, к ним не нужно ставить никаких резисторов вообще есть все питать от блока питания с входом от USB и выходом 5V.
Tronix.2 использует ввод с проводов или с переключателя, который требует подтягивающего (pull-down) резистора 10K. Сейчас в продаже есть удобные кнопки с встроенным подтягивающим резистором, что опять же убирает лишнюю суету на плате.
В Tronix.2 нужно собирать генератор тактового сигнала из микросхемы 555, двух конденсаторов, трех резисторов. Это сразу три проблемы: 1) 555 никак не привязан к работе современного разработчика микросхем; 2) рассказать связанную с ним теорию ребенку нереально, там если все делать честно, то нужны дифуры; 3) формулы вычисления частоты из конденсаторов и резисторов - это некое подвешенное в воздухе шаманство; 4) все это начинающему долго собирать и в процессе может пропасть интерес.
Альтернатива: купить на AliExpress уже собранный генератор тактового сигнала на 555 и использовать его как черный ящик.Многие люди любят показывать SR-защелку на двух NAND-логических элементах, но если честно, она не возникает в реальной работе современного разработчика микросхем (RTL (register-transfer-level) designer вообще никогда. Для введения элементов состояния лучше сразу переходить к D-триггеру, который используется в 99.99% случаях на современной работе. Остальным 0.01% случаем является D-защелка , которая используется в основном для clock gater в контексте экономии динамического энергопотребления, это для обучения детей неактуально.
Аналогично современный проектировщик никогда не увидит на работе JK-триггер.
Транзисторный уровень можно пропустить - он не очень интересный для ребенка, его интерес лучше оставить для более сложных комбинаций логических элементов и D-триггеров: параллельный сумматор, побитовый последовательностный сумматор, конечные автоматы итд.
Вообще в Tronix.2 с одной стороны много схем которые можно пропустить (транзисторный уровень), далее схем которые ничего нового не вносят (разные варианты бегающих огоньков) и операционные усилители которые стоили бы было или опустить или вынести в отдельный буклет. Реально полезно там где-то 5 или 7 схем из книжки на >80 страниц.
При этом мне нравится формат Tronix-а (страница теории, страница картинки), но для 21 века нужно это все переделать. А то его копируют с минимальными изменениями. И вообще через три дня схемы из Tronix детям надоедают и их нужно переводить на FPGA.
Не считаю все это проблемой, особенно что теперь есть толерантное не толерантное. Особенно если цель руками наглядно все это пощупать.
Фпга и прочее это уже больше именно про программирование в той или иной степени. Так же идет рассуждать ‘да зачем собирать рассыпуху на плате, можно все это в протеусе посмотреть’. И то и то это про обрывочные а не системные знания, но тут хоть еще практический навык добавится.
А Вы просто рассуждаете со стороны уже искушенного этим всем человека. Так же как профессиональный гитарист будет новичку советовать брать гитару за 100500 денег так как для него остальное это уже и не гитара).
Нет, FPGA - это не программирование. Это именно построение аппаратных структур по микроархитектурным диаграммам с помощью кода. Программирование - это написание кода, который превращается в цепочки инструкций для процессора, а в базовом FPGA процессора нет, его можно построить из ячеек FPGA.
Если "программировать" на FPGA то есть писать на нем как на Си, то 1) все будет работать на очень низкой тактовой частоте 2) будет очень трудно понять как строить конвейерные структуры, которые везде в реальной работе.
Замечу что туториалы которые пишут новички для новичков часто прокалываются именно на (2), например человек пишет процессор с помощью последовательного конечного автомата и почему-то считает что его состояния - это и есть стадии конвейера. Потом его кто-то поправляет и он "ну я это так, в абстрактном смысле".
Так вот, именно микросхемы малой степени интеграции позволяют сразу поставить мозг как правильно потом, после них строить код для FPGA.
В серии CMOS есть даже FIFO - CMOS 40105, то есть можно на макетной плате строить микроархитектурные структуры - конвейеры для обработки потока данных и простые конечные автоматы для распознавания последовательностей. Именно в этом направлении я хочу построить упражнения - это наглядно, математически интересно и привязано к актуальной работе в электронных компаниях.
А чему учит сборка таймера на 555? Мелкой моторике? Зачем делать упражнение с JK-триггером в Tronix, если взрослый инженер в электронной компании никогда за десятилетия не увидит такого объекта? Все эти вещи остались в 1970 году, вместо них можно поставить нечто более осмысленное. То есть можно сделать нечто структурно похожее на Tronix и пересеющееся с ним по ~ 10 упражнениям, но бОльшую часть переписать.
Зачем делать упражнение с JK-триггером в Tronix
Я говорю, Вы слишком искушенный человек, вы даже не понимаете зачем это может быть нужно. Не так важны конкретные реализации. Для становления важен не только получаемый результат но и путь. Ну и путь бывает интереснее)
Если “программировать” на FPGA то есть писать на нем как на Си, то
ну я же совсем не про это… протеус я вспомнил не просто так. Имхо, это скучно, когда ты там просто накликал мышкой и запустил. Это хорошо когда тебе нужен только результат, а просто для обучения и для того чтоб усваивалось на уровне принципов - этого маловато. Когда ты прошел сначала это с физическими “детальками” (да хоть на релюшках) а после смог это просто повторить в том же fpga вовлеченность куда больше. Видишь разницу наглядно. Ну т.е. это все больше про понимание основ. А когда ты понимаешь основы и базу, то потом уже повторить что в конструкторе, что в верилоге, что в майнкрафте на редстоне - это дело времени.
из статьи:
Показать на FPGA работу процессора Y80, синтетического процессора на верилоге, совместимого с Z80
там же речь именно о “совместимом” а не потактово-точном? Из подобного попадалось интересное в обратную сторону:
https://github.com/emu-russia/breaks
https://github.com/emu-russia/SEGAChips
https://github.com/emu-russia/psxrev - про это на хабре было https://habr.com/ru/companies/zeptobars/articles/182286
https://github.com/emu-russia/ula - https://habr.com/ru/news/854148/
у них там по итогу и инструмент получился с экспортом в верилог для дальнейшей доводки https://github.com/emu-russia/Deroute/blob/main/Readme.md
Я говорю, Вы слишком искушенный человек, вы даже не понимаете зачем это может быть нужно. Не так важны конкретные реализации. Для становления важен не только получаемый результат но и путь. Ну и путь бывает интереснее)
Это вы не поняли что я написал. Я не отрицаю полезность упражнений с микросхемами малой степени интеграции. Я просто предлагаю другой набор с ними же. Не CMOS 4027 из Tronix.2 эксперимент PR32 (JK-Flip-Flop), а например CMOS 4032 (bit-serial adder).
Потому что JK-FF он на рабочем месте RTL-дизайнера в Apple, NVidia, AMD, Samsung не увидит никогда, а вот моя альтернатива - это полезная иллюстрация последовательностной логики, плюс ему придется делать для демо сериализацию и десериализацию с помощью сдвиговых регистров. Я такое спрашиваю на интервью на верилоге например в качестве первого блиц вопроса на 10 минут.
Зачем тратить усилия на что-то совсем бесполезное (CMOS 4027), если рядом лежит что-то такое же, но полезное (CMOS 4032)?
Когда ты прошел сначала это с физическими “детальками” (да хоть на релюшках) а после смог это просто повторить в том же fpga вовлеченность куда больше.
Так я это и написал, а что вы прочитали? Вот в четвертом абзаце моего коммента:
"Так вот, именно микросхемы малой степени интеграции позволяют сразу поставить мозг как правильно потом, после них строить код для FPGA."
То есть я ровно это и говорю, далее в абзаце про FIFO: сделать схему на макетной плате на простых микросхемах малой степени интеграции, а потом повторить это в FPGA.
там же речь именно о “совместимом” а не потактово-точном?
Прежде всего я хочу четко сказать: я НЕ агитирую за использование Z80 в любой форме для обучения школьников сейчас (в середине 1980-х это было ОК). В Z80 есть мутные моменты (HL-адресация) и он прививает плохие привычки (потом будет трудно их отбросить при переходе к конвейерным дизайнам).
Просто мальчик сам принес Z80. Я же не могу ему сказать "брось то что ты выбрал, хватай и делай RISC-V". Он сам к этому придет, хоть и с некоторым объездом. Заодно и поймет чем отличается.
там же речь именно о “совместимом” а не потактово-точном?
Y80 написал бывший инженер Zilog, который в 1990-е годы сделал свой мини-бизнес по созданию кастом ядер (в том числе вариантов Z80) для разных клиентов (в том числе для космоса). Зачем ему быть 100% потактово-точным для этих целей? (Хотя я вполне допускаю что Y80 может быть и потактово-точным - я могу спросить Монте при случае).
breaks
Я честно говоря вообще не понимаю, какое это имеет отношение к образованию молодежи:
All schematics from the Wiki are formalized as much as possible in the form of an HDL. We do not aim to make a synthesizable HDL, instead we use a "Die-Perfect" approach - the HDL repeats the netlist of the original chips as closely as possible.
В чем ценность копирования 6502 на уровне нетлиста? Ну если воссоздать паровую машину 19 века до каждого винтика, как это поможет научить студента, который собирается интервьироваться в Теслу или Тойоту проектировать двигатели?
Можно делать свою простую игровую приставку, но на современной основе - процессор RISC-V, конвейерный дизайн для 3D ускорителя итд.
Вот прямо сейчас я работаю с соратниками над инфраструктурой таких проектов для молодежи, с интеграцией нескольких RISC-V ядер и поддержкой 45 FPGA плат - https://github.com/yuri-panchul/basics-graphics-music/tree/main/labs/5_cpu
Да, я не очень внимательно прочитал ваш ответ. Ок.
Про потактовоточеый это уже было не про образование, а просто вопрос в сторону. Тут другие интересы. просто из экономии времени и пока глаз зацепился, спросил в том же сообщении чтоб не ждать час)
Потактовоточный интересен в плане восстановления старого, и получения тех же характеристик и того же поведения, критично когда софт, в частности игры, используют различные хаки/оптимизации.
Спасибо за рекомендацию! Я как раз о чем-то таком и думал, а тут еще и с заданиями (правда слишком много звуковых).
Ах, Ямахи. Как много в этом слове...
В список устройств я бы еще добавил реализацию схемы RC-генератора на логических CMOS-вентилях и схему линейного усилителя на них же. А вот еще на D-триггере формирователь импульсов.
Мой личный выбор задач для школьников идет от сохи, то есть от моей личной ситуации на работе. Я прооектировщих блока GPU в чипах в телефонах Самсунг. При это я front-end RTL (register transfer level) designer. То есть D-триггеры я вижу - их в моем блоке сотни тысяч, а вот то что вы описываете вокруг меня нет. Я не занят ни ASIC library design, ни analog-mixed signal. Более того, я подозреваю что чтобы объяснить это по-человечески, нужны дифуры. А если объяснять на пальцах - то это просто отвлечение школьника от моего маршрута: логические элементы + D-триггеры -> System Verilog + Register Transer Level -> микроархитектура простейших процессоров.
Ну, мне удавалось объяснить работу мультивибратора на двух транзисторах "на пальцах", без всяких дифуров. Постепенный заряд/разряд конденсатора вполне понимабелен, тем более, что легко придумывается "гидравлический" аналог и конденсаторов, и резисторов.
По собственному опыту могу сказать, что объяснения на пальцах - вещь неоднозначная. Мне несколько раз пытались объяснить кольцевые генераторы на пальцах, у меня каждый раз возникало ощущение недоговаривания и попыток надурить. В итоге перешел в режим вежливого игнорирования (добавляло то, что они мне нужны в чудаковатых режимах работы). Потом сел с диффурами, все оказалось несложно, понятно и даже красиво.
В качестве примера побочки от рассказа на пальцах. В русской Википедии пишут
Один инвертирующий каскад с линией задержки (Фиг. 1) в связи вход-выход, однако, способен к генерации.
Есть сомнения в справедливости этого утверждения.
Нет, все верно. Если величина задержки и коэфициент усиления будут достаточные, то возникнут автоколебания.
Без контекста чушь с моей стороны получилась. То-то когда копировал подумал, что слова не совсем те. Была дискуссия, где коэффициент усиления потерялся и из внутренних времен только время задержки в инвертере осталось. Условно говоря, предел больших времен задержек. Дискуссия давно закрылась, а закладка с Википедией осталась. Что хотелось сказать это то, что на одних пальцах переходы между разными режимами тяжело понять. Собственно от дифуров там не так уж и много, но вообще без формул тяжело.
Именно на таком каскаде (инвертор + линия задержки) построены тактовые генераторы некоторых советских вычислительных машин, в частности, ЕС-1020 и ЕС-1030. В роли линии задержки там был длиннющий кусок коаксиального кабеля.
Это хорошие примеры. Вашу статью на Хабре про ЕС-1020 я нашел, но там у меня вопросов возникло больше, чем получилось ответов. Про отражение от линии задержки было полезно прочитать. Вообще не так про эти задержки думал и идею с длинным кабелем сразу отмел.
Моя задача крутится вокруг перехода к установившемуся автоколебательному режиму и его структуры в сети таких генераторов. Сами генераторы могут быть построены и на нескольких инверторах, здесь ограничений нет. В частности возникла идея, что можно избежать ряда проблем и сделать конструкцию более предсказуемой путем добавления линий задержки. 100-метровый коаксиальный кабель нам, конечно, не подойдет, но это мы потом с инженерами работать будем. Но до того как пойти к инженерам, мне надо разобраться с тем, что будет происходить в лучшем случае и как определить насколько мы далеки от лучшего случая. Для этого надо составить разумную динамическую модель. В ходе разбирательств начитался всякого. Но почему именно от Википедии у меня осадок остался, непонятно. Будет мне уроком.
Диффуры в школе не дают. Так что, только, как говорит @SIISII, заряд-разряд и закон Ома. В качестве примера могу привести книгу "Радио это очень просто" где на пальцевых методах объяснена работа радиоприемника и его компонентов. Потом, когда школьник подрастет, он сможет увеличить степень детализации своего понимания, освоив диффуры. Конечно, я ничего не навязываю, но когда под рукой есть микросхемы мелкой логики, базовые вещи вроде согласования уровней, задержек сигнала, логические гонки, можно показать вживую на экране осциллографа.
Да, но это не моя цель. Моя личная цель - привести к простому CPU на языке описания аппаратуры SystemVerilog, на уровне регистровых передач (register transfer level - RTL), с реализацией на ПЛИС/FPGA. А самых мотивированных из тинейджеров постарше - к микроархитектурным комструкциям: конвейеры, FIFO итд - то есть к тому, с чем я работаю как проектировщик GPU, до этого проектировщик сетевых чипов, до этого CPU.
Если я буду отвлекаться на любые вещи, которые не входят в этом маршрут, то они просто не дойдут. И операционным усилителям и RC-генераторам уже долго учили и учат другие люди, а вот микроархитектуре и уровню регистровых передач - сильно меньше.
Процессор из учебника Харрис & Харрис:


ну вот у кетайчёнка самое то для школьников - логические микросхемы и светодиоды, можно вжывую потыркать как это всё работает

Хроники занятий микросхемами с русскими школьниками не в замке во Франции, а в хакерском клубе в Калифорнии