Установка 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-скриптах для модельсима).