Ken Kundert
|
WIth capacitors you can treat either the voltage or the charge of the capacitor as the state variable. Spectre differs from SPICE in that it treats the voltage as the state variable, meaning that it observes changes in the voltage to determine when to shrink the step because LTE is too high or when to grow the step because LTE is low. SPICE treats charge as the state variable.
There are trade-offs to both approaches. Spectre actually uses the node voltages for any node that is connected to a capacitor to estimate LTE rather than the voltage across each capacitor. Thus if you have a capacitor strung between two nodes whose voltages are far from zero, similar in magnitude, and changing slightly over time, Spectre will under-estimate the LTE for the capacitor because the nodes are seeing small changes in their voltage relative to a large bias voltage, whereas the floating capacitor will see changes in its voltage that are likely large relative to its bias. SPICE is more conservative in that it computes LTE of each capacitor individually. However, SPICE computes the LTE in the charge, and capacitors vary widely in size, so charge will also vary widely. This represents a scaling problem. The absolute tolerance for charge in SPICE is chgtol, which has a default value of 10-14 Coul. The absolute tolerance dominates over the relative tolerance when signals are small. The effect of using charge as the state variable is that large capacitors will have their LTE controlled very tightly for small voltages and small capacitors will have their LTE controlled very loosely. This could result in very small time-steps when the voltage on a large capcitor crosses zero and very loose error control on small capacitors. Consider a 1fF capacitor. Any change of less that 10V will be ignored by the LTE control algorithm. SPICE tries to overcome these issues by observing and controlling the errors in the charge and its derivative (current) using a hybrid criteria that involves both chgtol and abstol. Unfortunately I don't remember the details.
Please be aware that when I say SPICE I am not referring to commercially available simulators today. I am referring to SPICE2 and SPICE3 from Berkeley. Every simulator developer makes their own decisions on how to implement time step control and I am not privy to their decisions.
So, this response has been a bit long winded, but the essence of the response is that Spectre controls the time step by observing the node voltages for nodes that have capacitors connected to them whereas SPICE controls the time step by observing the the charge of each capacitor. That approach has scaling issues, which SPICE attempts to overcome by using a hybrid error control strategy that looks at both the charge and current. Both approaches are not quite kosher, but in my experience the Spectre approach seems better behaved over a wide variety of circuits. A kosher approach is possible by using the voltage across each capacitor as the state variables, but it would be a bit more conservative.
|