RE: FW: New Mantis Issue #667 for V-1364

From: Steven Sharp (sharp@cadence.com)
Date: Fri Apr 15 2005 - 14:23:58 PDT

  • Next message: Steven Sharp: "potential command line option"

    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:06 PDT and
    sponsored by Boyd Technology, Inc.