Изучая книгу "Цифровая схемотехника и архитектура компьютера" Девида М. и Сары Л. Харрис, в частности практическое приложение по программированию ПЛИС компании Intel в IDE Quartus, появилась необходимость моделирования и симуляции работы разрабатываемых программ.
На выбор имелось три программных продукта: 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
Перед началом написания скрипта сформируем алгоритм его работы:
- компиляция исходных файлов Verilog в "исполняемый файл" Icarus Verilog;
- запуск симуляции исполняемого файла
- открытие результата симуляции программой 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.
Получившийся скрипт можно использовать для моделирования своих модулей, перед этим потребуется создать папку в корневой директории проекта и поменять имена модулей в .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.