реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Вопрос по DPI
Lutovid
сообщение Jan 25 2018, 20:13
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 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 Скорее надо было написать в ветвь вопросов по языкам, но я поторопился
Go to the top of the page
 
+Quote Post
Lutovid
сообщение Jan 25 2018, 23:01
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 24-02-14
Из: Москва
Пользователь №: 80 661



https://www.xilinx.com/support/documentatio...-simulation.pdf
Нашел вот этот даташит, пример запустил, осталось понять как его запустить чтоб вивадо открыл симулятор и временную диаграмму рисовал, пока результаты выдаются только в консоли...
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jan 26 2018, 09:38
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 278
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Lutovid
а вам принципиально использовать именно Vivado Simulator?
Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 26 2018, 09:49
Сообщение #4


фанат Linux'а
*****

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



Цитата(Lutovid @ Jan 25 2018, 23:13) *
PPS Скорее надо было написать в ветвь вопросов по языкам, но я поторопился

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


--------------------
Go to the top of the page
 
+Quote Post
Lutovid
сообщение Jan 26 2018, 11:43
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 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
Go to the top of the page
 
+Quote Post
AVR
сообщение Jan 26 2018, 12:07
Сообщение #6


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 254
Регистрация: 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 не требуется?


--------------------
Go to the top of the page
 
+Quote Post
Lutovid
сообщение Jan 26 2018, 13:07
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 90
Регистрация: 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 я наталкивался на сообщения, что он перестает поддерживаться в вивадо, поэтому я как-то с опаской на это смотрю
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th May 2018 - 13:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01091 секунд с 7
ELECTRONIX ©2004-2016