Установка iVerilog
С последним икарусом пришлось немного попотеть, как обычно бывает, в репах дистрибутива древняя как еда мамонта версия, а сборка из исходников падает из-за старого gcc, если вкратце — надо установить последний devtoolset и и зависимости в лице gperf:
scl enable devtoolset-4 bash sudo yum install -y gperftools gperf gperftools-devel gperftools-libs
Теперь можем собирать икарус с верилогом, особенности, после клонирования переключаемся на метку версии v10_1, при сборке передаём компиляторы опции, позволяющие оптимизировать код под инструкции конкретного процессора, на котором идёт сборка, ну и затем собираем сборку в четыре потока:
git clone git://github.com/steveicarus/iverilog.git cd iverilog git tag git checkout v10_1 autoconf sh autoconf.sh ./configure --prefix=/opt/iverilog-v10_1 \ CFLAGS='-O2 -g -pipe -march=native -m64 -mtune=native' \ CPPFLAGS='-O2 -g -pipe -march=native -m64 -mtune=native' make -j4 sudo make install
Установка просмотрщика дампа GTKwave
iVerilog установлен. Докучи поставим GTKwave для просмотра дампов, гененируемых iVerilog’ом, тут всё просто — ставим из репо EPEL:
sudo yum install -y gtkwave
Использование iVerilog
Соорудим конфиг файл, которым будем настраивать окружение CLI на запуск и работу с iverilog:
$ cat /opt/iverilog.setup export PATH=/opt/iverilog-v10_1/bin:$PATH export COCOTB=/opt/cocotb
Настраиваем окружение командой (обратите внимание на пробел после точки):
. /opt/iverilog.setup
Компилируем исходники (здесь и далее — куски из мейкфайла), указывая в конце командной строки список из RTL & TB:
iverilog -g2005-sv -I./rtl -D$(DEFINE) -s tb -o $(PROJECT).vvp src/$(PROJECT)_tb.v rtl/$(PROJECT).v
-
-g2005-sv — указываем какой версии верилога соответствуют исходники
- -Irtl — перечисляем инклюд-директории
- -D$(DEFINE) — передаем дефайны
- -s tb — указываем имя топ-модуля
- -o $(PROJECT).vvp — задаём путь и имя выходного файла
Запускаем моделирование (lxt2 — рекомендованный формат записи дампа, он прогрессивный и со сжатием):
vvp -n $(PROJECT).vvp -lxt2
Работа с дампом
Открываем записанный дамп в GTKwave:
gtkwave $(PROJECT).vcd $(PROJECT).gtkw &
gtkw — это формат txt-подобного конфига для GTKwave (SaveFile в терминах GTKwave), его первичный вид можно получить открыв дамп и настроив GTKwave по своему вкусу, а потом дав команду «Write Save File» из меню.
Пример открытого дампа с преднастроенным файлом gtkw:
Пример файла gtkw:
[*] GTKWave Analyzer v3.3.61 (w)1999-2014 BSI [*] [dumpfile] "gost_28147_89.vcd" [dumpfile_mtime] "Jul 22 12:25:13 2015" [dumpfile_size] 4145 [savefile] "gost_28147_89.gtkw" [timestart] 0 [size] 2071 1068 [pos] -1 -1 *-16.000000 48600 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 [treeopen] tb. [treeopen] tb.u_cipher. [sst_width] 218 [signals_width] 360 [sst_expanded] 1 [sst_vpaned_height] 306 @28 tb.u_cipher.rst[0] [color] 3 tb.u_cipher.clk[0] tb.u_cipher.select[0] tb.u_cipher.kload[0] @23 [color] 7 tb.u_cipher.key[255:0] @28 tb.u_cipher.load[0] @22 [color] 2 tb.u_cipher.pdata[63:0] @28 tb.u_cipher.done[0] @28 tb.u_cipher.kindex[2:0] tb.u_cipher.mode[0] [pattern_trace] 1 [pattern_trace] 0
Также GTKwave поддерживает tcl-подобные скрипты, но нормальных гайдов по нему не попадалось, а жаль — думаю там более вменяемый синтаксис (памятуя о tcl-скриптах для модельсима).