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

 
 
> Вопрос по DPI
Lutovid
сообщение Jan 25 2018, 20:13
Сообщение #1


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

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



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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 03:24
Рейтинг@Mail.ru


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