From: Steven Sharp (sharp@cadence.com)
Date: Fri Apr 15 2005 - 14:23:58 PDT
Shalom wrote:
>> There is no essential difference between a gate and a continuous
>> assignment (except for strength reduction).
Actually there is, and in a way that could affect this. A continuous
assignment can directly reference a constant. A gate can at most have
a constant connected to an input port (technically a terminal, which is
almost the same).
Dave Rich wrote:
>However, I now believe that all primitives (all UDPs and built-ins)
>need to be evaluated at least once at time 0. The sequential UDPs need
>to be evaluated for level sensitive behavior.
That is a good point, though there would be a problem for a sequential
UDP with an initial value and no level-sensitive inputs. However, I
now believe that there is no need to specify evaluation of primitives
at time 0.
As noted previously, a constant can only be connected to a primitive
via a port. Since that constant is not a net, there must be an implicit
continuous assignment of the constant to a net that is actually attached
to the primitive. Since that implicit continuous assignment would be
required to evaluate at time 0, that should take care of creating an event
that will cause the primitive to evaluate. Note that an implementation
might not choose to implement the connection exactly this way, but it
still has to provide equivalent behavior to what the LRM specifies.
So for example, if you have a buffer with 1'b0 attached to the input,
there is (at least conceptually) an implicit continuous assignment of
the 1'b0 to a net that is the input of the buffer. That net starts out
at X. When the implicit continuous assignment is required to evaluate
at time 0, the net will transition to a value of 0. That event will
require the evaluation of the buffer, so the value will propagate to
the output of the buffer.
For now at least, 2-state bits connected to a primitive input are covered
this way also. A 2-state object must currently be a variable. This means
that there is an implicit continuous assignment when it is attached to a
primitive terminal. If we assume that all primitive input terminals are
wires, the input starts out at X and will transition to the initial 0 of
the 2-state variable when the implicit continuous assignment is evaluated
at time 0.
So there is no need to require evaluation of primitives at time 0 to get
constants or 2-state values to propagate. All that is needed is to
require continuous assignments (including implicit ones for port
connections) to be evaluated at time 0. Then the primitives will take
care of themselves.
Steven Sharp
sharp@cadence.com
This archive was generated by hypermail 2.1.4
: Fri Apr 15 2005 - 14:01:05 PDT
and
sponsored by Boyd Technology, Inc.