Visual Studio Code и ModelSim

В заметке ниже описание того, как сделать быстро вызываемую симуляцию в ModelSim из Visual Studio Code для тестбенча самописного IP.

b85-0

Подготовка Visual Studio Code

Всё в целом аналогично Visual Studio Code и Icarus Verilog, только без установки Icarus Verilog, поэтому повторяться не вижу смысла.

Тестовый проект

В качестве тестового проекта будет выступать моё недоделанное IP для HyperRAM — HyperRAM_Controller. Симуляцию будем проводить на тестбенче оттуда же.

Подготовка проекта

Если у вас свой (новый) проект\IP\модуль, на котором вы хотите опробовать работу в Visual Studio Code, то опишу все дополнения вкратце на примере моего IP:

  • В корне IP появилась папка .vscode (название и расположение важны!), тут хранятся все настройки и задачи для Visual Studio Code, минимальное необходимое содержание следующее:
    • Файл tasks.json — описание всех задач проекта, здесь можно объявить конкретный тестбенч в параметрах, и он будет симулироваться, либо переменной ${fileBasename} можно выбирать конкретный (в данный момент активный) файл, который будет симулироваться (но это не всегда удобно, особенно если у вас 1 тестбенч, то каждый раз необходимо будет переключаться на него для проведения симуляции);
    • Файл runmodelsim.cmd — скриптовый файл, в котором очищается временная папка ModelSim от прошлой симуляции, при необходимости копируются дополнительные файлы (к примеру, содержание памяти), после чего запускается компиляция и симуляция.
  • Рядом с hyperram_controller_tb.v (основной тестбенч, симуляцию которого необходимо провести) создаём hyperram_controller_tb_script.tcl, в котором описываются подключаемые файлы, платформозависимые библиотеки, параметры и сигналы, которые необходимо отобразить (всё с комментариями).

Последнее, что можно сделать для упрощения жизни, — добавить хоткей для запуска симуляции, я поставил на Ctrl + Shift + X. Как назначать горячие клавиши, можно прочесть здесь, пример моего keybindings.json :

[
{
"key": "ctrl+shift+x",
"command": "workbench.action.tasks.runTask",
"args": "Run Modelsim"
},
{
"key": "F6",
"command": "workbench.action.tasks.runTask",
"args": "Make Clean"
},
{
"key": "F7",
"command": "workbench.action.tasks.runTask",
"args": "Make Build"
}
]

Симуляция

Проверяем! Запускаем Visual Studio Code, открываем корень папки-проекта:

b85-1

Запускаем компиляцию и симуляцию:

b85-2

Загружается ModelSim:

b85-3

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

b85-4

Как это выглядит в виде сигналов:

Это слайд-шоу требует JavaScript.

Смотрим значения памяти одного из кристаллов (тут можно увидеть, что первые 2 байта перезаписаны значениями, которые заданы в тестбенче):

b85-6

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

b85-8

Ссылки

 

 

Реклама

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

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