Thanga,
There are several issues with what you want to do:
First, vhdl functions are not statements; they are expressions, and
they must return a value which has to be handled (i.e. assigned to
something, or evaluated in a condition). They cannot be called
stand-alone.
Procedures, on the other hand, are statements, and can be called
stand-alone, as in a concurrent procedure call.
However, all synthesis tools I'm aware of do not permit a procedure or
function to pass time (i.e. have a wait statement). Therefore, unless
the procedure defines purely combinatorial logic, it is not
synthesizable.
Finally, with no outputs or inputs, a concurrent procedure call will
not synthesize to anything, regardless of what happens inside.
>From a simulation point of view, a concurrent procedure call is an
implied process with a sensitivity list made up of all the procedure's
parameters of mode in or inout. If the procedure does not have
parameters, then it will be executed exactly once. The re-execution
normally associated with concurrent procedure calls would have to be
handled with a loop internal to the process (i.e. never let it exit).
As to optimizations, constants, generics, and for loop indices are all
treated as static values and optimized out, to the extent possible.
Andy
KJ wrote:
> Thanga wrote:
> What you have listed is a bit sketchy but.
> > Now my doubt is,
> > If I freeze the parameter to a constant value, during synthesis what
> > will happen?
> > ie) only the selected fuction will be synthesized or all the four
> > funcions will be synthesized?
> If the synthesis tool can determine, based on the parameter that the
> other functions can not possibly be called then they will be optomized
> away. An example would be
> entity Foo is generic(Xyz: integer)
> end Foo;
> architecture FooFoo of Foo is
> begin
> case Xyz is
> when 1 => -- Do something
> when 2 => -- Do something else
> when 3 => -- Do something different
> when others => -- Do something really different
> end case;
> end FooFoo;
>
> If you then instantiate Foo(1) then in the synthesis output the entire
> case statement will collapse down to the "-- Do something" code.
>
> KJ
|