V-AMS Compact Modeling Extensions subcommittee Minutes of July 1, 2003 Attendees: Geoffrey Coram, Analog Devices Ilya Yusim, Cadence Jeroen Paasschens, Philips Laurent Lemaitre, Motorola Srikanth Chandrasekaran, Motorola David Zweidinger, Texas Instruments Marek Mierzwinski, Tiburon Peter Liebmann, Xpedion ------- 1) Thanks to Cadence for sponsoring 2) Approval of previous minutes (June 10) 3) Continuation of discussion of proposed extensions 1.7 multiplicity factor Jeroen - For Philips models, MULT is done with pre-processing of parameters, ie, once per sim instead of every iteration of every timestep. We need to be clear whether this is an efficiency problem, and if we want to accept it in the pursuit of a higher goal, namely, consistent, error-free implementation. (To this point, it should be noted that the Philips web site for Mextram504 indicates that MULT scaling was not initially done correctly for RTH, CTH, CBCO, and CBEO. However, the efficiency question is still valid.) David - at TI, the multiply is done per iteration, but this does not seem to be a lot of overhead, and not many instances per circuit use it. Geoffrey - a few multiplies won't be noticed in a BSIM evaluation, but would double the floating-point operations for a resistor -- unless the simulator can somehow figure out to pre-compute Reff = R/m and store that value. Sri - asked what we meant by "implicit parameter" and noted that we probably need to have "m" reserved as a keyword to avoid clashes; this may be a backwards-compatibility problem. 1.8 strings Strings are allowed in digital context of Verilog-AMS, but excluded (AMS-LRM 2.1, section C.2) from Verilog-A. Anyone know why they were excluded? Obviously, it should be an error to use the value of a string parameter in computing a branch contribution. We noted that digital "strings" are fixed-length character buffers, but model/instance names may be arbitrarily long. So, we really want a string, not a "reg" variable. We all agreed that strings should be supported for device models. 1.9 initialize variables where declared Sri pointed out that, for a variable declared at top level, its domain (digital or analog) is determined by where it is assigned a value (digital block or analog block -- can't be both). Although the AMS committee wants a better way to determine the domain, they haven't found one, so we either have to solve this problem or only allow the initialization for declarations inside the analog block. David asked if we really need this, or if it's a convenience; Marek said his company hadn't needed it in implementing the various standard models for his company's simulator. 2.0 functions 2.1 more flexible functions Peter noted that array of reals can be returned in VHDL, but that the V-AMS committee did not want this. An alternate syntax was proposed: [x,y,z] = fn(a, b); instead of x = fn(a, b, y, z); but it was felt that this was unlikely to be supported by the V-AMS committee, because it looks like vectors that they had dis-allowed previously. 2.2 access to derivatives The description for this section should cite an example (noise?) of something that is not an op-pt quantity but actually used for the simulation, just to have a stronger argument. Peter pointed out that ddx does not need a tolerance argument, since it is done analytically (as opposed to ddt, whose tolerance/ accuracy is related to the timestep). Sri noted that the proposed syntax should emphasize that we're only allowing derivatives with respect to control voltages, V(g,s) or V(g); we expect the simulator to know how to calculate these for use in the Jacobian. Derivatives wrt arbitrary expressions are not supported. David wondered if we should call the function "ddv()" instead of ddx, if we're only allowing derivatives wrt voltage. [Would we ever want to take a derivative wrt a control current? Should the second argument be any port access function, potential or flow, rather than only a port potential access?] Ilya said that he would want a deriv wrt other quantities, eg, temperature, to allow an equation to be linearized after a certain point. We need a complete example to consider this. Jeroen wondered if the derivative is well-defined. We agreed that we should be talking about a partial derivative. But what if you write Ids as a function of V(g,d) and V(d,s), and then ask for gm = ddx(Ids, V(g,s))? ------- Next meeting: Tuesday, July 15 at 11 AM Eastern; Ilya will request a new conference call, so watch for the new dial-in numbers.