Lutovid 0 25 января, 2018 Опубликовано 25 января, 2018 · Жалоба Всем привет! Решил освоить использование си файлов для симуляции в систем верилоге< но столкнулся с некоторыми трудностями и где про это почитать пока не понял... 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 Скорее надо было написать в ветвь вопросов по языкам, но я поторопился Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lutovid 0 25 января, 2018 Опубликовано 25 января, 2018 · Жалоба https://www.xilinx.com/support/documentatio...-simulation.pdf Нашел вот этот даташит, пример запустил, осталось понять как его запустить чтоб вивадо открыл симулятор и временную диаграмму рисовал, пока результаты выдаются только в консоли... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 26 января, 2018 Опубликовано 26 января, 2018 · Жалоба 2 Lutovid а вам принципиально использовать именно Vivado Simulator? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 26 января, 2018 Опубликовано 26 января, 2018 · Жалоба PPS Скорее надо было написать в ветвь вопросов по языкам, но я поторопился Да, это туда надо было. Если не секрет, для чего планируется использовать DPI? Если для тригонометрических функций, то они есть в System Verilog. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lutovid 0 26 января, 2018 Опубликовано 26 января, 2018 · Жалоба Да, это туда надо было. Если не секрет, для чего планируется использовать DPI? Если для тригонометрических функций, то они есть в System Verilog. Для общего развития, объективно навороченную математику удобнее на си писать, но конкретной задачи пока нет< решил просто посмотреть как это работает. Тригонометрия, как я понимаю и в обычном верилоге есть (если вы про $sin - такого плана), я правда ее не использовал еще, но по идее должно работать. 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 26 января, 2018 Опубликовано 26 января, 2018 · Жалоба Для общего развития, объективно навороченную математику удобнее на си писать, но конкретной задачи пока нет< решил просто посмотреть как это работает. Тригонометрия, как я понимаю и в обычном верилоге есть (если вы про $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 не требуется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lutovid 0 26 января, 2018 Опубликовано 26 января, 2018 · Жалоба Не в обычном, но в 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 я наталкивался на сообщения, что он перестает поддерживаться в вивадо, поэтому я как-то с опаской на это смотрю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться