Modelsim под Windows и Verilog VPI

Когда-то давно я написал статью "Интерфейс Verilog VPI".
В ней рассказывалось, как во время симуляции проекта Verilog вызывать функции пользовательской библиотеки, написанной на языке C. В статье использовался симулятор Icarus Verilog под Ubuntu Linux.

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

Недавно мне самому потребовалось сделать доступ к двоичному файлу очень большого размера из тестбенча Verilog и я, чтобы сделать это, перечитывал свою же статью и брал ее за основу своей новой программы-библиотеки.

В этой статье я покажу:

  • как скомпилировать библиотеку C/С++ с использованием Verilog Procedural Interface (VPI) под Windows;
  • как использовать библиотеку с Icarus Verilog под Windows;
  • как использовать библиотеку с ModelSim под Windows.

Никакой воды лить не буду.

Предположим есть текст программы, написанной на C с использованием интерфейса Verilog PLI/VPI - вот прямо беру пример mypli.c из моей старой статьи.

Чтобы скомпилировать библиотеку для использования совместно с Icarus Verilog под Windows придется установить компилятор MINGW64. Тут важно, чтобы и Icarus и компилятор MINGW были одной разрядности - следите за этим. У меня Icarus 64x разрядный, поэтому нужно компилировать библиотеку под 64х разрядную ОС.

1) запускаю командную строку CMD.EXE;
2) нужно, чтобы компилятор находился в пути поиска, возможно нужно поставить переменную окружения (у вас путь может быть другим)

set PATH=d:\Programs\mingw-w64\\mingw64\bin;%PATH%

3) нужно, определить переменную указывающую на папку с икарусом (у вас путь может быть другим)

set IVERILOG=d:\programs\iverilog

4) компилирую и линкую исходник с помощью компилятора gcc из пакета MINGW64 (получится библиотека mypli.vpi)

gcc -c -fpic -I%IVERILOG%/include/iverilog/ mypli.c
gcc -shared -o mypli.vpi mypli.o -L%IVERILOG%/lib -lvpi

Обратите внимание, что компилятору нужно указать путь к файлу vpi_user.h через опцию компилятора -I%IVERILOG%/include/iverilog/
Кроме того, при линковке нужна библиотека libvpi, поэтому ее имя и путь к ней указываются во время линковки через опции -L%IVERILOG%/lib -lvpi 

д) запуск симулятора icarus verilog нужно делать так:

iverilog -o qqq testbench.v
vvp -M. -mmypli qqq

При использовании симулятора ModelSim-Intel под виндовс так же нужно скомпилировать Сишную библиотеку, но в результате компиляции должна получиться DLL. Моделсим использует кастомные, пользовательские библиотеки именно как DLL.
Есть два способа скомпилировать библиотеку.

Способ первый - используем компилятор Visual Studio.
1) Запустим "VS2013 x86 Native Tools Command Prompt" из комплекта Visual Studio Tools. Это командная строка с установленными переменными окружения, чтобы компилятор сразу мог быть запущен и находился в пути.
2) Запускаем компилятор и линковщик:

cl -c -ID:\\altera\\18.0\\modelsim_ase\\include mypli.c
link -dll -export:vlog_startup_routines mypli.obj D:\\altera\\18.0\\modelsim_ase\\win32aloem\\mtipli.lib /out:mypli.dll

Обращаю ваше внимание, что Modelsim-Intel-Starter, тот который идет в комплекте с Intel Quartus Prime Lite Edition является 32х разрядным симулятором. Значит компилировать нужно Сишную библиотеку в 32х битную DLL.
В результате компиляции и линковки получается mypli.dll. Она будет использоваться симулятором.

Способ второй - использовать компилятор, который идет в комплекте с Modelsim.
У меня установлен Quartus версии 18.0. Я вижу компилятор установлен вот здесь: D:\altera\18.0\modelsim_ase\gcc-4.2.1-mingw32vc12
Запуск компилятора и линковщика из командной строки:

D:\altera\18.0\modelsim_ase\gcc-4.2.1-mingw32vc12\bin\gcc -c -ID:\altera\18.0\modelsim_ase\include mypli.c
D:\altera\18.0\modelsim_ase\gcc-4.2.1-mingw32vc9\bin\gcc -shared -o mypli.dll mypli.o -LD:\altera\18.0\modelsim_ase\win32aloem\ -lmtipli

В результате компиляции получается библиотека mypli.dll.
Теперь, когда библиотека с нашей новой системной функцией Verilog собрана, можно запустить Modelsim.

Сперва я сделаю текстовый файл test.do, который описывает все команды для симулятора:


vlib work1
vlog -work work1 testbench.v
vlog -work work1 my_module1.v
vlog -work work1 my_module2.v
vsim -c -pli mypli.dll work1.testbetch
run -all


Потом запущу симулятор из командной строки:
vsim -c -do test.do

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

 

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