time quantity in vhdl

Discussion in 'VHDL' started by Nav, Oct 1, 2003.

  1. Nav

    Nav Guest

    Hi,

    could anyone help me out with this ? look at the following comments
    inside the code.


    constant cin:time := 20.0 fs;
    constant r_p:time := 2000.0;
    constant r_n:time := 2000.0;
    begin
    p1: process(x)
    variable t:time;
    begin
    if(x'EVENT and x='1') then
    --
    --Can I assign a real value multiplication to a time quanity.

    t := time(cin*r_n);
    y <= (not x) after t ps;
    else
    -- This is working fine but the above t equation is not working.
    t := 20.0*2.0 ps;
    y <= (not x) after t;
    end if;
    end process p1;

    thanks a lot.
    naveen
     
    Nav, Oct 1, 2003
    #1
    1. Advertising

  2. Nav

    David Jones Guest

    In article <>,
    Nav <> wrote:
    >Hi,
    >
    >could anyone help me out with this ? look at the following comments
    >inside the code.
    >
    >
    > constant cin:time := 20.0 fs;
    > constant r_p:time := 2000.0;
    > constant r_n:time := 2000.0;


    The last two declarations should be illegal, as they do not give a unit.

    A physical type such as time is represented internally as an integer,
    expressing a multiple of the base physical unit. So, if your simulation
    time type starts off as fs, then 1 ns is represented as 1,000,000.

    You are permitted to multiply and divide by scalars. The result is still
    an integer, in the base unit. So, 1.5 * 3 fs is 4 fs or 5 fs, due to rounding
    (the exact outcome is simulator-dependent.)

    The other problem spot is that time quantities are often quantized to the
    simulator time resolution. For example, if your simulation timestep is 1 ns,
    then all time literals will be a multiple of 1,000,000 fs. At this point,
    you get wierdness such as:

    constant t1:time := 1 ps;
    constant t2:time := 2 ps;

    variable ratio: integer;

    if (t1 = t2) then
    -- Surprise! This branch executes if resolution is ns.
    ratio := t2 / t1; -- And this halts due to divide by zero.
    else
    -- And this branch executes if resolution is ps.
    ratio := t2 / t1; -- And this works fine, producing 2.
    end if;

    This is done to increase the dynamic range of time. The VHDL standard requires
    that 1 fs be accepted as a time unit, but this allows simulation for only
    18,445 seconds if time is to be tracked as a 64-bit integer. By quantizing
    time to 64 bits, simulators permit much longer simulation runs while
    sacrificing sub-ns precision which many users don't care about.

    >begin
    > p1: process(x)
    > variable t:time;
    > begin
    > if(x'EVENT and x='1') then
    >--
    >--Can I assign a real value multiplication to a time quanity.
    > t := time(cin*r_n);


    If r_n were declared as:

    constant r_n:real := 2000.0

    then this is legal, and will result in 40,000 fs.

    > y <= (not x) after t ps;
    > else
    >-- This is working fine but the above t equation is not working.
    > t := 20.0*2.0 ps;
    > y <= (not x) after t;
    > end if;
    > end process p1;
    >
    >thanks a lot.
    >naveen
     
    David Jones, Oct 1, 2003
    #2
    1. Advertising

  3. Nav

    Niv Guest

    It looks as if you've declared r_p & r_n as "time", so you're trying to
    create "time_squared"
    Make r_p & r_n of type INTEGER or NATURAL, then the multiply should work.

    Niv.

    "Nav" <> wrote in message
    news:...
    > Hi,
    >
    > could anyone help me out with this ? look at the following comments
    > inside the code.
    >
    >
    > constant cin:time := 20.0 fs;
    > constant r_p:time := 2000.0;
    > constant r_n:time := 2000.0;
    > begin
    > p1: process(x)
    > variable t:time;
    > begin
    > if(x'EVENT and x='1') then
    > --
    > --Can I assign a real value multiplication to a time quanity.
    >
    > t := time(cin*r_n);
    > y <= (not x) after t ps;
    > else
    > -- This is working fine but the above t equation is not working.
    > t := 20.0*2.0 ps;
    > y <= (not x) after t;
    > end if;
    > end process p1;
    >
    > thanks a lot.
    > naveen
     
    Niv, Oct 1, 2003
    #3
  4. Nav

    Nav Guest

    Hi Niv and dave,

    Thanks for ur brief explanation into time....

    I made one modification instead of defining r_p and r_n and c as time
    I defined them as real. It makes sense since, if I define them all as
    time then the varibale to which I assign this value will become time
    squared which will make the physical quantity definition of t error.
    I got it going... thanks to ur help....

    keep it going folks,
    Nav

    "Niv" <niv**mines_a_pint_you_spamheads**@ntlworld.com> wrote in message news:<7bGeb.1615$>...
    > It looks as if you've declared r_p & r_n as "time", so you're trying to
    > create "time_squared"
    > Make r_p & r_n of type INTEGER or NATURAL, then the multiply should work.
    >
    > Niv.
    >
    > "Nav" <> wrote in message
    > news:...
    > > Hi,
    > >
    > > could anyone help me out with this ? look at the following comments
    > > inside the code.
    > >
    > >
    > > constant cin:time := 20.0 fs;
    > > constant r_p:time := 2000.0;
    > > constant r_n:time := 2000.0;
    > > begin
    > > p1: process(x)
    > > variable t:time;
    > > begin
    > > if(x'EVENT and x='1') then
    > > --
    > > --Can I assign a real value multiplication to a time quanity.
    > >
    > > t := time(cin*r_n);
    > > y <= (not x) after t ps;
    > > else
    > > -- This is working fine but the above t equation is not working.
    > > t := 20.0*2.0 ps;
    > > y <= (not x) after t;
    > > end if;
    > > end process p1;
    > >
    > > thanks a lot.
    > > naveen
     
    Nav, Oct 2, 2003
    #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. Gary Vidal
    Replies:
    2
    Views:
    1,879
    Steven Cheng[MSFT]
    Feb 12, 2004
  2. Przemek Klein
    Replies:
    0
    Views:
    369
    Przemek Klein
    Oct 6, 2005
  3. Replies:
    3
    Views:
    306
    Earl Purple
    May 17, 2006
  4. bart
    Replies:
    14
    Views:
    769
  5. Rob Meade
    Replies:
    9
    Views:
    309
    Anthony Jones
    Jun 18, 2006
Loading...

Share This Page