Всем привет!
Решил освоить использование си файлов для симуляции в систем верилоге< но столкнулся с некоторыми трудностями и где про это почитать пока не понял...
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 Скорее надо было написать в ветвь вопросов по языкам, но я поторопился