Найти в Дзене
Feeling in Embedded

Моделирование цифровых схем в Icarus Verilog и GTK-wave

Оглавление

Изучая книгу "Цифровая схемотехника и архитектура компьютера" Девида М. и Сары Л. Харрис, в частности практическое приложение по программированию ПЛИС компании Intel в IDE Quartus, появилась необходимость моделирования и симуляции работы разрабатываемых программ.

Рис.1 - Пример временной диаграммы
Рис.1 - Пример временной диаграммы

На выбор имелось три программных продукта: Questa, ModelSim и Icarus Verilog. ModelSim ранее поставлялся вместе с Quartus и при инсталляции IDE можно было дополнительно установить эту программу. На смену ModelSim будущих дистрибутивах Quartus компания Intel будет поставлять симулятор Questa, как указанно по ссылке с 21.3 версии включительно. Icarus Verilog является (как указанно на официальном сайте) инструментом для моделирования и синтеза HDL Verilog, представляет собой консольную программу.

Questa и ModelSim являются мощными инструментами анализа и моделирования, практические задания, которые даются в лабораторных работах курса не задействуют большей части их функционала. Так же данные программы являются проприетарными, а студенческие лицензии из-за текущих событий отзывают.

В связи со всем вышеописанным мой выбор пал на Icarus Verilog. Его бесплатно и без регистрации можно скачать по ссылке. При инсталляции так же можно установить GTK-wave, данное программное обеспечение является бесплатным wave-просмоторщиком. Связка GTK-wave и Icarus Verilog покрывает почти все, если не все, задачи, которые ставятся перед студентом в процессе обучения.

Рассматривать процесс установки и работы с Iverilog будем для двух операционных систем Ubuntu 20.04 и Windows 10, в связи с этим последующий материал будет разбит на два блока.

Для проверки работы напишем небольшой модуль на языке Verilog и testbench для него. Листинги файлов представлены ниже:

// файл нашего модуля
0 module test (
1 input [1:0] a,
2 output [3:0] b
3);
4
5 // logic gate NOT
6 assign b[0] = ~a[0];
7
8 // logic gate AND
9 assign b[1] = a[1] & a[0];
10
11 // logic gate OR
12 assign b[2] = a[0] | a[1];
13
14 // logic gate XOR
15 assign b[3] = a[0] ^ a[1];
16
17 endmodule

И файл тестов - testbench:

0 `timescale 1ns/1ps
1
2 module testbecnh;
3 reg [1:0] a;
4 wire [3:0] b;
5
6 test dut (a, b);
7
8 initial begin
9 $dumpfile("out.vcd");
10 $dumpvars(0,testbecnh);
11
12 a = 2'b00;
13 $display("first input value");
14 #10;
15
16 a = 2'b01;
17 $display("twice input value");
18 #10;
19
20 a = 2'b10;
21 $display("third input value");
22 #10;
23
24 a = 2'b11;
25 $display("fourth input value");
26 #10;
27
28 $finish;
29 end
30 endmodule

ОС Windows

Скачать установщик Iverilog можно по ссылке (я выбрал последнюю актуальную версию), после чего запускаем установщик. Далее процесс установки представляет собой пользовательское соглашение, предупреждения(не переживаем и соглашаемся), выбор корневой директории и (что важно!) дополнительной установки GTKWave и необходимых DLL библиотек. Так как Iverilog консольная программа, в заключительном окне установки требуется выбрать опцию добавления программы в переменные окружения, чтобы ее можно было вызывать из любой директории.

Теперь Icarus на вашем персональном компьютере. Проверим корректность установки, для этого введем следующую команду в cmd:

iverilog -v

В поле командной строки вы должны увидеть версию установленного симулятора и набор опций для его использования.

Введем следующую команду:

gtkwave

После выполнения команды у вас должно было открыться окно программы просмоторщика. Если все пред идущие этапы прошли успешно переходим к написанию скриптов для автоматической симуляции.

Скрипт имеет смысл положить отдельную папку, к примеру simulation, там будут хранится файлы симуляции, отдельно от остальных файлов проекта. Структура каталога проекта должна иметь следующий вид:

Current Project:
-- test.v
-- testbench.v
-- /simulation:
-- sim.bat

Перед началом написания скрипта сформируем алгоритм его работы:

  1. компиляция исходных файлов Verilog в "исполняемый файл" Icarus Verilog;
  2. запуск симуляции исполняемого файла
  3. открытие результата симуляции программой GTK-wave.

Теперь на основе алгоритма сформируем .bat файл. Листинг файла представлен ниже:

rem create sim ext file
iverilog -o extFile ..\test.v ..\testbench.v

rem start sim process
vvp extFile

rem open GTK-wave
gtkwave out.vcd

Теперь запустим двойным кликом получившийся файл, при верном выполнении всех шагов получим результат представленный на рисунке 2.

Рис.2 - Результаты моделирования программы в Icarus Verilog представленные в программе GTK-wave
Рис.2 - Результаты моделирования программы в Icarus Verilog представленные в программе GTK-wave

Получившийся скрипт можно использовать для моделирования своих модулей, перед этим потребуется создать папку в корневой директории проекта и поменять имена модулей в .bat файле.

ОС Linux

Открываем терминал Linux комбинаций клавишей Ctrl-Alt-T и обновляем систему:

sudo apt update & apt upgrade

После скачиваем Icarus Verilog:

sudo apt install iverilog

Далее ставим GTK-wave:

sudo apt -y install gtkwave

Все необходимые инструменты установлены, проверим корректность установки:

iverilog -v

В терминале должна быть выведена информация о версии программы и ее опциях. Введем следующую команду:

gtkwave

Должен открыть графический интерфейс программы GTK-wave.

Далее как и в предыдущем разделе создаем отдельную папку simulation для файлов симуляции. Автоматизацию моделирования схемы на Linux я буду проводить при помощи утилиты make(ее не требуется скачивать, она идет по умолчанию в дистрибутивах Linux). Данная утилита позволит выполнить последовательность команд, описанных в Makefile.

Создаем наш make-file:

touch Makefile

Открываем его любым текстовым файлом и вводим следующие команды:

0 task: compile simulation view_wave
1
2 compile:
3 iverilog -o extFile ../test.v ../testbench.v
4
5 simulation:
6 vvp extFile
7
8 view_wave:
9 gtkwave out.vcd

В строчках 3,6 и 9 перед командами обязательно должен быть символ табуляции, иначе появится ошибка об отсутствии сепаратора, в make таким образом команды отличаются от меток. Последовательность действий аналогична скрипту в Windows.

Для запуска вводим в терминал из директории, где лежит наш Makefile следующую команду:

make

И получаем результат аналогичный в разделе Windows.

Заключение

Связка Icarus Verilog и GTK-wave хороший инструмент для анализа логики работы, проверки верности заложенных алгоритмов и временных параметров разрабатываемого программного обеспечения.

Надеюсь данная статья поможет вам быстро и легко начать моделировать свои разработки благодаря Icarus Verilog.