Visual Studio Code и Icarus Verilog

В этой статье попробую вкратце показать, как можно настроить Visual Studio Code для написания HDL кода на языках Verilog, SystemVerilog, настроить задачи для компиляции и симуляции работы, а также отображения результатов симуляции в GTKWave.

Написание HDL кода в Visual Studio Code по сравнению с Intel Quartus Prime порядком удобней и можно просто использовать Visual Studio Code как продвинутый редактор кода (если вам не нужна компиляция и симуляция из Icarus Verilog).

B67-0

Установка Visual Studio Code

Скачиваем Visual Studio Code для вашей ОС, в моём случае я скачал версию для Windows x64, ZIP архив (версия 1.27.1). Распаковываем\устанавливаем и запускаем, нас встречает главное окно редактора (да, да, это не полноценная IDE, как Visual Studio, а именно легкий редактор кода с возможностью кастомизации расширениями практически до уровня IDE) со стартовой страницей:

B67-1

Произведём минимальные настройки для удобства. Открываем настройки Visual Studio Code:

B67-2

В строке поиска вводим «theme» и переключаем на более приятную тему для вас (в моём случае это «Default Light+«):

B67-3

Далее в строке поиска вводим «titleBarStyle» и переключаем параметр Title Bar Style на «custom«:

B67-4

Этот параметр изменит вид меню и интегрирует само меню в заголовок окна, что экономит место и визуально редактор становится приятнее, пример этого решения в конце абзаца.

И последнее, в строке поиска вводим «minimap» и, собственно, отключаем её отображение:

B67-5

Миникарта — это вот что:

B67-6

Справа сверху отображается представление файла в мини-превью, иногда это удобно, иногда это место лучше освободить от этого превью (к примеру, открываете вертикально 2-3 файла, и это превью уже ощутимо кушает место) — тут кому как удобнее. :)

Итак, перезапускаем редактор и видим следующие визуальные изменения:

B67-7

Установка расширений для Visual Studio Code

Далее, чтобы удобно (подсветка, автодополнение) работать с Verilog, SystemVerilog, TCL файлами, нам необходимо установить расширения, поддерживающие эти типы файлов.

Открываем панель расширений (Ctrl+Shift+X):

B67-8

И в строке поиска вводим «ext:v«, ставим расширение Verilog HDL:

B67-9

Далее в строке поиска вводим «ext:sv«, ставим расширение SystemVerilog:

B67-10

Последнее, в строке поиска вводим «ext:tsl«, ставим расширение TSL:

B67-11

Вот и всё. После перезапуска Visual Studio Code установленные расширения будут активны. Да, ставить именно указанные расширения не обязательно, возможно, расширения от других авторов будут более удобны или с более богатым функционалом — не бойтесь пробовать (и пишите в комментариях, какие расширения Вам больше понравились и чем).

Пример работы расширения:

B67-12

Установка Icarus Verilog

Теперь нужно установить компилятор\симулятор HDL кода — Icarus Verilog. Скачиваем установщик под Windows (для остальных платформ смотрим Installation Guide), я скачал последнюю версию iverilog-10.1.1-x64.

При установке в целом сложностей не возникает, главное — ставьте полную версию с библиотеками:

B67-13

И не убирайте галочки добавления путей к GTKWave и в PATH:

B67-14

Ярлычки в меню Пуск и на рабочий стол я не ставил. Перезагружаем ПК или просто разлогиниваемся и снова заходим под рабочим пользователем — этого должно хватить, чтобы подхватились изменения в системной переменной PATH.

Примечание: у меня установщик никаких правок в PATH не внёс и я не сразу понял, почему не работает. Пришлось вручную внести в пользовательский PATH следующие две строки (Icarus Verilog установлен в C:\Data\iverilog\):

B67-19

Настройка проекта под Visual Studio Code

В качестве проекта возьмём counter.v и counter_tb.v из прошлой статьи «Запускаем ModelSim с Quartus Prime и без«, чего будет более чем достаточно.

Приведу их ещё раз. counter.v :

`timescale 1ns/1ns

module counter (
input wire reset,
input wire clk,
input wire [7:0]wdata,
input wire wr,
output reg [7:0]data
);
always @ (posedge clk or posedge reset)
if (reset)
data <= 8'h00;
else
if(wr)
data <= wdata;
else
data <= data + 8'h01;

endmodule

counter_tb.v :

`timescale 1ns/1ns
`include "counter.v"
module counter_tb();

reg reset, clk, wr;
reg [7:0]wdata;
wire [7:0] data_cnt;

counter DUT(reset, clk, wdata, wr, data_cnt);

always
#10 clk = ~clk;

initial begin
clk = 0;
reset = 0;
wdata = 8'h00;
wr = 1'b0;

#10 reset = 1;
#5 reset = 0;
#50;

end

initial begin
#400 $stop;
end

initial
begin
$dumpfile("out.vcd");
$dumpvars(0,DUT);
end

initial
$monitor($stime,, reset,, clk,,, wdata,, wr,, data_cnt);

endmodule

Итак, открываем корневую папку проекта, в которой и находятся файлы counter.v и counter_tb.v:

B67-15

Редактор теперь показывает открытую папку TEST и файлы в ней:

B67-16

Далее необходимо создать задачи компиляции и симуляции проекта (точнее Test Bench). Переходим в меню по пункту Terminal -> Configure Tasks, откроется следующий диалог:

B67-17

Потом:

B67-18

Создаём файл .vscode\Tasks.json из шаблона Others (нижний пункт). Собственно, после создания файла он должен открыться в редакторе — копируем туда следующий текст:

{
    "version": "2.0.0",  
    "tasks": [
        {
            "label": "Compile Verilog File",
            "type": "shell",
            "command": "cd ${fileDirname} ; iverilog -o ${fileBasename}.vvp ${fileBasename} ; vvp -N ${fileBasename}.vvp"
        },
        {
            "label": "Run GTKWave",
            "type": "shell",
            "command": "cd ${fileDirname} ; gtkwave out.vcd"
        }
    ]
}

Сохраняем. Это создание двух команд, первая — для компиляции, вторая — для отображения результатов симуляции.

Закрываем редактор, чтобы он подхватил изменения файла .vscode\Tasks.json при следующем запуске.

Примечание: Можно еще хоткеи настроить для задач, но это уже оставлю на вашу любознательность. ;)

Тест

Ну а теперь самое простое… Запускаем Visual Studio Code, папка с проектом будет открыта уже в воркспейсе (если не перемещали). Открываем файл counter_tb.v
т. к. это основной файл, с которого будет произведена компиляция и симуляция. Переходим в меню по пункту Terminal -> Run Task…, откроется следующий диалог с ранее объявленными задачами:

B67-20

Вначале выбираем Compile Verilog File и потом выбираем запуск задачи без сканирования лога выполнения:

B67-21

Успешно откомпилировано и создан файл для отображения симуляции работы (на идеальных компонентах):

B67-22

После успешной компиляции аналогичным образом вызываем Run GTKWave для просмотра результатов. Откроется основное окно GTKWave:

B67-23

Раскрываем слева экземпляр тестбенча и выделяем экземпляр DUT тестируемого модуля counter, внизу появятся его сигналы, просто перетаскиваем их в колонку Signals:

B67-24

Вот и всё! Надеюсь это будет полезно начинающим. ;)

Ссылки

  • Visual Studio Code — официальная страничка редактора кода;
  • Tasks in Visual Studio Code — полезное описание, как создавать свои команды;
  • Icarus Verilog — официальный сайт компилятора и симулятора Verilog;
  • Icarus Verilog Installation Guide — как скомпилировать и установить Icarus Verilog на любой платформе;
  • Icarus Verilog for Windows — откомпилированные бинарники Icarus Verilog (вариант для ленивых как я :D) в виде установщика под Windows.
Реклама

Добавить комментарий

Please log in using one of these methods to post your comment:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s