EmbDev.net

Forum: FPGA, VHDL & Verilog Fraction sfixed


Author: Jan (Guest)
Posted on:

Rate this post
0 useful
not useful
Dear All,

In our calculations we have a sfilxed value:

SIGNAL Bin : sfixed(9 DOWNTO -9); -- ( = 2.7 )

Now I want to have the fractional part as integer (=7) in a signal and 
the "integer" part (=2) in another signal.

How can I do this? Is there an example?

I'm not succeeding even when using the round_style or overflow_style 
options.

With kind regards,

Author: Na sowas (Guest)
Posted on:

Rate this post
0 useful
not useful
> Now I want to have the fractional part as integer (=7) in a signal
Thats not the way the type sfixed ist working!!

The bits are weighted:
sfixed(9 DOWNTO -9) :
 9   8   7   6   5   4   3   2   1   0   -1  -2  -3  -4  -5  -6  -7  -8  -9
2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
And now 2.7 is
 9   8   7   6   5   4   3   2   1   0   -1  -2  -3  -4  -5  -6  -7  -8  -9
2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2   2
=                                        
0   0   0   0   0   0   0   0   1   0   1   0   1   1   0   0   1   1   0
So you can easily see: the first 10 bits are simply:
0000000010 = 2

But the fraction is far far away from anything looking like 7:
101100110
In fact its not .7 but .69916875, the nearest representable number :-o

Author: Jan (Guest)
Posted on:

Rate this post
0 useful
not useful
Dear Na sowas,

Thank you very much for your quick reaction.

That's just my problem. I need the 7 (or 69916875) in a signal but I 
don't know how to extract it from the sfixed.

I hope you can tell me how.

Author: Na sowas (Guest)
Posted on:

Rate this post
0 useful
not useful
Lets get a step further:
Given the number 2.7 you want as result the numbers 2 and 7?
What do you want for 2.76? Or for 2.765 or 2.7654?

Author: Jan (Guest)
Posted on:

Rate this post
0 useful
not useful
> Given the number 2.7 you want as result the numbers 2 and 7?

Yes, that's right.

> What do you want for 2.76? Or for 2.765 or 2.7654?

A fixed number of digits lets say 3 (rounded):

for example in this case (skipping the signal "2"):

2.7     ->  "700"
2.76    ->  "760"
2.765   ->  "765"
2.7654  ->  "765"

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.