Re: Mfactor proposal

From: CLC Shekar <shekar@cadence.com>
Date: Thu Jun 17 2004 - 12:39:17 PDT

Thanks for your feedback Geoffrey. Please see my comments
embedded starting with clc>.

On Wed, 16 Jun 2004, Geoffrey.Coram wrote:

> Shekar -
> In reviewing your proposal and Ken's comments, I have a few
> comments of my own.
>
> In Section 5, bullet 6 says "It should be possible to refer
> to the effective mfactor value in analog behavioral code."
>
> But then in 6.1.2 (and several other places), you write "It will
> be error to use the declared mfactor parameter in any expression
> inside the module."
>
clc> Sorry about the confusion. The intention is to allow
     access to the "effective" mfactor value within analog
     behavioral blocks. The specifics of how to access it in
     behavioral blocks is being defined by the Device modeling
     sub-committee.

     In proposals 6.1.2, 6.3 and 6.4, the mfactor is explicitly
     declared within the module. This declaration semantically
     allows the access of the mfactor parameter 'name' as it becomes
     a valid symbol in that scope. Therefore, the proposals also
     indicate that the use of that 'declared name' for mfactor
     in any expression is illegal. This is because, it is not clear
     what the value of that 'declared name' will represent.

     It would still be possible to define some special access mechanism
     (like $mfactor) to access the "effective" mfactor value(which
     requires special hierarchical computation) within behavioral
     blocks.

> In the compact modeling extensions subcommittee, we believe
> that there are a few cases in which one might want explicit
> access to the mfactor. One of those is mismatch, in which
> the statistical variation is decreased by having elements
> in parallel.
>
> In the case that the mfactor is used in a module, this turns off
> automatic scaling by the simulator. Taking Ken's example and
> using the $m syntax:
> module my_res (a, b);
> parameter real r;
> resistor #(.r(r), .$m($m)) R1 (a, b);
> endmodule
>
> The fact that the module's $m is used inside the module
> turns off automatic m-factor handling for the module,
> meaning that R1 does not get an automatic m, only the
> specified $m. Any current contributions, current probes,
> noise contributions, or instantiations would need to be
> scaled manually by the module author.
>
clc> The issue with using $m is that it becomes a system
     function and the language does not consider it as
     a constant. So, it would not be legal to use it in
     parameter expressions.

     Is it possible to keep the value access mechanism
     seperate from the value propagation mechanism?
 
     In the value propagation mechanism we could enforce that
     the value(expression) used to propagate the mfactor value
     is always a constant.

     In the value access mechanism, looks like there are
     three types of values which the designer might be interested
     in(using the terminology in the doc):
     1. Explicit or in its absence the implicit mfactor.
        - i.e the local mfactor for that module.
     2. Effective mfactor within the module
        - i.e the product of all mfactors from top-level to that
        module.
     3. Effective mfactor of the parent module.
        - i.e the product of all mfactors from top-level to that
        parent's module.

      Are you referring to 3. as the one which the module author
      can use to manually scale the mfactor? Or is it 1.?
  
      A special value access mechanism could be used to access each
      of these components of mfactor within behavioral blocks.

> Ken's $m syntax extends easily to $n, $x, $y, $angle, $vflip,
> $hflip. It addresses Kevin's concern that we not use
> attributes, since this really does affect the simulation
> results. It should be only a small change to the
> instance-line parser (to accept .$identifier() as well as
> .identifier() in the parameter list), in contrast to Kevin's
> {} syntax. In an e-mail not sent to the reflector, Martin also
> expressed a concern that {} would be hard to look up in the
> documentation.
>
clc> One other concern with using '{}' is that it is already
     used as a concatenation operator in the language. In general,
     it is used to bundle nets together. With the parameter arrays
     in the language, it would be used to bundle parameters also.
     Using it to indicate special parameter processing would mean
     defining another totally different semantics to an existing
     operator.

cheers,
Shekar.

> One concern is that this tries to reserve a lot of system
> function names. It would probably be better to use longer
> names to reduce the chance of collisions (SV in particular
> has a lot of $system_tasks). $mfactor, $xposition, etc.
>
> -Geoffrey
>
Received on Thu Jun 17 12:40:48 2004

This archive was generated by hypermail 2.1.8 : Thu Jun 17 2004 - 12:40:55 PDT