Журнал Эмбеддед-Инженера

Установка и использование Icarus Verilog в линукс на примере CentOS 7

Установка 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:

GOST-R34.12-2015 L-stage

 

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

PS: если заметка помогла Вам, поделитесь ей с друзьями или коллегами: