Sri Chandra wrote: [re ddx(??, V(x,y)] > > I remember that we had this discussion in the committee during LRM2.2 > meetings. The reason (probably Geoffrey might remember better) was to > very clearly state when writing the equation which terminals are held > constant while taking the symbolic derivative. Hence it was decided to > go for the voltage of a node. > > As an aside, i think there were some request for the second argument to > be for eg. temperature since people would want to take derivative with > other quantities. That discussion was deferred. Sri is correct. If you have Vgs, Vgd, Vgb as your independent variables, then ddx(Ids, V(g,s)) != ddx(Ids, V(g)). The simulator must compute ddx(Ids, V(g)) because V(g) is the unknown and those derivatives are the ones that must go in the matrix. One could certainly take ddx(Ids, Temp(th)) where "th" is a node or port belonging to the thermal discipline. There was also some discussion of ddx(Ids, analog_expression) or perhaps ddx(Ids, identifier) but these aren't needed by the simulator so why should we burden the simulator/compiler with trying to figure this out. The user should instead use Maple or Mathematica to compute it. > The confusion comes especially when you use repeated arguments ie. > udf_fn(a,a,...) where the arguments are inout its a bit confusing what > the values should be. In that sense i think it is a good idea to clearly > define what the intent is, and i think explicitly stating > copy-in/copy-out is probably a good thing. At the time we wrote LRM 2.2, we hadn't considered repeated arguments, and it seemed that the implementation could do pass-by-reference without any side effects. We did not want to introduce "ref" as a new keyword, since there are likely designs that use it as an identifier. -GeoffreyReceived on Wed Sep 6 06:10:00 2006
This archive was generated by hypermail 2.1.8 : Wed Sep 06 2006 - 06:10:02 PDT