ceil and floor

Discussion in 'VHDL' started by zlotawy, Sep 15, 2007.

  1. zlotawy

    zlotawy Guest


    there are three constants:

    constant one : Natural := 36;
    constant two : Natural := 14;
    constant three: Natural := one/two;

    After synthesise three equels 2.

    BEcause 36/14 is more than 2 I have question, how to get this value?

    zlotawy, Sep 15, 2007
    1. Advertisements

  2. zlotawy

    zlotawy Guest

    U¿ytkownik "zlotawy" <_SPAM.pl> napisa³ w wiadomo¶ci

    For me

    36/14 = 3 :)
    36/12 = 3
    36/18 = 2
    36/35 = 2

    zlotawy, Sep 15, 2007
    1. Advertisements

  3. zlotawy

    David Bishop Guest

    It just takes the integer value. In the "math_real" package you will
    find "ceil" and "floor" functions with take in REAL numbers and return
    real numbers (which are the integer values).

    If you are trying to synthesize a number that is less than 1, I would
    recommend that you try a fixed point number.
    David Bishop, Sep 15, 2007
  4. zlotawy

    zlotawy Guest

    Uzytkownik "David Bishop" <> napisal w wiadomosci

    hmm.. thanks but i can not use it.. :(

    library IEEE;
    use IEEE.STD_LOGIC_1164.all;
    package PKG is
    constant one: Integer := ceil(7/ 2);
    end PKG_SRAM;

    And i receive error: "ceil can not have such operands in this context.". Can
    I not generateconstatnt by ceil function?

    zlotawy, Sep 15, 2007
  5. zlotawy

    KJ Guest

    Yes, you can. The errors you're getting are because the data types that you
    are using do not have a 'ceil' function defined for it. The function
    declaration for 'ceil' in the ieee.math_real package.

    function CEIL (X : real ) return real;

    In ieee.math_real ceil takes a 'real' as the input parameter and returns a
    real type. Since you'd like to use integers you simply need to cast them

    The correct way for your example would be
    constant one: Integer := natural(ceil(real(7)/real(2)));
    or equivalently...
    constant one: Integer := natural(ceil(7.0/2.0));

    KJ, Sep 15, 2007
    1. Advertisements

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.