EmbDev.net

Forum: FPGA, VHDL & Verilog Verilog - FloatingPoint


Author: Krol (Guest)
Posted on:

Rate this post
0 useful
not useful
Hi,

i want to create a sinus generator in verilog. My problem is that i dont 
know how i can connect the output of my module with a floating point 
number.

Perhaps someone can give me an small example how to work with floating 
point and the output. I tried to use "real" but i dont work as output.

Greetings

Author: Uwe Bonnes (Guest)
Posted on:

Rate this post
0 useful
not useful
You should look at a CORDIC core to generate a Sine Wave.

Author: Lothar Miller (lkmiller) (Moderator)
Posted on:

Rate this post
0 useful
not useful
> i want to create a sinus generator in verilog.
What is your actual problem?
Do you want to do DDFS?
Then the usual way is to read values out of a sins table.
The other way would be a cordic calculation.

> I tried to use "real" but i dont work as output.
Real numbers are not for snthesis. You can use them for testbenches, but 
you will encounter problem with them on real hardware...

Author: Ale (Guest)
Posted on:

Rate this post
0 useful
not useful
I'd suggest you get the datasheet of, for instance, the AD9835. There is 
explained how digital synthesis works (in case you do not know). With 
that and a very few lines of Verilog (you will need two registers, one 
for the phase accumulator and another one for the period of the signal 
and a fully populated RAM block, i.e. with a sinus) you get a sinus 
generator :).

Author: Krol (Guest)
Posted on:

Rate this post
0 useful
not useful
I got a sinus already using a LUT. But my Problem is that I multiplied 
the floating point values with 1000, so that i dont need a point.

Ok, i got an sinus and an amplitude of 1000. But i want an amplitude of 
1. And the problem is if i use floating point values my reg dont save 
the values.

Author: Lothar Miller (lkmiller) (Moderator)
Posted on:

Rate this post
0 useful
not useful
> And the problem is if i use floating point values my reg dont save
> the values.
No. The problem is, that you don't understand how numbers are 
represented in hardware. Or: do you know what a floating point number 
looks like and how difficult it is to handle simple operations like 
addition or multiplication on it in hardware?

To keep it short: I don't think you need a floating point number. But 
you must rearrange your mind for a different presentation of the 
numbers. Lets say: take a 8 bit number in a range from 
1000000...00000000...01111111 then you get a decimal value of 
-128...0...+127. And then divide this number in your mind by 128 and 
you get -1...0...+0.992 for the SAME bit pattern. Think thoroughly about 
that!

> an amplitude of 1000
Never ever take decimal numbers in hardware. A multiplication with 1000 
takes a lot of effort. A multiplication with 1024 instead is just a 
different wiring and brings zero overhead...  :-o

Author: Krol (Guest)
Posted on:

Rate this post
0 useful
not useful
So it makes no difference in hardware if i implement the sin without 
floating points, btw. this way is much easier?

1024 would just be a shift, thats true

Author: Lothar Miller (lkmiller) (Moderator)
Posted on:

Rate this post
0 useful
not useful
> if i implement the sin without floating points
I didn't get this... :-/

But you said, you already have a sine function (via LUT).
So why do you need floating points further on? For scaling the sine?

Author: Krol (Guest)
Posted on:

Rate this post
0 useful
not useful
Just for scaling, because the sine should be in range from -1 ... 1

Author: Lothar Miller (lkmiller) (Moderator)
Posted on:

Rate this post
0 useful
not useful
As I said: -1...+1 isn't possible:
With a 16 bit word you can get  0x1000 ... 0x0000 ... 0x7fff
That is decimal                 -32768 ...      0 ... 32767
If you divide it mentally by     32768
then you get virtually              -1 ...      0 ... +0.999969

So, what do you get out of your sine LUT/algorithm?

Reply

Entering an e-mail address is optional. If you want to receive reply notifications by e-mail, please log in.

Rules — please read before posting

  • Post long source code as attachment, not in the text
  • Posting advertisements is forbidden.

Formatting options

  • [c]C code[/c]
  • [avrasm]AVR assembler code[/avrasm]
  • [vhdl]VHDL code[/vhdl]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]




Bild automatisch verkleinern, falls nötig
Note: the original post is older than 6 months. Please don't ask any new questions in this thread, but start a new one.