Перейти к содержанию

    

Вопрос по DPI

Всем привет!

Решил освоить использование си файлов для симуляции в систем верилоге< но столкнулся с некоторыми трудностями и где про это почитать пока не понял...

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 Скорее надо было написать в ветвь вопросов по языкам, но я поторопился

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

https://www.xilinx.com/support/documentatio...-simulation.pdf

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 Lutovid

а вам принципиально использовать именно Vivado Simulator?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
PPS Скорее надо было написать в ветвь вопросов по языкам, но я поторопился

Да, это туда надо было.

Если не секрет, для чего планируется использовать DPI? Если для тригонометрических функций, то они есть в System Verilog.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Да, это туда надо было.

Если не секрет, для чего планируется использовать 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Для общего развития, объективно навороченную математику удобнее на си писать, но конкретной задачи пока нет< решил просто посмотреть как это работает. Тригонометрия, как я понимаю и в обычном верилоге есть (если вы про $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 не требуется?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Не в обычном, но в 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 я наталкивался на сообщения, что он перестает поддерживаться в вивадо, поэтому я как-то с опаской на это смотрю

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация