|
|
  |
Вопрос по DPI |
|
|
|
Jan 25 2018, 20:13
|
Частый гость
 
Группа: Свой
Сообщений: 101
Регистрация: 24-02-14
Из: Москва
Пользователь №: 80 661

|
Всем привет! Решил освоить использование си файлов для симуляции в систем верилоге< но столкнулся с некоторыми трудностями и где про это почитать пока не понял... https://groups.google.com/forum/#!topic...log/zs3k_VjVbSI - вот простенький пример, я работаю на вивадо 17.1 В принципе все что написано понятно, НО как добавить си файл и си функцию? создаю файл систем верилог, туда перекидываю то, что по ссылке, а как си код добавить - не понимаю пока. Через гуй .c файлы не добавляются, а если через tcl add_files, то он добавляется, но определяется как анноун и судя по логу FATAL_ERROR: Vivado Simulator kernel has encounted an exception from DPI C function: calc_sine(). Please correct. ничего он не подключает... Помогите пожалуйста - объясните по пунктам - где как что подключать, было бы круто, если на примере того что по ссылке Заранее спасибо! P.S. Что бы не переходить по ссылке, копирую сюда тот код Код ------------------------------------------------------------------------------- module sine_sv_tb (output real sine_val); parameter cycles = 5; real inc_rad, angle; int i, j;
import "DPI-C" pure function real calc_sine(input real angle);
class rand_sine; rand byte steps; rand byte amplitude; shortreal sine_val; real pi = 3.14159265; real inc_rad; constraint c1 {steps > 15;} constraint c2 {amplitude inside{[16:64]};}
function real calc_rad; calc_rad = (2 * pi) / steps; endfunction endclass
rand_sine rs1 = new;
initial begin for (i=0; i<cycles; i++) begin assert (rs1.randomize()) else $display("Randomize failed"); $display("Amplitude : %d Steps : %d",rs1.amplitude, rs1.steps); inc_rad = rs1.calc_rad; $display("Radian increment : %f ",inc_rad); angle = 0.0; for(j=0; j<(rs1.steps); j++) begin sine_val = calc_sine(angle) * rs1.amplitude; // call the C function #5ns angle = angle + inc_rad; $display("Step : %d Sine Value : %f",j,sine_val); end end $stop(); end
endmodule
------------ C function -------------------- #include <math.h> #include <dpiheader.h>
double calc_sine(double angle) { return(sin(angle)); } ------------------------------------------ PPS Скорее надо было написать в ветвь вопросов по языкам, но я поторопился
|
|
|
|
|
Jan 26 2018, 11:43
|
Частый гость
 
Группа: Свой
Сообщений: 101
Регистрация: 24-02-14
Из: Москва
Пользователь №: 80 661

|
Цитата(AVR @ Jan 26 2018, 12:49)  Да, это туда надо было. Если не секрет, для чего планируется использовать DPI? Если для тригонометрических функций, то они есть в System Verilog. Для общего развития, объективно навороченную математику удобнее на си писать, но конкретной задачи пока нет< решил просто посмотреть как это работает. Тригонометрия, как я понимаю и в обычном верилоге есть (если вы про $sin - такого плана), я правда ее не использовал еще, но по идее должно работать. Цитата(Kuzmi4 @ Jan 26 2018, 12:38)  2 Lutovid а вам принципиально использовать именно Vivado Simulator? Совершенно нет, просто я обычно запускал симуляции через гуй и поэтому особой разницы в этом плане в симуляторах нет, и в Questa и в Vivado Simulator нужно как-то эти файлы подсовывать Команды ниже в принципе все открывают как надо и вэйвформа есть, единственное, что смущает< это то, что строка с xelab тоже запускает симуляцию - я думал строка xsim должна ее запускать с симулятором вместе =/ Код xsc function1.c function2.c xelab -svlog ../sim_1/new/dpi_tst.sv -sv_root abc -sv_lib dpi -R -debug typical xsim work.m
|
|
|
|
|
Jan 26 2018, 12:07
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(Lutovid @ Jan 26 2018, 14:43)  Для общего развития, объективно навороченную математику удобнее на си писать, но конкретной задачи пока нет< решил просто посмотреть как это работает. Тригонометрия, как я понимаю и в обычном верилоге есть (если вы про $sin - такого плана), я правда ее не использовал еще, но по идее должно работать. Не в обычном, но в System Verilog есть. Я первое время этого не знал и страдал с PLI/VPI. Возможно Вас заинтересует, я использую Python не просто как язык написания расширений, но и вообще для построения тестбенчей, т.е. полноценного взаимодействия со входами и выходами Verilog-модуля. Как раз из-за математических "способностей" языка Python. https://github.com/potentialventures/cocotbА от чистого PLI/VPI отказался из-за неудобства его использования, равно как и неудобства SV, при всех его широких возможностях, практика показывает его неудобство для моих задач. Cocotb хоть и использует относительно старый VPI, но там никакой сложности от этого не ощущается. Код xsc function1.c function2.c Поддерживается только Си? Или Си++ тоже? Собирать библиотеки dll/so не требуется?
--------------------
|
|
|
|
|
Jan 26 2018, 13:07
|
Частый гость
 
Группа: Свой
Сообщений: 101
Регистрация: 24-02-14
Из: Москва
Пользователь №: 80 661

|
Цитата(AVR @ Jan 26 2018, 15:07)  Не в обычном, но в System Verilog есть. Я первое время этого не знал и страдал с PLI/VPI. Возможно Вас заинтересует, я использую Python не просто как язык написания расширений, но и вообще для построения тестбенчей, т.е. полноценного взаимодействия со входами и выходами Verilog-модуля. Как раз из-за математических "способностей" языка Python. https://github.com/potentialventures/cocotbА от чистого PLI/VPI отказался из-за неудобства его использования, равно как и неудобства SV, при всех его широких возможностях, практика показывает его неудобство для моих задач. Cocotb хоть и использует относительно старый VPI, но там никакой сложности от этого не ощущается. Код xsc function1.c function2.c Поддерживается только Си? Или Си++ тоже? Собирать библиотеки dll/so не требуется? Как раз строка xsc компилит .so файл, который и подлинковывает. dll еще не пробовал, С++ не пробовал. Спасибо за ссылку, правда я с питоном вообще дел не имел, но интересно посмотреть. Просто мои задачи на 99% связаны с дообработкой на компьютере данных с плис и если я вставлю непосредственно код дообработки на компьютере в симуляцию(хоть некоторые функции), то это позволит более качественно проводить верификацию Про VPI я наталкивался на сообщения, что он перестает поддерживаться в вивадо, поэтому я как-то с опаской на это смотрю
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|