Pull to refresh
35.17
CodeAbbey
Веб-сайт с задачами по программированию

Задачки на Verilog — новый раздел на сайте

Reading time3 min
Views2.7K

Программируемая Логика - увлекательный и своеобразный мир - к сожалению среди большинства из нас, знатоков Python, JS, Go, Java, C++ да и среди любителей Arduino и прочих микроконтроллеров она не так широко "распростирает свои руки".

Давно хотелось среди задачек и головоломок на "обычное" программирование внедрить на сайте и горстку упражнений из этой таинственной области. Мешало банальное отсутствие собственного опыта в ней (за исключением нескольких занятий по AHDL в далёкие вузовские годы).

Мотивация (или везение?) пришло с очередной новой работой - хотя она не связана с PLD/FPGA, но в моей текущей компании эти направления значительно развиты, есть и знатоки - которые подсказали кое-что по инструментам, по выбору языка - а заодно показали и репозиторий с "домашками" от их собственного курса... Я засучил рукава, добавил компилятор в "песочницу" и вот уже первые несколько заданий ждут энтузиастов :) Также ждём знатоков которые захотят помочь с идеями новых задач и верификацией существующих. Итак, переходим к подробностям...

Подробности

Как можно понять из заголовка, в качестве языка "по совету коллег" выбран Verilog (точнее, конечно, SystemVerilog) - хотя с VHDL у них почти равное количество проектов на GitHub-е например, но кажется что Verilog чуточку ближе по синтаксису к привычным императивным языкам (хотя это довольно обманчиво). К тому же раз коллеги поделились материалами которые можно хотя бы частично использовать - да и самому поучиться!

Список задач будет здесь, по тегу "verilog" - и будет пополняться.

Кроме того видно что по тегу "logic" есть ещё пара более ранних задач, но использующих некий кастомный синтаксис для описания логических элементов и сигналов.

Задачи ориентированы на отсутствие каких-либо знаний по Verilog - так чтобы любой желающий был в состоянии разобраться. Впрочем собственного тьюториала создавать цели у нас нет, поэтому дана ссылка на некий посторонний тьюториал.

Как сказано, в "песочницу" добавлена возможность запускать код на Verilog - в виде компилятора/симулятора ICARUS Verilog (iverilog). По нему есть некоторые сомнения у коллег, но зато он же используется в онлайновой туле "EDAPlayground" которой тоже может быть удобно пользоваться - так что выбор обусловлен совместимостью.

В задачах сверху присутствует ссылка на небольшую страничку с полезными инструментами, тьюториалами и благодарностями.

Первые задачи

  1. Реализовать логическую функцию "импликации" - её описание дано, а код уместится легко в одно выражение.

  2. Воплотить функционал RS-триггера - ну это логично, от простой функции переходим к элементу с "состоянием".

  3. Мультиплексор 4-на-4 - в вышеупомянутом репозитории предложено аж 7 вариантов как это сделать - так что здесь можно с удобством проверить любой из этих вариантов который вы захотите воплотить.

  4. D-триггер - как эволюция RS-триггера, и как плавный переход к счетчику/делителю и сдвиговому регистру.

  5. Каждый Третий Бит - опять же по мотивам одного из заданий из репозитория - нужно сконструировать что-то вроде делителя на 3.

Сожаления

Нужно иметь в виду что у автора заданий (меня) уровень изначально также нулевой, так что я осваиваю всё вместе с вами. Безусловно это не гарантирует качества, но надо же с чего-то начать :)

Поэтому фидбэк от знатоков (кроме "всё завали, удали, не суйся") будет воспринят с благодарностью.

Отдельная проблема в том что поскольку сайт ориентирован на автоматическую проверку, не видно какой-то удобной возможности учить разным подходам к решению одной и той же проблемы. Например как упоминалось, в "Школе Цифрового Дизайна" мультиплексор предлагается сделать 7 разными способами - но я-то на сайте не готов писать анализатор кода который будет докапываться, каким же способом человек решил задачу.

Аналогично - есть задание "сделать сумматор используя только логические операции" - это очень интересно и полезно - но на текущий момент как предотвратить возможность сдачи решения в котором два числа сложены просто "плюсиком" - неясно (проверка на наличие символа плюс в коде вряд ли хорошая идея).

Благодарности

Я исключительно признателен коллегам, кто помог советами, чтобы начать двигаться по этому пути. Также как и коллеге этих коллег, Юрию - владельцу вышеупомянутого репозитория с любопытными упражнениями. Здесь не перечисляю т.к. не хочу покушаться на правила Хабра в отношении упоминания компаний - но во введении к задачам на самом сайте, по-видимому, ничего не мешает выразить признательность более подробно - так я и поступил.

Tags:
Hubs:
Total votes 6: ↑6 and ↓0+8
Comments4

Articles

Information

Website
www.codeabbey.com
Registered
Founded
Employees
1 employee (me only)
Representative
Родион Горковенко