Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по DPI
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Lutovid
Всем привет!
Решил освоить использование си файлов для симуляции в систем верилоге< но столкнулся с некоторыми трудностями и где про это почитать пока не понял...
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
https://www.xilinx.com/support/documentatio...-simulation.pdf
Нашел вот этот даташит, пример запустил, осталось понять как его запустить чтоб вивадо открыл симулятор и временную диаграмму рисовал, пока результаты выдаются только в консоли...
Kuzmi4
2 Lutovid
а вам принципиально использовать именно Vivado Simulator?
AVR
Цитата(Lutovid @ Jan 25 2018, 23:13) *
PPS Скорее надо было написать в ветвь вопросов по языкам, но я поторопился

Да, это туда надо было.
Если не секрет, для чего планируется использовать DPI? Если для тригонометрических функций, то они есть в System Verilog.
Lutovid
Цитата(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
AVR
Цитата(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 не требуется?
Lutovid
Цитата(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 я наталкивался на сообщения, что он перестает поддерживаться в вивадо, поэтому я как-то с опаской на это смотрю
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.