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
|