Re: [ng-spice-devel] personal note on ACS and NG-SPICE (fwd)
On Mon, 11 Sep 2000, Alan Gillespie wrote:
> So what exactly do you mean when you say "as far behind" ?
ok. here it comes.
There has been a lot of work done on specific problems. I believe
that future work in simulation should work on intelligent
combinations of these.
ACS does some, but there is a lot more, and a lot of it didn't come
from Berkeley.
One very important work that has been neglected by the world is Karem
Sakallah's work at CMU, published in 1985. "SAMSON2, an event driver
VLSI simulator". He used a block decomposition method with latency
exploitation by block. As I recall, it used a mix of LU and
relaxation, with more emphasis on the LU approach. There is a good
analysis of the errors induced by bypass and latency and dormancy
exploitation. As far as I know, the code is not available, but the
papers are. You cannot do credible research in mixed signal
simulation without referencing this work, yet I rarely see any
references to it.
My work (sort of in ACS) around 1990 "Implicit mixed mode simulation"
concentrated on the implicit mixing of analog (Samson style) and
digital (event driven gate level) in a single simulator, with the
ability to mix them freely and change modes on the fly. You provide
both analog and digital descriptions of a gate, and it can
dynamically decide which to use where and when. The analog part of
ACS is closer to Samson than it is to Spice. I use a different
method for storing and partitioning the matrix than Samson does.
Mine looks like the Spice method from the outside, but is really more
like the Samson method under the hood.
My more recent work in ACS makes heavy use of queues to accelerate
simulation. Everything is queued, then evaluation is done by
processing the queue. At this point it is about half queue driven.
I intend to make it all queue driven, which should then allow it to
run different parts of the circuit at different time steps. Samson
can, but it is strictly by block and the user must partition it. In
ACS, the user influences it, but some partitioning is automatic. The
part that isn't automatic depends on a simple ordering algorithm that
has been known to the world for over 50 years, that I have not
implemented. (Simple depth first search, not Markowitz.) ACS also
has the ability to do partial matrix solutions, and actually make use
of that. The partial solution alone buys very little, but when
combined with other means of exploiting latency and dormancy, it
makes a big difference.
There is Larry Pilleggi's "Asymptotic Waveform Evaluation" (CMU).
The idea here is to make a simpler almost equivalent circuit to speed
up the solution of large linear networks. These large networks often
come from tools that extract RC or RLC representations of
interconnect. Suppose I have a 10000th order RC network. (This is
not an exaggeration. Such networks are real.) These are usually low
pass and tree structured, with no loops. That means the denominator
of the transfer function is a 10000th order polynomial. The idea is
that, rather than even trying to get an exact solution, to calculate
the "moments", or coefficients of the terms. The zero moment is a DC
solution. To calculate the first moment, substitute current sources
for the capacitors and do another DC solution. Repeat until you have
enough moments. 5 is usually plenty. At this point you have a 5th
order network that responds almost the same as the big one. Now
solve this one. A DC solution of a tree structured network of only
floating resistors and grounded current sources is trivial. Just
walk the tree.
Then there are transmission line simulators. These are also based on
tree methods, and have very limited nonlinear capability. Remember,
a transmission line has the property that if you tweek one end it
takes a while before anything happens at the other. At the other
end, it calculates a reflection to send back, which also takes a
while to get there. In a larger sense, transmission lines can be
used to isolate nonlinear blocks, improving convergence in the
general case. Some of the "signal integrity" simulators for printed
circuits use this method.
Another approach is switch level simulation. It's all a bunch of
resistors and switches. Consider the mosfet to be a voltage
controlled switch. Consider also that there one way signal flow. (no
op-amps here!) Now, we can use logic simulator event driven
techniques. A refinement of this leads to the "timing simulators"
that substitute a real model for the mosfet and solve by relaxation.
These have trouble with floating capacitors.
In my own work, I tried relaxation first, thinking it was the most
obvious. I had not even heard of Spice at the time. My exposure to
other simulators was "PCAP" and "AC-CODED". Later on, I thought it
was strange that someone could get a Ph.D. for that, and even
stranger that it could spawn a bunch of others. As I researched it
further, it was apparent that there was a lot that I overlooked, but
still, I consider this to be a much smaller contribution than SAMSON.
I believe the early versions of "Micro-Cap" (on Apple) used a
relaxation method. It has since been changed to a Spice type method.
I believe they actually use Spice.
Cazm is a table based simulator from (I believe) North Carolina State
University. Instead of evaluating the models every iteration, it
generates a set of tables once, looks up and interpolates from the
tables. Supposedly, it is faster because it avoids run time model
evaluation. I have been thinking of using tables to cache the results
of model evaluation, in ACS, hopefully combining the benefits of the
numeric approach with the table approach.
A key work as a glued mixed mode simulator is "DIANA" (Hugo DeMan,
Katholike University, Belgium, 1978) . Now, when you hear all the
hype about yet another co-simulation approach, you know how old the
method is.
"Harmonic balance" has been used for a long time for RF circuits.
Ken Kundert did his Ph.D. on harmonic balance. His simulator
"Spectre" is being used as a base for the Spectre marked by Cadence,
but Cadence uses a Spice like algorithm. HB is only available at
extra cost. It is used for nonlinear steady state analysis. That's
all I know about it.
Now, on to pole zero analysis. I looked at this briefly about 10
years ago, and have not had the time to follow up. I think Spice
uses something called "unit circuit interploation". This is well
documented in the book by Jiri Vlach and Kishore Singhal. To get an
idea how this works, consider that you can do an AC sweep, fit the
curve with a "Pade approximation". This is like a least squares fit,
but the result is the quotient of polynomials. The poles are the
roots of the denominator. The zeros are the roots of the numerator.
Now consider what the AC analysis is .... Look at the S plane and
try a bunch of poiints. A pure AC analyis will pick points along the
j-omega axis, pure imaginary. The "unit circle" means it picks
complex points on a circle, thereby making calculations closer to
where the poles and zeros actually are, improving accuracy.
There are other methods involving solving directly for the numerator
and denominator, which traditionally had not been used because of
difficulty of programming or slow running time. I have in mind a
method that uses the same matrix solver that I use for the DC
solution, only with polynomials in the matrix. It should be easy in
C++. I have not had time to explore this, but the preliminary
analysis looks good.
I have had similar thoughts on true symbolic analysis. The lead
researcher today on this is Georges Gillien (sp?) in Belgium. The
big problem here is taming the data. A complete symbolic analysis
gives too much data for anyone to comprehend.
Enough for now...
al.
Partial thread listing:
- Re: [ng-spice-devel] personal note on ACS and NG-SPICE (fwd), (continued)