fpga-systems-magazine

Методика работы с Си модулями в симуляции стандартными средствами Vivado

Главная » Статьи » Xilinx » Xilinx Vivado
xakstreet
17.01.2019 12:22
6138
0
5.0

Vivado и SystemVerilog позволяют разработчику использовать модули, написанные на Си. Данный метод называется DPI (Direct Programming Interface). Данная возможность имеет ряд преимуществ:

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

Разберем простейший пример.

В документе ug900 рассмотрен пример использования DPI. Для простоты возьмем его.

1) Создаем проект с именем C_tst_prj

a) Открываем Vivado

b) Нажимаем Create Project

c) В открывшемся окне нажимаем Next

d) Выбираем директорию проекта и вводим его название

e) Выбираем rtl-проект, ставим галку в указанном поле

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

g) Нажимаем Finish

2) В папке проекта создаем папку для исходников src

3) В папке src создаем 3 следующих файла:

function1.c

int myFunction1()

{

return 5;

}

function2.c

#include <stdio.h>

int myFunction2()

{

return 10;

}

file.sv

module m();

import "DPI-C" pure function int myFunction1 ();

import "DPI-C" pure function int myFunction2 ();

integer i, j;

initial

begin

#1;

i = myFunction1();

j = myFunction2();

$display(i, j);

if( i == 5 && j == 10)

$display("PASSED");

else

$display("FAILED");

end

endmodule


4) Добавляем file.sv в пустой проект в Vivado(File->Add source->Add or create simulation sources->Add, убираем галочку с Copy sources into project, Finish)

Простейший способ запуска симуляции этого проекта команды из консоли:

1) В tcl консоли переходим в папку с исходниками (в моем случает это:”cd C:/Vivado16_1_Projects/C_tst_prj/src/”)

2) Выполняем следующие команды:

exec xsc function1.c function2.c – генерируется .so файл и подлинковывается к проекту(если у вас линукс, если windows, то расширение будет .a)

Видим результат исполнения команды:

Done compilation
Done
linking: "<Путь к папке проекта>/C_tst_prj/src/xsim.dir/xsc/dpi.so"

exec xelab -svlog file.sv -sv_lib dpi – генерируем снэпшот для симуляции

Результат исполнения команды:

3) Теперь можно запустить симуляцию, воспользуемся штатным xsim, выполняем

xsim work.m

В открывшемся симуляторе нажимаем запуск

Как можно видеть симуляция прошла успешно.

 

Усложняя этот пример я столкнулся с некоторыми неудобствами – если проект разрастается и в нем появляются xci файлы, это приводит к тому, что эти самые файлы надо перечислять в проекте симуляции, что для меня было совершенно не удобно, так как необходимо было заменять некоторые ядра и запускать симуляцию заново – не удобно каждый раз менять список подлинковываемых файлов. Соответственно есть более удобный метод, не использующий непосредственно команду xelab. В Vivado есть возможность использовать хуки, соответственно этой возможностью я и воспользовался.

Создаем в папке src файл script.tcl в котором будет содержаться всего одна строка:

exec xsc \<Абсолютный путь к файлу>\function1.c \<Абсолютный путь к файлу>\function2.c

*я делал так, но можно привязаться к директории проекта – по желанию

Открывает настройки проекта (Tools -> Settings -> Simulation->Compilation) и в настройках симуляции есть поле xsim.compile.tcl.pre в него добавляем ссылку на script.tcl – таким образом без лишних манипуляций со стороны разработчика .so библиотека будет подлинковываться при нажатии на кнопку симуляции.

*В моем случае я заранее перешел в папку src поэтому ссылка выглядит так.

Во вкладке Elaboration в поле xsim.elaborate.xelab.more_options прописываем: “-debug all -sv_lib dpi” – подключение библиотек dpi и включение режима отладки поддерживающего просмотр вэйвформ.

Таким образом теперь симуляцию проекта можно запускать как обычно из gui vivado, а при необходимость добавить Си файл, его нужно просто вписать в файле скрипта, который запускается хуком.

Литература

UG900: Vivado Design Suite User Guide Logic Simulation

6138
0
5.0

Всего комментариев : 0
avatar

FPGA-Systems – это живое, постоянно обновляемое и растущее сообщество.
Хочешь быть в курсе всех новостей и актуальных событий в области?
Подпишись на рассылку

ePN