Just thought I'd re-iterate my proposals from earlier
(http://www.eda.org/verilog-ams/hm/0694.html).
I suggest placing the m-factor in the same place as the
Verilog instance multiplier, since it performs a similar
function. A number in curly brackets in the instance probably
wouldn't clash with existing syntax: e.g.:
foo foo1 (*...*) {1.5} (a,b,c...); // m-factor = 1.5
For AMS you need to be able to handle multipliers on digital blocks as
well as analog blocks, and the multipliers need to extend into the
A/D convertors (which is another reason for instantiating A/Ds under the
module where the drivers are rather than in the level above).
Multiplying a digital gate by a real number wouldn't change it's
function in a pure digital context, so having a module instantiated with
a multiplier of 1.5 is functionaly the same as having it once. However,
if it does have a multiplier of 1.5, then in a MS context where a driver
is being relayed to an analog context and a D2A is being inserted then
the D2A has to be multiplied (i.e. currents scaled by 1.5) - the same
goes for A2Ds on inputs.
By default module instances would have their contributions etc.
multiplied
by the m-factor (as proposed), but if the module asks for the value
(using
$mfactor) then it is responsible for handling the multiplication. E.g.:
module foo (in,out);
...
genvar real mf = $mfactor; // evaluated at elaboration
...
analog I(out) = Func(mf) * V(in);
...
Comments?
Kev.
Kevin Cameron, CPU Technology, CA 94588, Tel.: (925) 225 4862
Received on Tue May 11 10:48:31 2004
This archive was generated by hypermail 2.1.8 : Tue May 11 2004 - 10:48:37 PDT