DSP newbie

F

FPGA

Guest
I have written a process to generate sin wave as below.

-- sine wave constants
amp_sin : real := 10.0;
phase_sin : real := 0.0 --
phase in radians
samples_sin : integer :=
1000; -- number of
samples
incr_sin : real := 0.001; -- 1/
samples
period_sin : time := 0.001
ns; -- period of
sine wave/samples


two : process
variable phase_temp,result : real ;
begin
phase_temp := phase_sin; --phase_sin;
l1 : for i in 1 to samples_sin loop --number_of_samples loop


sine_real <= ((amp_sin*sin(phase_temp)));
phase_temp := phase_temp + incr_sin;
wait for period_sin;
end loop l1;
end process two;


The problem I am facing is, I get sine wave for some values and for
some I just get triangulr wave. Is there any limitation to the sin
function in math_real. Should I be able to generate any type of
frequencies with this function. Please help
 
On Feb 27, 11:38 pm, FPGA <FPGA.unkn...@gmail.com> wrote:
I have written a process to generate sin wave as below.

-- sine wave constants
                           amp_sin : real := 10.0;
                           phase_sin : real := 0.0                --
phase in radians
                           samples_sin : integer :> 1000;                   -- number of
samples
                           incr_sin : real := 0.001;              -- 1/
samples
                           period_sin : time := 0.001
ns;                         -- period of
sine wave/samples

two : process
variable phase_temp,result : real ;
begin
        phase_temp := phase_sin; --phase_sin;
        l1 : for i in 1 to samples_sin loop --number_of_samples loop

                sine_real <= ((amp_sin*sin(phase_temp)));
                phase_temp := phase_temp + incr_sin;
                wait for period_sin;
        end loop l1;
end process two;

The problem I am facing is, I get sine wave for some values and for
some I just get triangulr wave. Is there any limitation to the sin
function in math_real. Should I be able to generate any type of
frequencies with this function. Please help
Also, the sine wave does not stop after it takes all the samles, I
keep getting a continous sine wave. Would like to add the option of
generating wave from 0 tp 2pi or 4 pi, etc. I want to make this as
generic as possible
 
On Feb 28, 4:50 am, FPGA <FPGA.unkn...@gmail.com> wrote:
On Feb 27, 11:38 pm, FPGA <FPGA.unkn...@gmail.com> wrote:



I have written a process to generate sin wave as below.

-- sine wave constants
amp_sin : real := 10.0;
phase_sin : real := 0.0 --
phase in radians
samples_sin : integer :=
1000; -- number of
samples
incr_sin : real := 0.001; -- 1/
samples
period_sin : time := 0.001
ns; -- period of
sine wave/samples

two : process
variable phase_temp,result : real ;
begin
phase_temp := phase_sin; --phase_sin;
l1 : for i in 1 to samples_sin loop --number_of_samples loop

sine_real <= ((amp_sin*sin(phase_temp)));
phase_temp := phase_temp + incr_sin;
wait for period_sin;
end loop l1;
end process two;

The problem I am facing is, I get sine wave for some values and for
some I just get triangulr wave. Is there any limitation to the sin
function in math_real. Should I be able to generate any type of
frequencies with this function. Please help

Also, the sine wave does not stop after it takes all the samles, I
keep getting a continous sine wave. Would like to add the option of
generating wave from 0 tp 2pi or 4 pi, etc. I want to make this as
generic as possible
It's repeating because you havent told the process to wait when it
finishes the loop. Currently the loop finishs, and then the process
restarts and does the whole loop again, and this will repeat for ever.
To stop this simply put "wait;" at the end of the process.
 
On Feb 28, 5:19 am, Tricky <Trickyh...@gmail.com> wrote:
On Feb 28, 4:50 am, FPGA <FPGA.unkn...@gmail.com> wrote:





On Feb 27, 11:38 pm, FPGA <FPGA.unkn...@gmail.com> wrote:

I have written a process to generate sin wave as below.

-- sine wave constants
                           amp_sin : real := 10.0;
                           phase_sin : real := 0.0                --
phase in radians
                           samples_sin : integer :> > > 1000;                   -- number of
samples
                           incr_sin : real := 0.001;              -- 1/
samples
                           period_sin : time := 0.001
ns;                         -- period of
sine wave/samples

two : process
variable phase_temp,result : real ;
begin
        phase_temp := phase_sin; --phase_sin;
        l1 : for i in 1 to samples_sin loop --number_of_samples loop

                sine_real <= ((amp_sin*sin(phase_temp)));
                phase_temp := phase_temp + incr_sin;
                wait for period_sin;
        end loop l1;
end process two;

The problem I am facing is, I get sine wave for some values and for
some I just get triangulr wave. Is there any limitation to the sin
function in math_real. Should I be able to generate any type of
frequencies with this function. Please help

Also, the sine wave does not stop after it takes all the samles, I
keep getting a continous sine wave. Would like to add the option of
generating wave from 0 tp 2pi or 4 pi, etc. I want to make this as
generic as possible

It's repeating because you havent told the process to wait when it
finishes the loop. Currently the loop finishs, and then the process
restarts and does the whole loop again, and this will repeat for ever.
To stop this simply put "wait;" at the end of the process.- Hide quoted text -

- Show quoted text -
I am required to design this using the CORDIC algorithm.
 
On Feb 28, 8:53 am, FPGA <FPGA.unkn...@gmail.com> wrote:
On Feb 28, 5:19 am, Tricky <Trickyh...@gmail.com> wrote:



On Feb 28, 4:50 am, FPGA <FPGA.unkn...@gmail.com> wrote:

On Feb 27, 11:38 pm, FPGA <FPGA.unkn...@gmail.com> wrote:

I have written a process to generate sin wave as below.

-- sine wave constants
amp_sin : real := 10.0;
phase_sin : real := 0.0 --
phase in radians
samples_sin : integer :=
1000; -- number of
samples
incr_sin : real := 0.001; -- 1/
samples
period_sin : time := 0.001
ns; -- period of
sine wave/samples

two : process
variable phase_temp,result : real ;
begin
phase_temp := phase_sin; --phase_sin;
l1 : for i in 1 to samples_sin loop --number_of_samples loop

sine_real <= ((amp_sin*sin(phase_temp)));
phase_temp := phase_temp + incr_sin;
wait for period_sin;
end loop l1;
end process two;

The problem I am facing is, I get sine wave for some values and for
some I just get triangulr wave. Is there any limitation to the sin
function in math_real. Should I be able to generate any type of
frequencies with this function. Please help

Also, the sine wave does not stop after it takes all the samles, I
keep getting a continous sine wave. Would like to add the option of
generating wave from 0 tp 2pi or 4 pi, etc. I want to make this as
generic as possible

It's repeating because you havent told the process to wait when it
finishes the loop. Currently the loop finishs, and then the process
restarts and does the whole loop again, and this will repeat for ever.
To stop this simply put "wait;" at the end of the process.- Hide quoted text -

- Show quoted text -

I am required to design this using the CORDIC algorithm.
Then why aren't you using the CORDIC algorithm? Google it.
 
On Feb 28, 8:53 am, FPGA <FPGA.unkn...@gmail.com> wrote:
On Feb 28, 5:19 am, Tricky <Trickyh...@gmail.com> wrote:





On Feb 28, 4:50 am, FPGA <FPGA.unkn...@gmail.com> wrote:

On Feb 27, 11:38 pm, FPGA <FPGA.unkn...@gmail.com> wrote:

I have written a process to generate sin wave as below.

-- sine wave constants
                           amp_sin : real := 10.0;
                           phase_sin : real := 0.0                --
phase in radians
                           samples_sin : integer :> > > > 1000;                   -- number of
samples
                           incr_sin : real := 0.001;              -- 1/
samples
                           period_sin : time := 0.001
ns;                         -- period of
sine wave/samples

two : process
variable phase_temp,result : real ;
begin
        phase_temp := phase_sin; --phase_sin;
        l1 : for i in 1 to samples_sin loop --number_of_samples loop

                sine_real <= ((amp_sin*sin(phase_temp)));
                phase_temp := phase_temp + incr_sin;
                wait for period_sin;
        end loop l1;
end process two;

The problem I am facing is, I get sine wave for some values and for
some I just get triangulr wave. Is there any limitation to the sin
function in math_real. Should I be able to generate any type of
frequencies with this function. Please help

Also, the sine wave does not stop after it takes all the samles, I
keep getting a continous sine wave. Would like to add the option of
generating wave from 0 tp 2pi or 4 pi, etc. I want to make this as
generic as possible

It's repeating because you havent told the process to wait when it
finishes the loop. Currently the loop finishs, and then the process
restarts and does the whole loop again, and this will repeat for ever.
To stop this simply put "wait;" at the end of the process.- Hide quoted text -

- Show quoted text -

I am required to design this using the CORDIC algorithm.- Hide quoted text -

- Show quoted text -
I was able to add the wait statement and the problem was solved. I
modified some of the things and not I am able to get waveforms at
different frequencies. FYI,
incr_phase_sin : real := (2.0*MATH_PI)/(real(samples_sin)); -- 2pi/
samples per period
incr_time_sin : time := time(period_sin/samples_sin); --
period/samples per period
 
On Feb 28, 10:57 am, FPGA <FPGA.unkn...@gmail.com> wrote:
On Feb 28, 8:53 am, FPGA <FPGA.unkn...@gmail.com> wrote:





On Feb 28, 5:19 am, Tricky <Trickyh...@gmail.com> wrote:

On Feb 28, 4:50 am, FPGA <FPGA.unkn...@gmail.com> wrote:

On Feb 27, 11:38 pm, FPGA <FPGA.unkn...@gmail.com> wrote:

I have written a process to generate sin wave as below.

-- sine wave constants
                           amp_sin : real := 10.0;
                           phase_sin : real := 0.0                --
phase in radians
                           samples_sin : integer :> > > > > 1000;                   -- number of
samples
                           incr_sin : real := 0.001;              -- 1/
samples
                           period_sin : time := 0.001
ns;                         -- period of
sine wave/samples

two : process
variable phase_temp,result : real ;
begin
        phase_temp := phase_sin; --phase_sin;
        l1 : for i in 1 to samples_sin loop --number_of_samples loop

                sine_real <= ((amp_sin*sin(phase_temp)));
                phase_temp := phase_temp + incr_sin;
                wait for period_sin;
        end loop l1;
end process two;

The problem I am facing is, I get sine wave for some values and for
some I just get triangulr wave. Is there any limitation to the sin
function in math_real. Should I be able to generate any type of
frequencies with this function. Please help

Also, the sine wave does not stop after it takes all the samles, I
keep getting a continous sine wave. Would like to add the option of
generating wave from 0 tp 2pi or 4 pi, etc. I want to make this as
generic as possible

It's repeating because you havent told the process to wait when it
finishes the loop. Currently the loop finishs, and then the process
restarts and does the whole loop again, and this will repeat for ever.
To stop this simply put "wait;" at the end of the process.- Hide quoted text -

- Show quoted text -

I am required to design this using the CORDIC algorithm.- Hide quoted text -

- Show quoted text -

I was able to add the wait statement and the problem was solved. I
modified some of the things and not I am able to get waveforms at
different frequencies. FYI,
incr_phase_sin : real := (2.0*MATH_PI)/(real(samples_sin));       -- 2pi/
samples per period
incr_time_sin : time := time(period_sin/samples_sin);                 --
period/samples per period- Hide quoted text -

- Show quoted text -
The sine wave function in math_real uses the CORDIC algorithm
 

Welcome to EDABoard.com

Sponsor

Back
Top