this sounds good to me. very good.
in cadence schematics <0:7> I believe is
used to indicate parallel (vector=bus, not scalar).
if [0:7] does this in Verilog this seems
perfect to me.
if what geoffrey said is correct, that with vector
inputs separate instances are instantiated, but
with scalar inputs then these are connected to all
instances in the array, then this would seem like the desired
behavior. then efficiency (and avoidance of potential
issues like parallel voltage sources) would follow
as long as one instance and the appropriate $mfactor were used.
I like it.
colin
-----Original Message-----
From: owner-verilog-ams-devmod@eda.org [mailto:owner-verilog-ams-devmod@eda.org] On Behalf Of Geoffrey.Coram
Sent: Wednesday, April 07, 2004 8:03 AM
To: VerilogA Device Modeling Reflector
Subject: $mfactor in Verilog-style netlists
In the conference call yesterday (minutes coming soon),
we agreed that
a) we need a multiplicity factor
b) the simulator should handle all the "easy" rules
automatically (scale "through" contributions by m,
"through" sensors by 1/m, etc.)
c) mismatch and "rmin" are tough to handle automatically,
so give access to the multiplicity for an instance
through the function $mfactor
d) A model writer generally shouldn't use $mfactor, except
perhaps to scale "output parameters," and the simulator
should issue a warning if a contribution depends
explicitly on $mfactor. (Colin will have to live with
these warnings, or get his simulator to switch it off.)
e) For those Spice-like simulators that have an instance
parameter for the multiplicity factor, eg "m", in a
Spice netlist, this should be translated automatically
(such that $mfactor returns the correct value and the
rules in (b) are applied.
So, the missing piece is: how in a Verilog netlist does
one specify the multiplicity? Take the instance line
bsim5 #(.l(90n),.w(1u),.type("nmos")) mn1(.d(d),.g(g),.s(s),.b(b)) How do we make 5 in parallel?
We could allow .$mfactor(5) in the parameter list, but only
because we're using named overrides, and the $things aren't supposed to be assigned to.
We could put
bsim5 #(.l(90n),.w(1u),.type("nmos");5) mn1(.d(d),.g(g),.s(s),.b(b))
Someone asked about the range item for an instance, I think that would look like this:
bsim5 #(.l(90n),.w(1u),.type("nmos")) mn[1:5](.d(d),.g(g),.s(s),.b(b)) Am I reading the BNF right? Doesn't this mean 5 instances in parallel? The LRM says (p 7-4)
One or more module instances (identical copies of a module definition)
can be specified in a single module instantiation statement. How does this differ from what we mean by multiplicity? Can one change a parameter value for just one of the instances through a defparam statement? If the ports/nets are buses, does one bit get assigned to each instance?
-Geoffrey
Received on Wed Apr 7 10:21:18 2004
This archive was generated by hypermail 2.1.8 : Wed Apr 07 2004 - 10:21:19 PDT