Если в первой части я лишь подготавливал уютную среду для разработки на Verilog, то сегодня буду смотреть обучающие видосики, да воспроизводить те вещи, о которых идёт речь.
Первый видос был вводным, во втором рассказывали, как создавать повторитель. Именно его я взял за основу проекта, который впоследствии снабдил Makefile-ом для быстрого построения и заливки на macOs.
Ну - теперь возьмёмся за 3-й видос, в котором создаётся сумматор:
И пусть я уже давно знаю, что сумматор на языке verilog можно создать при помощи одного лишь оператора "+", но я предпочитаю повторять всё, чему учат, раз чему-то там учусь. Хотя... просто повторять - это же скучно. Давайте что-нибудь привнесём своё.
Например, воспользуюсь я циклом для создания нескольких однотипных элементов. svls заботливо подсказал, что у них так не принято, и цикл почему-то нужно засунуть внутрь какого-то там generate. Ну что-ж, гуглим, копипастим, работает. Получилось как то так.
Вот только на ПЛИС заливать такое - нет смысла, на платке у меня всего 4 кнопки, как то уж слишком мало для подобных тестов. Значит обойдёмся testbench-ем. Набираю:
make
в консоли появилось:
iverilog -g2009 -o output/adder adder_tb.v
output/adder;
VCD info: dumpfile adder.vcd opened for output.
21 + 12 = 33
85 + 5 = 90
77 + 1 = 78
mv ./adder.vcd output/adder.vcd
А ещё был создан файлик output/adder.vcd, в котором вот такое.
Не сложно разглядеть, что содержимое vcd файла полностью соответствует выводу в консоль, но в 16-ричном формате. Заодно, там можно ещё и шину переноса посмотреть.
И пусть у меня нет диплома о высшем математическом образовании, я могу предположить, что сумматор решил всё верно
(особенно в примере 77 + 1 = 78)
Но давайте честно - очень скучный пример, хотя и его я сложил в репозиторий:
https://github.com/alexey-asmodean/fpga-learn/tree/master/01_adder
Ну и да - открыл vcd файл с изображением сигналов я прямо в VSCode, используя это расширение