saket Posted April 14, 2016 Report Share Posted April 14, 2016 Hi, I'm trying to use DPI-C to import sin function, but it doesn't work, as a workround i had used a sin approximative function which finally give a static value of 2.5 (the offset value) i think that the instanciation of the sin in the code does not work, and i did not know why, any help would be appreciable: package math_pkg; //import dpi task C Name = SV function name //import "DPI-C" pure function real sin (input real rTheta); `define PI 3.14159265 function real sin; input x; real x; real x1,y,y2,y3,y5,y7,sum,sign; begin sign = 1.0; x1 = x; if (x1<0) begin x1 = -x1; sign = -1.0; end while (x1 > `PI/2.0) begin x1 = x1 - `PI; sign = -1.0*sign; end y = x1*2/`PI; y2 = y*y; y3 = y*y2; y5 = y3*y2; y7 = y5*y2; sum = 1.570794*y - 0.645962*y3 + 0.079692*y5 - 0.004681712*y7; sin = sign*sum; end endfunction // sin endpackage : math_pkg module sv_ams_sin_voltage_gen(output real sine_out); import math_pkg::*; parameter sampling_time = 5; const real pi = 3.1416; real time_us, time_s ; bit sampling_clock; real freq = 20; real offset = 2.5; real ampl = 2.5; always sampling_clock = #(sampling_time) ~sampling_clock; always @(sampling_clock) begin time_us = $time/1000; time_s = time_us/1000000; end assign sine_out = offset + (ampl * sin(2*pi*freq)); endmodule Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.