1. Начальная настройка окружения

Создание прошивки для ПЛИС (FPGA) трудоемкий процесс, который может занимать несколько часов даже в средних проектах. Поэтому для тестирования кода для ПЛИС обычно применяется симуляция. В данном разделе мы научимся запускать код в симуляторе и по ходу настроим базовое окружение для написания кода.

В контексте ПЛИС, симулятор — программа, интерпретирующая код на язык описания аппаратуры (HDL) и исполняющая его как обычную программу.

SystemVerilog умеют симулировать open-source решения Verilator и Icarus Verilog, а также большинство промышленных симуляторов от таких компаний как Xilinx, Altera, Lattice.

Мы будем использовать Icarus Verilog.

В большинстве дистрибутивов Linux Icarus Verilog присутствует[1] в репозиториях. Тем не менее у проекта давно не выходили новые версии, а вот изменений накопилось достаточно (на момент июня 2024 года)[2], поэтому предлагается собрать проект самостоятельно по инструкции.

Проверим работу симулятора на классическом примере — Hello, world!. Команда курса рекомендует для написания кода использовать связку из VS Code с расширением Verilog-HDL/SystemVerilog/Bluespec SystemVerilog и линтерами Icarus Verilog и Verible. Подробнее о настройке данной связки можно прочитать в отдельной инструкции.

Создадим файл hello_world.sv следующего содержания:

src/01-basic-environment/hello_world.sv
module hello_world;
  initial begin
    $display("Hello world!");
    $finish;
  end
endmodule

В примерах все исполняемые файлы будут генерироваться в директории build[3]. Для корректной работы iverilog её необходимо заранее создать.

$ mkdir build

Для генерации исполняемого файла выполним команду:

$ iverilog hello_world.sv -g2012 -o build/hello_world

А затем запустим с помощью:

$ build/hello_world

Вывод должен выглядеть примерно так:

Hello world!
hello_world.sv:4: $finish called at 0 (1s)

Теперь разберем подробнее команду для компиляции:

hello_world.sv

Имя файла, который мы собираем. В сложных проектах может быть перечисленно несколько файлов.

-g2012

Включает поддержку стандарта SystemVerilog 2012.

-o build/hello_world

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


3. Это не обязательно, однако удобно для использования с системами контроля версий.