Программируемая Логика - увлекательный и своеобразный мир - к сожалению среди большинства из нас, знатоков Python, JS, Go, Java, C++ да и среди любителей Arduino и прочих микроконтроллеров она не так широко "распростирает свои руки".
Давно хотелось среди задачек и головоломок на "обычное" программирование внедрить на сайте и горстку упражнений из этой таинственной области. Мешало банальное отсутствие собственного опыта в ней (за исключением нескольких занятий по AHDL в далёкие вузовские годы).
Мотивация (или везение?) пришло с очередной новой работой - хотя она не связана с PLD/FPGA, но в моей текущей компании эти направления значительно развиты, есть и знатоки - которые подсказали кое-что по инструментам, по выбору языка - а заодно показали и репозиторий с "домашками" от их собственного курса... Я засучил рукава, добавил компилятор в "песочницу" и вот уже первые несколько заданий ждут энтузиастов :) Также ждём знатоков которые захотят помочь с идеями новых задач и верификацией существующих. Итак, переходим к подробностям...
Подробности
Как можно понять из заголовка, в качестве языка "по совету коллег" выбран Verilog (точнее, конечно, SystemVerilog) - хотя с VHDL у них почти равное количество проектов на GitHub-е например, но кажется что Verilog чуточку ближе по синтаксису к привычным императивным языкам (хотя это довольно обманчиво). К тому же раз коллеги поделились материалами которые можно хотя бы частично использовать - да и самому поучиться!
Список задач будет здесь, по тегу "verilog" - и будет пополняться.
Кроме того видно что по тегу "logic" есть ещё пара более ранних задач, но использующих некий кастомный синтаксис для описания логических элементов и сигналов.
Задачи ориентированы на отсутствие каких-либо знаний по Verilog - так чтобы любой желающий был в состоянии разобраться. Впрочем собственного тьюториала создавать цели у нас нет, поэтому дана ссылка на некий посторонний тьюториал.
Как сказано, в "песочницу" добавлена возможность запускать код на Verilog - в виде компилятора/симулятора ICARUS Verilog (iverilog). По нему есть некоторые сомнения у коллег, но зато он же используется в онлайновой туле "EDAPlayground" которой тоже может быть удобно пользоваться - так что выбор обусловлен совместимостью.
В задачах сверху присутствует ссылка на небольшую страничку с полезными инструментами, тьюториалами и благодарностями.
Первые задачи
Реализовать логическую функцию "импликации" - её описание дано, а код уместится легко в одно выражение.
Воплотить функционал RS-триггера - ну это логично, от простой функции переходим к элементу с "состоянием".
Мультиплексор 4-на-4 - в вышеупомянутом репозитории предложено аж 7 вариантов как это сделать - так что здесь можно с удобством проверить любой из этих вариантов который вы захотите воплотить.
D-триггер - как эволюция RS-триггера, и как плавный переход к счетчику/делителю и сдвиговому регистру.
Каждый Третий Бит - опять же по мотивам одного из заданий из репозитория - нужно сконструировать что-то вроде делителя на 3.
Сожаления
Нужно иметь в виду что у автора заданий (меня) уровень изначально также нулевой, так что я осваиваю всё вместе с вами. Безусловно это не гарантирует качества, но надо же с чего-то начать :)
Поэтому фидбэк от знатоков (кроме "всё завали, удали, не суйся") будет воспринят с благодарностью.
Отдельная проблема в том что поскольку сайт ориентирован на автоматическую проверку, не видно какой-то удобной возможности учить разным подходам к решению одной и той же проблемы. Например как упоминалось, в "Школе Цифрового Дизайна" мультиплексор предлагается сделать 7 разными способами - но я-то на сайте не готов писать анализатор кода который будет докапываться, каким же способом человек решил задачу.
Аналогично - есть задание "сделать сумматор используя только логические операции" - это очень интересно и полезно - но на текущий момент как предотвратить возможность сдачи решения в котором два числа сложены просто "плюсиком" - неясно (проверка на наличие символа плюс в коде вряд ли хорошая идея).
Благодарности
Я исключительно признателен коллегам, кто помог советами, чтобы начать двигаться по этому пути. Также как и коллеге этих коллег, Юрию - владельцу вышеупомянутого репозитория с любопытными упражнениями. Здесь не перечисляю т.к. не хочу покушаться на правила Хабра в отношении упоминания компаний - но во введении к задачам на самом сайте, по-видимому, ничего не мешает выразить признательность более подробно - так я и поступил.