problem of real type in synthesis,

Discussion in 'VHDL' started by senthil, Feb 4, 2004.

  1. senthil

    senthil Guest

    hello friends,

    for the direct implementation of the dft, i need the real variable
    intends multiply with that of real converted integer values. upto
    simulation level i didn't found no prblem. but at synthesis level, the
    real types are not synthesisable. the error will occur ..

    simulation -modelsim S.E 5.5
    synthesis - leonardo spectrum level3

    coding.

    wn <= 0.982;
    if mapp = '1' and en < 64 then
    int := real(en);
    Wk := int*Wn;
    for ke in 0 to 63 loop
    ke1 := real(ke);
    upd := ke1*Wk;
    c := cosine(upd);
    s1 := sine(upd);
    vifftre(en) := vifftre(en) + re(ke)*c - im(ke)*s1;
    vifftim(en) := vifftim(en) + re(ke)*s1 + im(ke)*c;
    end loop;
    ifftre(en) <= (vifftre(en))/npt;
    ifftim(en) <= (vifftim(en))/npt;
    en <= en + 1;
    end if
    senthil, Feb 4, 2004
    #1
    1. Advertising

  2. senthil wrote:

    > hello friends,
    >
    > for the direct implementation of the dft, i need the real variable
    > intends multiply with that of real converted integer values. upto
    > simulation level i didn't found no prblem. but at synthesis level, the
    > real types are not synthesisable. the error will occur ..


    At present, real data is not synthesable yet.
    They have to be exchanged to integers with range or bit vectors.
    Also the algorithm needs the proper scale factors.

    But this is not problem. The problem consists
    in huge hardware which is
    inferred by the loop operator.

    A.Ser
    Vladislav Vasilenko, Feb 4, 2004
    #2
    1. Advertising

  3. senthil

    Sajan Guest

    yes, very true real is not synthesizable .
    its not a problem, thats how vhdl is .
    please check for synthesisable features of VHDL.

    (senthil) wrote in message news:<>...
    > hello friends,
    >
    > for the direct implementation of the dft, i need the real variable
    > intends multiply with that of real converted integer values. upto
    > simulation level i didn't found no prblem. but at synthesis level, the
    > real types are not synthesisable. the error will occur ..
    >
    > simulation -modelsim S.E 5.5
    > synthesis - leonardo spectrum level3
    >
    > coding.
    >
    > wn <= 0.982;
    > if mapp = '1' and en < 64 then
    > int := real(en);
    > Wk := int*Wn;
    > for ke in 0 to 63 loop
    > ke1 := real(ke);
    > upd := ke1*Wk;
    > c := cosine(upd);
    > s1 := sine(upd);
    > vifftre(en) := vifftre(en) + re(ke)*c - im(ke)*s1;
    > vifftim(en) := vifftim(en) + re(ke)*s1 + im(ke)*c;
    > end loop;
    > ifftre(en) <= (vifftre(en))/npt;
    > ifftim(en) <= (vifftim(en))/npt;
    > en <= en + 1;
    > end if
    Sajan, Feb 4, 2004
    #3
  4. senthil

    Ray Andraka Guest

    Surely you don't expect double precision floating point in your hardware?
    If reals were synthesizable, that's probably what would be needed to
    satisfy the real type. Rather than converting your inputs to reals,
    convert the weights to fixed point values with however much precision you
    deem necessary to meet your accuracy requirements. I suspect the trouble
    you are having is thinking that you cannot represent fractions in fixed
    point. You can of course: You basically just have an implied weight
    associated with the data word that says where the radix point lies (no one
    says the radix point has to be to the immediate right of the LSB). For
    example,
    0011 could represent 3, 1.5, 0.75, or any other value of the form 3*(2^a)
    where a is an integer.



    senthil wrote:

    > hello friends,
    >
    > for the direct implementation of the dft, i need the real variable
    > intends multiply with that of real converted integer values. upto
    > simulation level i didn't found no prblem. but at synthesis level, the
    > real types are not synthesisable. the error will occur ..
    >
    > simulation -modelsim S.E 5.5
    > synthesis - leonardo spectrum level3
    >
    > coding.
    >
    > wn <= 0.982;
    > if mapp = '1' and en < 64 then
    > int := real(en);
    > Wk := int*Wn;
    > for ke in 0 to 63 loop
    > ke1 := real(ke);
    > upd := ke1*Wk;
    > c := cosine(upd);
    > s1 := sine(upd);
    > vifftre(en) := vifftre(en) + re(ke)*c - im(ke)*s1;
    > vifftim(en) := vifftim(en) + re(ke)*s1 + im(ke)*c;
    > end loop;
    > ifftre(en) <= (vifftre(en))/npt;
    > ifftim(en) <= (vifftim(en))/npt;
    > en <= en + 1;
    > end if


    --
    --Ray Andraka, P.E.
    President, the Andraka Consulting Group, Inc.
    401/884-7930 Fax 401/884-7950
    email
    http://www.andraka.com

    "They that give up essential liberty to obtain a little
    temporary safety deserve neither liberty nor safety."
    -Benjamin Franklin, 1759
    Ray Andraka, Feb 5, 2004
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. walala
    Replies:
    4
    Views:
    2,108
    Ralf Hildebrandt
    Sep 8, 2003
  2. walala
    Replies:
    4
    Views:
    1,200
    Technology Consultant
    Sep 9, 2003
  3. senthil
    Replies:
    5
    Views:
    1,382
    senthil
    Jan 24, 2004
  4. Curious Trigger
    Replies:
    2
    Views:
    1,814
    Curious Trigger
    Sep 9, 2006
  5. Replies:
    5
    Views:
    1,148
    Thomas Stanka
    Apr 27, 2007
Loading...

Share This Page