M-Factor proposal

From: Kevin Cameron <k.cameron@cputech.com>
Date: Tue May 11 2004 - 10:48:27 PDT

 

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