Jump to content

Recommended Posts

Posted

Hello,
 

  firstly I would like to tell that I am totally new in SystemC, but have some experience in VHDL (6 months I have been designing and learning in it). Now I have jumped from VHDL to designing in C++ using a SystemC library.

And my question is,

is there any way to convert float number to bitfield or some logical vector which would represent this number?

(I mean some function, or method or smt else).

 

(My task is to convert float number to Double precision floating point format, and with it do some arithmetical operations).

 

I have find some suggestions how to do that but none of them actually worked when I tried to build it.
Can you give me some suggestion about how to do that please, or how would you do that? I would be really grateful to anybody who could give me something to catch on.

Posted

I think I don't quite understand the issue. When you say "(My task is to convert float number to Double precision floating point format, and with it do some arithmetical operations)." you can do that easily in C

 

 float f;

double d;

 

 d = static_case<double>(f);  // or d = f;

 

If you mean that you want to be able to manipulate the individual bits of a floating point number, then you could possibly use the sc_fixed_fast data type, which is based on double - see the IEEE 1666-2011 language reference manual 7.10.3.2

 

regards

Alan

Posted

Perhaps a good old union can help you out:

union float_int32
{
    float f;
    uint32_t i;
};

float_int32 fl;

fl.f=0.1234;

// result fl.i=03dfcb924

Good luck,
Hans.

www.ht-lab.com

Posted

Hello, 

thank you both for your advices.

What I really need to work with this equation: Rovnica.jpg.. or any similar to it  (same structure, different numbers).. to put it simply, I need convert 100*2^(0) and 100*2^(-200) to Double precision format  ( respectivelly to have input in float or integer numbers and than convert it to bitfield or how to say it) I need to work with this number on bit level and have access to every bit (a bus).

I am sorry if I am saying something wrong, or you do not understand me but I just do not know how to convert it to bitfield (or bus)  which would represent this numbers from equation as Double precision format number. (because I need to work with it as bus and create an arythmetic logic for it ... and at the end I will need to synthetize it and implement it to FPGA)


From this
 rrr.jpg
I need to create something like this

 dsa.png

 

exponent 11bits, Normalized mantisa 52 bits. 

Normalized mantisa, I mean that mantisa (M=100) is divided 6 times by 2 (result  M=1.09375) and to exponent (already biased +1023) I added 6 bits as a result of dividing mantisa to normalized form (-200+1023+6 in binary:011 0011 1101).

I am sorry if I am expressing something wrong, but I tried somehow simply perform you what I meant by this "converting" from float to bitfield. 

Is there any way how to do it?
 

Posted

Hello, 

thank you both for your advices.

What I really need to work with this equation: Rovnica.jpg.. or any similar to it  (same structure, different numbers).. to put it simply, I need convert 100*2^(0) and 100*2^(-200) to Double precision format  ( respectivelly to have input in float or integer numbers and than convert it to bitfield or how to say it) I need to work with this number on bit level and have access to every bit (a bus).

I am sorry if I am saying something wrong, or you do not understand me but I just do not know how to convert it to bitfield (or bus)  which would represent this numbers from equation as Double precision format number. (because I need to work with it as bus and create an arythmetic logic for it ... and at the end I will need to synthetize it and implement it to FPGA)

From this

 rrr.jpg

I need to create something like this

 dsa.png

 

exponent 11bits, Normalized mantisa 52 bits. 

Normalized mantisa, I mean that mantisa (M=100) is divided 6 times by 2 (result  M=1.09375) and to exponent (already biased +1023) I added 6 bits as a result of dividing mantisa to normalized form (-200+1023+6 in binary:011 0011 1101).

I am sorry if I am expressing something wrong, but I tried somehow simply perform you what I meant by this "converting" from float to bitfield. 

Is there any way how to do it?

 

Hello Sir,

It appears that you are trying to use the IEEE 754 double/float formats

with a fixed number of bits for exponent, mantissa and sign -- is this

correct ? If yes, you would have to take a look at sample code published

in a book last year. There is no quick way to do achieve your goal. Hope

that helps.

Posted

I recommend to use the conversion as explained in this thread:

http://forums.accellera.org/topic/1637-type-casting-floating-point-nos/

 

note that the code of Philipp was untested and it contains some minor errors. Below the working code:

  double val = ...

  sc_dt::scfx_ieee_double id(val); // convert to IEEE 754 bitfield

  bool               sgn = id.negative();
  sc_dt::sc_uint<11> exp = id.exponent();
  sc_dt::sc_uint<52> mnt = ( sc_dt::uint64( id.mantissa1() ) << 20 ) | id.mantissa0();

  // concatenate parts to bitvector
  sc_dt::sc_uint<64> bits;
  bits = ( sgn, exp, mnt );

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...