
Некий комментатор скормил ИИ мои посты про обучение школьников цифре на макетке, и иишница в частности ответило: “Высокий порог входа для части школьников. Проект предполагает понимание базовых вещей: что такое бит, такт, сдвиговый регистр, перенос, семисегментный индикатор”.
Это конечно ерунда полная. Школьники знают про арифметический перенос из того что их учили складывать столбиком числа во втором классе. Такт - это просто период между миганиями лампочки на модуле тактового генератора. Сдвиговый регистр они понимают по движению лампочек которое отображает его содержимое. А семисегментный индикатор они могут прощупать втыканием провода в пины идущие к каждому из светодиодов.
Но предоставим слово самим школьникам. Я сделал видео, но которых попросил трех школьников показать, что они выучили и смогли смастерить после двух-трех сессий на викенды. Некоторые проекты они делали при мне, некоторые дома. Младшему, Матвею, дома помогал отец, но на одном из видео Матвей паяет проект при мне, на видео - так что это довольно чистый эксперимент.
На видео: Тимофей обсуждает счетчик; Тимофей и Нил отлаживают сдвиговый регистр; Матвей обсуждает комбинационный сумматор; Матвей обсуждает логический элемент XOR; Матвей сравнивает паяльники.
Причем все это только начало - они начали с базовых компонент, но я обсудил с ними план до конечных автоматов, ALU, FIFO и перехода на FPGA платы с языком описания аппаратуры SystemVerilog и последующей реализацией микросхемы ASIC с помощью сервиса Tiny Tapeout.
Могут начаться реплики “все неправильно, а где резисторы?” В схеме с платой XOR нет резисторов, так как мы:
Используется специальные 5V-толерантные светодиоды.
Используются кнопки с встроенными подтягивающими резисторами.
Используется блок питания который выдает стабильные 5 вольт.
Я также не заставляю детей собирать схему из 555 и конденсаторов, так как это было актуально при Брежневе, а сейчас неактуально, так как в смартфонах 2030 года (за проектирование 2нм чипа в которых мне сейчас платят зарплату) ничего такого нет. Пэтому я даю школьникам уже собранный модуль на 555 с АлиЭкспресса.
Так как в разных регионах (Россия, США, Украина) используются разные видео-хостинги, я залил все на YouTube, TikTok, Вконтакте и на Rutube:
Часть 1:
Rutube:
Часть 2:
ТикТок:
Rutube:
Вконтакте:
Какой же план для продолжения? Он есть у меня:
Приквел для FPGA и ASIC с помощью микросхем малой степени интеграции
Полноценный набор упражнений
Юрий Панчул, 2026-07-23
Идеально для школьников, но полезно и для студентов, чтобы они не пытались “программировать” на верилоге, а строили верилоговским кодом аппаратные структуры.
Годно чтобы учить детей концентрироваться над решением технических задач на полянке в глухом лесу, без доступа к интернету и ИИ. Только даташиты на микросхемы, макетные платы, батарейки на 9 вольт, ручка и листы бумаги.
Для этих упражнений я рекомендую использовать светодиоды, рассчитанные на напряжение 5 вольт, кнопки со встроенными подтягивающими резисторами (pull-down), стабильный блок питания для макетки на 5 вольт и уже собранный модуль генератора тактовых сигналов на основе микросхемы 555.
Все это избавляет от бессмысленного втыкания десятков резисторов, сборки неактуальной схемы с конденсаторами и 555 и прочих танцев с бубном, которые жалко выбросить всем составителям наборов для детей с 1970-х годов.
По той же причине я исключил транзисторы, SR-защелки, JK-триггеры итд, поскольку современный RTL-проектировщик (RTL = Register Transfer Level) не сталкивается с этим на рабочем месте.
Цель - провести школьников от логических элементов И/ИЛИ/НЕ и D-триггеров к микроархитектуре, поэтому мы стараемся не выходить за рамки двух абстракций: комбинационной/последовательностной логики и (потом, когда дойдем до FPGA) статического анализа тайминга внутри такта.
Итак:
Базовые элементы
Демонстрация работы микросхем: 4081 (И), 4071 (ИЛИ), 4069 (НЕ), 4070 (Исключающее ИЛИ).
Демонстрация D-триггера (DFF) 4013 с асинхронным сбросом.
Демонстрация счетчика 4029.
Демонстрация сдвигового регистра 4015 с последовательным входом и параллельным выходом (SiPo - serial input / parallel output).
Изучение работы одноразрядного семисегментного индикатора с общим катодом и управление им с помощью микросхемы 4511.
Демонстрация 4-разрядного комбинационного сумматора 4008. Использование трех микросхем 4511 для отображения операндов и результата на трех семисегментных индикаторах.
Функциональные узлы
Демонстрация реконфигурируемого логического элемента 4048.
Демонстрация сдвигового регистра 4014 с параллельным входом и последовательным выходом (PiSo - parallel input / serial output).
Демонстрация 4-разрядного комбинационного компаратора 4063.
Демонстрация мультиплексоров (MUX) на базе микросхем 4051, 4052, 4053, 4019.
Демонстрация дешифратора 4028. Он будет использоваться в проектах для замены мультиплексора комбинацией дешифратора и селектора на элементах И и ИЛИ.
Демонстрация приоритетного шифратора 4532 (8 в 3). Использование 4511 для отображения выходного сигнала в десятичном виде.
Демонстрация десятичного счетчика 4017 с дешифрированными выходами.
Демонстрация FIFO-буфера 40105.
Демонстрация работы регистрового файла 4x4 40108.
Демонстрация 4-разрядного АЛУ 40181.
Мини-проекты для повторения
Полный сумматор на базовых логических элементах.
2-разрядный комбинационный сумматор, использующий полный и полусумматор.
Замените мультиплексор 4051 эквивалентной схемой на базе дешифратора 4028 и селектора, построенного на элементах AND и OR.
Замените мультиплексор 4051 эквивалентной схемой на базе дешифратора 4028 и селектора, использующего элемент 4086 (AND-OR-NOT) и инвертор 4069.
Замените мультиплексор 4052 эквивалентной схемой на базе дешифратора 4555 и селектора, построенного на элементах AND и OR.
Замените мультиплексор 4052 эквивалентной схемой на базе дешифратора 4555 и селектора, использующего элемент 4086 (AND-OR-NOT) и инвертор 4069.
Продемонстрируйте работу селектора данных 4019, выполняющего объединение двух битовых векторов по маске. Сравните это решение с эквивалентной реализацией на базовых логических элементах.
Счетчик Джонсона на базе сдвигового регистра 4015 и инвертора 4069.
Проекты
Демонстрация побитового последовательностного сумматора 4032. Объединение его с двумя сдвиговыми регистрами 4014 (параллельный вход / последовательный выход), одним сдвиговым регистром 4015 (последовательный вход / параллельный выход) и тремя драйверами индикаторов 4511 для отображения операндов и результата. Сравните этот способ сложения с методом, использующим комбинационный сумматор 4008.
Замените микросхему 4032 эквивалентной схемой на базе логических элементов (AND, NAND, OR, NOR, NOT, XOR) и D-триггера (DFF) для хранения бита переноса.
Объедините три FIFO-буфера 40105 с сумматором 4008 для сложения чисел, поступающих в разных тактах, и организуйте контроль потока данных (data flow control with backpressure).
Разработайте конечный автомат для распознавания последовательностей битов (нажиманий на кнопку). Реализуйте его на базовых логических элементах и D-триггерах. Вместо 4013 можно использовать D-триггеры 4076 и 40174.
Постройте побитовый последовательностный компаратор в виде конечного автомата на базовых логических элементах и D-триггерах. Сравните его с комбинационным компаратором, выполненным на микросхеме 4063.
См. также:
Из обучения школьников цифре на макетке нужно выкинуть все резисторы и вставить микросхемы с FIFO
Как обучить школьников работать в группах проектирования с помощью многоплатных проектов

Заседания по таким проектам в Silicon Valley проходят по воскресеньям в 11.00-14.00 по адресу Hacker Dojo, 855 Maude Ave, Mountain View. При этом 2 и 9 августа меня не будет, так как я улетаю в отпуск на Кавказ.
Школьники будут показывать свои проекты в следущий четверг на мероприятии торговой палаты города Маунтин-Вью, Калифорния:

Для российских школьников олимпиадного типа прохождение такого рода упражнений поможет им например для учебы на очередной Школе Синтеза Цифровых Схем (синтез на FPGA и ASIC, основы микроархитектуры), которая начинается в октябре.
Комментарии (50)

AeYronu
23.07.2026 19:07Предыдущая статья была ровно таким же мусором как и эта. Для того чтобы это понять, нет необходимости проводит аналог с помощью ИИ. Для этого достаточно иметь базовые знания по электронке.
П.с. пожалуйста рекламу своих "курсов" публикуйте в стране проживания. Для США это будет самое то.

YuriPanchul Автор
23.07.2026 19:07А чем вы собственно недовольны? Что у меня нет подтягивающих резисторов? Зато есть FIFO, ALU, регистровый файл и конечные автоматы. А в вашем курсе для детей с микросхемами малой степени интеграции они есть?

P1ngZer0
23.07.2026 19:07У нас в универе так же начинали с к555, только половина чипов была горелая и мы полпары искали рабочий элемент И-НЕ

hw_store
23.07.2026 19:07Жаль что мне не 13 лет.
Вероятно я никогда не пойму, что такое "счётчик с фазоимпульсным представлением информации".

YuriPanchul Автор
23.07.2026 19:07О господи! Это что, какая-то рабоче-крестьянская технология для Time Division Multiplexing (TDM)? Если мое смутное предположение верно, то вот
https://ru.wikipedia.org/wiki/Мультиплексирование_с_разделением_по_времени

SIISII
23.07.2026 19:07entity K155IE1 is generic ( INIT : STD_LOGIC_VECTOR(0 to 3) := "0000"); port ( R0 : in STD_LOGIC; R1 : in STD_LOGIC; C0 : in STD_LOGIC; C1 : in STD_LOGIC; \~Y\ : out STD_LOGIC); end K155IE1; architecture Logical of K155IE1 is signal R : STD_LOGIC; signal C : STD_LOGIC; signal CNT : STD_LOGIC_VECTOR(0 to 3) := INIT; begin R <= R0 and R1; C <= C0 and C1; process (R, C) is begin if R = '1' then CNT <= "0000"; elsif rising_edge(C) then if CNT = "1001" then CNT <= "0000"; else CNT <= CNT + "0001"; end if; end if; end process; \~Y\ <= '0' when CNT = "1001" and C = '0' else '1'; end architecture Logical;
YuriPanchul Автор
23.07.2026 19:07Хм, если так, то это красиво звучащее название для в общем-то банальной вещи.

SIISII
23.07.2026 19:07Именно так :) Сей быдлокод я написал лет 15 назад -- делал (и, в целом, сделал) свою библиотеку, чтоб симулировать поведение цифровых схем, нарисованных в САПР печатных плат, способной экспортировать нетлист на VHDL или Verilog (в моём конкретном случае -- Expedition от Mentor, ныне Siemens). В не особо понятных случаях (в частности, и для этой микросхемы, и для К589ХЛ4) пришлось делать тесты реальных микросхем, в роли генератора тестовых воздействий выступала Ардуина :)
iganiv
Много лет я пытаться освоить FPGA с полного нуля. Изучал онлайн-уроки, покупал литературу. Результатов ноль. Да, я не самый умный и быстро схватывающий человек, но причина здесь не в моей тупости. А в том, что НИКТО не смог нормально составить план обучения. Например, тот же Фрэнк Бруно первую треть книги втирает читателю, что такое FPGA и ASIC, их историю и другую фигню. Далее, «выполняем наш первый пример». «… добавляем constraints…”… что? Какие нахрен “constraints”?!!! o_O Я в душе не знаю, что такое «constraints”, зачем я должен их добавлять? И так далее. Ругаются какими-то непонятными констрейтами, слайсами и лутами. Мы же только что историю изучили, нет? ИМХО, это трэш полный. В итоге, вырвав все волосы на заду, я хоть немного въехал в тему и могу поделиться тем, как я вижу план обучения FPGA для новичка с полного нуля. Не знаю, поможет ли это Вам в вашей практике, но все равно поделюсь:
Логические элементы. Теория. Таблицы истинности.
Триггеры и защелки
Логика в железе, серия 74 и тому подобное. Соединение элементов между собой проводами на макетной плате.
Язык Verilog или VHDL. Описание принципа соединений элементов между собой. Сопоставление описания схемы на макетке из предыдущей главы на языке Verilog или VHDL.
До этого этапа вообще не должно быть ни одного упоминания матершинного слова “FPGA”.
5. FPGA как термин. FPGA как замена этой самой макетки. История FPGA, если нужно.
6. Характеристики FPGA. Основные термины (слайс, LUT) и подобное.
7. IDE-среды для работы с FPGA. Здесь должны быть ОБЯЗАТЕЛЬНО подробно описаны все термины, которых нет в словаре Даля. Особенно всякие «constraints”.
8. Verilog или HDL как язык описания схемы для FPGA.
Далее, идёт все остальное, что Вы считаете нужным.
К сожалению, слишком много мусора я перечитал и только забили голову. Видите незнакомый термин без описания что это такое - сразу бросайте читать и ищите другой источник. Прояснять ситуацию начали только уроки по Verilog с сайта Марсоход. Но самое хорошее, благодаря чему я начал понимать что к чему, это канал на ютубе с названием «плисоводство». Вот там реально можно именно понять, а не тупо скопировать. Модераторам, которые захотят удалить мой комментарий, якобы, за рекламу, могу сказать, что никакого отношения ни к какому каналу я не имею. Я всего лишь поделился опытом. Подумайте дважды, если вам не пофигу на развитие отрасли в нашей стране - с обучением FPGA реально очень туго. С уважением.
YuriPanchul Автор
Мы с сотоварищами сделали более-менее работающий план на Школе Синтеза Цифровых Схем:
https://engineer.yadro.com/chip-design-school/
Constraints нужны когда вы понимаете что такое static timing analysis. Для начинающего нужен только 1 (один) constraint в его первый год обучения - это период 1 (одного) тактового сигнала на его плате. Несколько clock-ов и всякие PLL-ли можно вводить только если рука хорошо набита на дизайне с одним clock-ом.
Constrains на пины вообще не должны появляться в рамках учебного курса по HDL/RTL, потому что это vendor-specific шаманство с бубном, которое не имеет отношение к цели - обучить человека методологии проектирования на уровне регистровых передач, применимой и к FPGA, и к ASIC.
В примерах для Школы Синтеза мы это все изолировали от пользователя для поддержки разных тулчейнов (Xilinx, Altera, Gowin, Lattice).
Франку Бруно за его книжку скорее всего просто Xilinx заплатил, вот он туда и сует Vivado-specific фигню чтобы приковать преподавателей к Xilinx. Это называется "vendor lock". Так как я знаю менеджеров образовательных программ лично, то я не удивлен от слова "совсем".
Я против введения защелок в первый год обучения. Я считаю, что нужно начинать с D-триггера как черного ящика и вводить D-защелки только когда человек уже набил руку на базовом проектировании (включая конвейеры, FIFO итд). Потому что D-защелка нужно в трех ипостясях:
Clock gaters для экономии динамического энергопотребления.
Latch array (экономит несколько процентов энергопотребления по сравнению с регистровым файлом на D-триггерах).
Time borrowing (продвинутый материал для старших инженеров NVidia с 10-летним опытом).
SR-защелка не появляется в жизни ASIC и FPGA дизайнера никогда, а JK-триггер и T-триггер - практически никогда, хотя я знаю два исключения, подтверждающие правило. Это все хлам, который тянут в вводные курсы люди, которые копируют методички 1990-х годов, написанные людьми, которые обучались в 1970-е годы.
Человек который знает разные виды защелок и констрейны на пины, но не может написать обычный модуль на верилоге с D-триггерами типа как задачи по ссылке ниже - для электронной компании бесполезен.
https://github.com/chipdesignschool/systemverilog-homework/tree/main/04_more_sequential
iganiv
Судя по всему, Вы идёте по правильному пути. Желаю Вам успехов! Послежу за Вашим каналом
YuriPanchul Автор
iganiv
Если бы лишняя информация была единственной проблемой этой книги, ещё бы куда ни шло… но там, как минимум, жестко нарушена последовательность повествования. Буквально, после истории ASIC, он сразу предлагает не самый простой проект на Vivado. Раздел «знакомство с FPGA”… 2 страницы. Собственно, чуть дальше него я и дочитал, когда он начал материться всякими констрейтсами. На этом изучение книги закончил. Пожалел, что деньги на нее потратил. Ты бы хоть объяснил, чем Vivado от Vitis отличается, для начала…
P1ngZer0
С другой стороны, в проде ты все равно будешь использовать специфичные примитивы под конкретный чип, абстрактный ртл не всегда вывозит
YuriPanchul Автор
Совершенно верно, но что важнее для обучения начинающего студента:
Вывалить на него нюансы Quartus .qsf / Xilinx .xdc / Gowin .cst файлов со всякими банками напряжений итд - при том что у разных вендоров это разное и никакой особой мысли там нет, чисто запоминание?
Или изолировать всю эту хрень во врапперы (как мы сделали в https://github.com/chipdesignschool/basics-graphics-music ) и сделать упор на общие навыки проектирования последовательностной логики на уровне регистровых передач?
На интервью в электронные компании на позиции по RTL (Register Transfer Level) front-end design про (1) можно честно сказать "никогда не разбирался / использовал темплейт / этим занималась специальная группа в компании", но вот плохое владение (2) - это провал интервью.
Что касается DSP48 то разобраться в нем человеку, который владеет общими навыками RTL и здравым смыслом - это довольно банально. Его конечно стоит упомянуть (наряду с Altera-specific и Gowin-specific примитивами), но не в первой главе, а где-то в пятой-шестой.
То же самое про vendor-specific блоки памяти, PLL итд.
SIISII
Ну, строго говоря, ноги ПЛИСины задаются тоже в виде ограничений -- чтоб синтезатор знал, куда вести те или иные внешние сигналы.
YuriPanchul Автор
Это в следущих двух абзацах комментария:
Constrains на пины вообще не должны появляться в рамках учебного курса по HDL/RTL, потому что это vendor-specific шаманство с бубном, которое не имеет отношение к цели - обучить человека методологии проектирования на уровне регистровых передач, применимой и к FPGA, и к ASIC.
В примерах для Школы Синтеза мы это все изолировали от пользователя для поддержки разных тулчейнов (Xilinx, Altera, Gowin, Lattice).
YuriPanchul Автор
Рассказывать как были PLA, PAL, GAL, PLD - это научпоп, даже инфотейнмент. Его можно упомянуть если есть время, но им нельзя замещать критические вещи, с которыми плохо даже у американских студентов после вузов: 1) набивание руки на реализации последовательностной логики и 2) микроархитектурные конструкции (конвейеры и FIFO).
В профессиональной разработке, особенно ASIC design, инженеры мало используют IDE. Чаще все делается на скриптах в терминале и любимом редакторе инженера. В примерах для Школы Синтеза мы сделали режим когда студенты используют VS Code в комбинации с запуском скрипта синтеза в терминале.
Проблема IDE - они кривые и у каждого вендора разные. Разумеется Xilinx и Altera проталкивают свои IDE в вузы, чтобы получить vendor lock - то есть чтобы преподаватель сидел на нем 20-30 лет.
Создателя Марсохода я уважаю, это да. Кстати поддержка марсоходовских плат есть и в репозитории примеров ддля Школы Синтеза:
https://github.com/chipdesignschool/basics-graphics-music/tree/main/boards
iganiv
А вот насчёт IDE я с Вами не согласен! Да, кривые, да, вендор лок… но если бы мне на этапе «какие нахрен constraints?” еще и консоль со скриптами подсунули, я бы вообще себе мозг вывихнул и бросил это навсегда. Open Source человек должен выбирать осознанно, сам к нему придти. Но начинать надо с чего-то простого, не отвлекаясь на что-то побочное (настройка того же Linux и всех этих консолей). Именно IDE дает возможность максимально сконцентрироваться на процессе понимания логики работы, не отвлекаясь вообще ни на что.
P.S. Microchip, горите в аду со своим MPLab X :)))
YuriPanchul Автор
Так ничего настраивать не надо, только в дополнение от пакета от вендора установить git и скачать репозиторий. В примерах репозитории уже стоят все скрипты и они работают под Windows, Linux и MacOS. Нужно просто открыть один подтерминал и запускать там один скрипты двумя клавишами "вверх-ввод":
вот https://docs.google.com/presentation/d/e/2PACX-1vSvtu1KA49aFnO7PfP4XxA8-Sd4laUrkQy1SxCZjSBLivTEtCV_YS9H-eh4FULqZ3xakYBNKHM7YGyB/pub?start=false&loop=false&delayms=60000
.
.
Хотя если нравится IDE - можно и так, просто он мешает, если зоопарк плат от четырех вендоров.
Да, MPIDE и MPLab X у меня в жизни были :-)
unreal_undead2
Базовые вещи по работе с IDE и constraints можно просто посмотреть в примерчиках типа такого.
YuriPanchul Автор
Вместо того чтобы заставлять студентов утомительно возить мышкой по гуи по вашей ссылке:
- вместо этого ему можно просто дать вот такой файл:
https://github.com/yuri-panchul/basics-graphics-music/blob/main/boards/tang_nano_9k_lcd_480_272_no_tm1638/board_specific.cst
и дело с концом.
P1ngZer0
Порог входа в плисы реально конский, там весь инструментарий делали инопланетяне для инопланетян....
unreal_undead2
Пока только делаю первые шаги (и то ленюсь), но на первый взгляд на "учебной" Tang Nano 9k и в родном софте от Gowin, и в open source (вот пример) всё достаточно разумно.
SIISII
Я без особых проблем освоил ISE (для Spartan-3E -- моей первой ПЛИСины). Правда, я хорошо знал, что такое цифровая схемотехника (включая пресловутые JK-триггеры :) ), и для меня основной сложностью было понять, как правильно объяснить синтезатору на VHDL (начинал с него) мою задумку (интерфейс с клавиатурой PS/2): я отлично знал, как сей интерфейс слепить на рассыпухе (сдвиговые регистры и логика), но не сразу "проникся" текстовым описанием. Когда, наконец, в это въехал -- проблем никаких не стало (ну, кроме чисто технических -- типа глюков в IDE и т.п.).
YuriPanchul Автор
К сожалению, есть куча вузовских курсов, которые идут от гейта до конечного автомата, с объяснением попутно как сделать интерфейс для PS/2 или там SPI или I2C - но они не доходят до конвейерной обработки данных. А потом еще говорят "о, студенты конвейернось в компьютерной архитектуре изучат", там классический пятистадийный конвейер MIPS 1980-х годов (ныне RISC-V).
А потом студенты идут в DSP, GPU и сетевые компании и не знают как решать задачки про конвейеры на интервью (см. напр слайды 19-32):
https://docs.google.com/presentation/d/e/2PACX-1vRQ03Qby3fnyxL2lsknfGCQXI1x7_TGYBd2CPoNVkirBkuRbG92yNoOEh-0yMabLFrL55gVvbtZtdnA/pub?start=false&loop=false&delayms=3000
YuriPanchul Автор
Просто вендоры (что Xilinx, что Altera) через свои группы образовательных программ пытаются впарить (по маркетинговым причинам) профессорам вузов ненужные детали своего софта вместо того, чтобы сделать внятные объяснения базовой основы технологии:
Сначала как кодировать комбинационные облака логических элементов и состояние в виде D-триггеров;
А потом как строить из (1) микроархитектурные объекты - конечные автоматы, конвейеры, очереди, арбитры итд.
Частично это связано с тем, что опыт у application engineers образовательных программ не соотвествует опыту R&D инженеров. Они часто просто переписывают старые методички 1990-х годов (составленные людьми, которые получили образование в 1970-х) с новым софтом.
rukhi7
меня учили программированию начиная с этих пунктов в конце 80-х:
Логические элементы. Теория. Таблицы истинности.
Триггеры и защелки
и еще мы рисовали схемы на примитивных логических элементах для элементарных арифметических операций заданной разрядности, это не логика в железе это логика-арифметика на реальных, то есть физически реализуемых, элементах.
Как по мне это обязательная база для профессионального программирования хоть ПЛИС, хоть микроконтроллеров хоть серверного софта. У меня не было проблем с пониманием программирования ПЛИС/ФПГА, при наличии полной информации по конкретной микросхеме.
static timing analysis также необходим и при программировании низкоуровневых функций в микроконтроллерах, так же как и динамический анализ во времени, также как и понимание цифровых схем переферийных узлов микроконтроллеров (процессоров) иногда и с вкраплениями аналоговой схемотехники.
Перефразируя классика - вопросы времени самые сложные вопросы в программировании чего угодно.
YuriPanchul Автор
Тут у нас с вами нестыковка в терминологии. Я говорю про static timing analysis внутри такта - критический путь в пикосекундных задержках от D-триггера к D-триггеру. Скажем на мультиплексор столько-то пикосекунд, на комбинационный сумматор столько-то.
При программировании микроконтроллеров ничего такого не бывает. Там время или измеряется в тактах (за сколько тактов инструкция проходит конвейер) или приходит от внешнего устройства (например таймера). Вход в прерывание тоже происходит в конкретном такте, а не где-то посередине его.
Конечно в микроконтроллерах может быть несколько источников тактового сигнала, PLL и разные частоты, но критический путь внутри микроконтроллера от D-триггера к D-триггеру, или даже от внешнего сигнала к D-триггеру - это не забота программиста. Или я вас как-то неправильно понимаю?
Где вы столкнулись с SR-защелкой, D-защелкой, JK-триггером и T-триггером при работе с ПЛИС, микроконтроллером или серверным софтом? Можете перечислить каждый случай?
rukhi7
это не забота программиста до тех пор пока программисту не нужно управлять (компенсировать) эти задержки в коде. Вообще-то программисту DSP алгоритмов, например, нужно знать свойства преобразования Фурье со всеми вытекающими, а не просто учитывать задержки от D-триггера к D-триггеру, это гораздо круче, согласитесь?
D-защелкой насколько я помню является просто любая ячейка памяти (любой бит грубо говоря) , без памяти не возможно программирование, это еще Тьюринг понимал.
SR-защелкой это set/reset защелка (если это можно назвать защелкой), правильно понимаю? Другие два я действительно уже не помню, уже несколько лет не в теме. Но мне хватит 15 минут чтобы прочитать описание функциональности и вспомнить. Это не сложнее реализации примитивной операции сложения на физически реализуемых элементах, которое мне вбито гвоздями. Хотя да!, там есть всякие хитрости связанные с синхронизацией с тактовым сигналом. Вопросы времени никогда не бывают простыми (еще раз). Низкоуровневое программирование требует анализа и понимания цифровой схемотехники реализованной в разных периферийных устройствах (я же написал выше!) мне приходят на ум схемы таймеров-счетчиков со всеми прерываниями, регистрами захвата и как раз с этими тригерами и логическими элементами и муксерами сигналов и фиг знает еще с чем, которые мне приходилось использовать, если вам действительно интересно. Каждый случай перечислить конечно не могу, только вот так в общем.
Я учился на радиотехнике в начале 90-х, а радиотехника фундаментально начинается с аналоговой схемотехники, аналоговая схемотехника это фундаментальная основа всего. Цифровая схемотехника это абстракция над более общей аналоговой схемотехникой, я бы сказал. Нам эту теорию (в частности свойства преобразования Фурье, теорию оптимальной фильтрации/пеленга/обнаружения сигнала, слежения/подстройки к сигналу, ... и их отображение и применение в теории сигналов) вдалбливали и проверяли со 2-го по 5-й курсы в начале 90-х. Я даже знаю что такое токовое зеркало примерно, но если надо разберусь конкретно, хотя аналоговая схемотехника меня не особо увлекает, это все таки отдельная вселенная я бы сказал, но все таки это фундаментальные основы и относиться к ним надо соответствующе, я бы настаивал, если мое мнение кому то интересно.
YuriPanchul Автор
Все, мне теперь понятно, что вы путаете задержки внутри такта и задержки в виде количества тактов (латентность). Это принципиально разные вещи. Первые меряются в пикосекундах и невидимы программисту. Вторые меряются в тактах и такт имеет период тактового сигнала (скажем 1 наносекунда для схемы с частотой 1 гигагерц). Их программист может наблюдать косвенно, например при разной латентности доступа к памяти.
При программировании Фурье-преобразования на DSP процессоре все задержки в тактах (латентности инструкций), они не имеют никакого отношения к статическому анализу тайминга который использовался при проектировании самого DSP).
Нет. D-защелка (D-latch) - это элемент состояния, но в современных процессорах главным элементом состояния является D-триггер (D-flip-flop) - он составляет более 99.99% элементогв состояния в типичной цифровой схеме. Хотя массивы D-триггеров иногда называют формой памяти (регистровый файл), нов память входит и SRAM (статическая память), и DRAM (динамическая) которые строятся не на D-защелках.
Как я написал выше D-защелка нужно в трех ипостясях:
Clock gaters для экономии динамического энергопотребления - это ничтожная доля элементов состояния.
Latch array (экономит несколько процентов энергопотребления по сравнению с регистровым файлом на D-триггерах).
Time borrowing (продвинутый материал для старших инженеров NVidia с 10-летним опытом).
Видите, вы это все изучали, но у вас каша в голове и, что хуже, 90% это каши - это просто неверная информация. Лучше бы если бы вы выучили только четыре концепции (логический элемент, D-триггер, задержки внутри такта, задержки в тактах (латентность)), но знали бы их твердо.
Этой каши я и пытаюсь избежать со школьниками. Вот мои слайды на тему:
https://docs.google.com/presentation/d/e/2PACX-1vSvtu1KA49aFnO7PfP4XxA8-Sd4laUrkQy1SxCZjSBLivTEtCV_YS9H-eh4FULqZ3xakYBNKHM7YGyB/pub?start=false&loop=false&delayms=3000
rukhi7
так это какая то частная терминология вашей конкретной школы! Получается вы хотели чтобы я угадал как вы определяете ваши же термины? Это несколько наивно, на мой взгляд. Ну значит я действительно не знаю что вы имете ввиду с этими вашими названиями.
Если человек делает суждения на основании пары (четверки) не угаданных определений, которые он придумал, это тоже выглядит несколько наивно для меня. Ну и ладно.
на том уровне на котором действует изображенный вами клок говорить о вычислениях рановато на мой взгляд. А на том уровне на котором вычисления действительно идентифицируются, этого клока уже нет и для того чтобы сделать вычисления детерменированными используются уже совсем другие механизмы, насколько я знаю, хотя без клока ничего конечно работать не будет.
Я бы сказал что клок делает работу любого реального вычислителя возможной, то есть он вносит вклад во все и в любые аспекты работы реального вычислителя! Съужать свой взгляд только до нюансов детермениованности вычислений, на мой взгляд, несколько ограниченное понимание цифровой схемотехники, на мой взгляд.
YuriPanchul Автор
Как я написал ниже я редактор одного учебника и редактор перевода другого, то есть я согласовывал все термины в том числе с преподавателями российких вузов (МГУ, МФТИ, МИФИ, ВШЭ МИЭМ, ИТМО итд)
https://www.dmkpress.com/author/7697/?srsltid=AfmBOoqNLn7TimLiR147S40kF1IEJXHKYqqZEyPVQMJTCcOpCplpXmPe
В частности мы провели кучу совещаний по зуму для устаканивания правильных формулировок для всего. Вы можете скачать книгу отсюда
https://silicon-russia.com/public_materials/2016_11_04_one_day_mipsfpga_connected_mcu_materials_public_for_the_website/03_present_the_book_ddca_by_harris_and_harris/digital-design-and-computer-architecture-russian-translation_July16_2016.pdf
Я привел не все слайды. Вот про взаимодействие clock-а и вычислений: комбинационная логика - вычисляет, D-триггеры (для которых clock) хранят состояние:
rukhi7
я тоже могу написать книгу. Только не очень понятно что доказывает наличие написанной книги.
Картинки которые вы привели... их куча в описаниях микроконтроллеров тоже. Принципиальным отличием на мой взгляд является что в ФПГА действительно проектируется и программируется именно цифровая схема полностью, а периферия микроконтроллеров позволяет программировать -конфигурировать только некоторые элементы уже существующей цифровой схемы. Но в последних и самых навороченных (уже) процессорах периферия вполне приближается к возможностям частей ФПГА.
внутренности ФПГА тоже можно рассматривать как схему только с очень большими возможностями ее конфигурации , конфигурации ее ячеек и соединений между ними. Конфигурация программируется и проектируется и верифицируется, так же как и любая другая конфигурация, и конфигурация периферийных модулей микроконтроллера в том числе. Если микроконтроллер работает на частоте 1.5 Гига Герца как у меня сейчас, времена там измеряются в нано секундах и доходит до их долей, но надо стараться чтобы не доходило, это само собой не получается, надо стараться.
YuriPanchul Автор
Микропроцессорное ядро в микроконтроллере - это схема, которая выбирает из памяти цепочку инструкций которая является программой. Выглядит это так:
Цифровая часть периферийных блоко в микроконтроллере это тоже схемы, которые реализованы на верилоге и общаются с программой работающей в микроконтроллере через "регистры ввода вывода" (memory mapped I/O), просто адреса на шине которые воспринимаются программой как адреса в памяти.
Программа - это цепочка инструкций, хранится в памяти. Никакого тактового сигнала в ней нет, хотя она может конфигурировать периферию, которая формирует тактовый сигнал (но это особый случай использования).
Само по себе процессорное ядро, написанное на верилоге с использованием тактового сигнала clock, превращается в схему - граф из логических элементов и D-триггеров. Вычисления в ALU, FPU итд (например вычисления следующего адреса перехода) выполняются с помощью комбинационной логики (графа из логических элементов), в сложных случаях (например в FPU) - с помощью комбинирования логических элементов и D-триггеров в конечные автоматы и конвейеры обработки данных.
Вот как выглядит процесс превращения верилога в кристалл:
FPGA - это альтернативный маршрут испольвания верилога, при котором мы получаем не маску из транзисторов и соединений для производства на фабрике, а файл конфигурации, который загружается в FPGA и биты которого через мультиплексоры контролируют логические функции и соединения ячеек:
Так как статический анализ тайминга (static timing analysis - STA) - это термин применяющийся только для задержек внутри такта (clock cycle) схемы, и так как тактовый сигнал есть для ASIC и для FPGA схемы и нет для программы (цепочки инструкций), то статического анализа тайминга в рамках программы нет и быть не может.
В рамках програмы может быть только анализ производительности на уровне подсчета выполненных инструкций и прошедших тактов. Но ничего внутри такта.
Замечу что FPGA может работать как двухслойная коннструкция : реализовывать схему процессора (в рамках этой реализации STA есть), который выполняет программу (для которой STA нет).
YuriPanchul Автор
Вот как выглядит анимация простейшего вычисления - счетчика: комбинационный сумматор - вычисляет, а регистр из двух D-триггеров по положительному фронту тактового сигнала сохраняет каждый такт результат:
rukhi7
Мультфильм конечно красивый, только с точки зрения электроники это как раз какая-то каша. Как это у вас значение на входе сумматора переключается в Х? Как это на одной стороне провода (шины) значение, а с другой стороны Х, этот провод это наверно тоже какой-то тригер?
Потом как это одна линия передает фронты, а другая линия значения, то есть это шина, не надо их различать?
И что-то не понятно сумматор на чистой логике вы тоже называете D-тригер? Если вы решили тригером называть какую-то конструкцию из тригеров, я действительно этого угадать не мог, я к таким вольностям отношусь с большим скепсисом, уж извините.
В общем для меня это не схема, а какая-то несуразица, как и принято в мультипликации, по мультипликации это определенно оценка "отлично"!
YuriPanchul Автор
Х в данном контектсе означает, что внутри такта, когда начинают меняться входы комбинационного сумматора, то выходы меняются не сразу. Сначала, через contamination delay, они меняться начинают (X означает неопределенное значение), причем там могут появиться даже значения которые не 0 и не 1, а с промежуточными уровнями напряжения. Затем (через propagation delay) изменения устаканиваются.
Нет, комбинационный сумматор на чистой логике - это не D-триггер, откуда вы взяли что я его так называю?
Вы это все поймете если прочитаете мои слайды по ссылке, или один и двух учебников - один который мы перевели (Харрис & Харрис), а другой который составили (Цифровой Синтез). А так мне приходится выдергивать слайды без контекста из разных моих материалов.
rukhi7
Честно вам сказать? Вы считаете это инженерная формулировка: "то выходы меняются не сразу"? Вы считаете это допустимый аргумент-обоснование чего-то? Если вы десятилетиями преподаете свою дисциплину, книги пишете, мне кажется вам не позволительно допускать такие вольности типа "не сразу", то есть как рак на горе свистнет! Если это не важно то это не надо упоминать, если это важно, то это должно быть четко сформулировано.
Х ничего в данном контексте не обозначает, а только путает, так как на линиях (или концах линий) подписанных Х стоят точно известные значения в каждый момент времени и это надо четко понимать.
это то что я понял прочитав ваши слайды, из-за того что вы допускаете такие не инженерные вольности, читать дальше не вижу смысла, расхлябанность имеет тенденцию распространяться неограниченно.
YuriPanchul Автор
Я привожу анимацию в слайдах с введением в SystemVerilog. В этом языке есть константа 'x которая моделирует неопределенное значение на проводе.
Это я говорю в следующем предложении - про contamination delay и propagation delay. Если интересуют абсолютные числа, то на современных техпроцессах речь идет о пикосекундах или десятках пикосекунд.
Вы хотите сказать что там в каждый момент или 0 или 1? Но это не так. Внутри такта, пока значение не устаканилось, в реальном устройстве там могут быть даже значения из запретной зоны напряжений (то есть больше максимума для цифрового нуля и меньше минимума для цифровой единицы).
Clock то бишь тактовый сигнал как раз и нужен, чтобы гарантировать что когда придет его следущий положительный фронт , все сигналы уже устаканились.
YuriPanchul Автор
Вся фишка данной анимации, что выход из комбинационного сумматора устаканивается до прихода фронта тактового сигнала. Таким образом гарантируется что схема корректно вычисляет следующее состояние из предыдущего (состояниея в предыдущем такте).
rukhi7
ну вы блин даете! Можно подумать что на схеме нужно искать стакан, хотя я точно знаю что вы имели ввиду переходный процесс связанный с не нулевой емкостью физических дискретных элементов на которых строится аналоговая схемотехника цифровых схем. Но конденсаторы на этой схеме тоже отсутствуют, опять получается какая-то виртуальная ерунда, вроде:
" - Видишь суслика?
= Нет.
= А он есть!"
YuriPanchul Автор
В каждой электронной компании есть разделение обязанностей между разными типами инженеров. Для проектировщика логики на уровне регистровых передач (RTL designer , Register Transfer Level) емкостей и сопротивлений нет, он просто получает отчеты по задержкам и критическим путям от EDA tools, которые присылает група по физическому проектированию.
YuriPanchul Автор
При программировании Фурье-преобразования на DSP процессоре все задержки в тактах (латентности инструкций), они не имеют никакого отношения к статическому анализу тайминга (задержки внутри такта) который использовался при проектировании самого DSP).
YuriPanchul Автор
Выше я имел в виду программирование Фурье-преобразования на DSP процессоре. Если вы делаете реализацию преобразования Фурье на FPGA, то там да, нужно учитывать и статический анализ тайминга (задержки внутри такта), и латентность (задержки в тактах) для максимизации пропускной способности. Но это не программирование, это FPGA проектирование.
rukhi7
Это же субъективный вопрос, вам не кажется? Это вопрос можно ли относить FPGA проектирование к программированию, или нет, правильно? Я так понимаю что по вашему это надо запретить, правильно?
Но программирование на некотором уровне это тоже в том числе управление тригерами, использование сосредоточенных логических элементов и в том числе управление задержками нужного разрешения вплоть до наносекундных или даже пикосекундных. Если вы этим не занимались с точки зрения программирования, вы же не можете утверждать что этого не существует? А тем более убеждать того кто этим занимался что этого направления деятельности не существует? Это, опять же, тоже выглядит нескольно наивно, мне кажется.
YuriPanchul Автор
FPGA проектирование - это уровень абстракции который называется проектирование на уровне регистровых передач (register transfer level - RTL), а также уровень микроархитектуры (стадий конвейера итд).
Программирование DSP процессоров - уровень абстракции компьютерной архитектуры, системы команд процессора.
Процессор проектируется на уровне RTL/микроархитектуры и реализует для программиста уровень архитектуры.
Это общее место для всех процессорных компаний (я работал в MIPS Technologies) и учебников типа Паттерсон-Хеннессии.
Я редактор одного учебника и редактор перевода другого, то есть я согласовывал все термины в том числе с преподавателями российких вузов (МГУ, МФТИ, МИФИ, ВШЭ МИЭМ, ИТМО итд)
https://www.dmkpress.com/author/7697/?srsltid=AfmBOoqNLn7TimLiR147S40kF1IEJXHKYqqZEyPVQMJTCcOpCplpXmPe
Brak0del
А в чём субъективность? При программировании создаётся программа, набор инструкций, которая будет выполняться на какой-то вычислительной машине. При FPGA проектировании создаётся вычислительная машина.