I am not that good with explanations, but I'll try.
Mike, the creator of LTspice, had went through great lengths to ensure that the solver does not encounter abrupt changes which could pose problems. This means that even the ideal diode, when simulated, will show a small rounding around the knee. Add enough points and it will get sharper, but zoom in and you still get a small rounding. This is true for (as I know it) all nonlinear elements.
However, there are cases when two or more nonlinear elements, when coupled, can produce a transfer function that can get too abrupt, which means the solver needs to reduce its time step to accomodate with the increasingly greater chages, and it gets slower and slower, until, if it can't go anymore, it coughs up "Time step too small", or similar. This is true for all SPICE engines, I think.
One cause (for LTspice, in particular), is using "stiff" voltage sources, which have (machine) zero Ohms source and can cause convergence problems. The official help states that it is better to use current sources terminated in appropiate resistors, since these not only will converge faster, but they will not be a problem to the circuit. Why am I mentioning this? Believe it or not, recently there has been a case where someone couldn't simulate a simple op-amp because of its supply sources (the model was a black box, true, so who knows what went on inside). As soon as he added Rser
to the supplies, everything worked! You probably know this, but adding Rser
to a voltage source makes LTspice convert it, internally, to a current source.
Another known solution is adding (small) capacitors across offending nodes, so that the derivative around the sharp transitions becomes smoother, thus allowing the solver to hop over it. The capacitance should be small enough to not prove an additional unwanted poles, yet at the same time large enough that it should have an effect on the possible discontinuity. Tipical values are fF ~ pF. Another solution might be adding gmin
to help DC currents, also with values that should not distort the original circuit's response, but, at the same time, help. Values are usually at least GOhms, up.
Since a circuit like yours is -- as you say -- composed with a vast majority of transistors, thus nonlinear elements, finding the "offending node(s)" can be cumbersome, if at all possible, so for this there's the official option .opt cshunt
and .opt gshunt
, which, according to the manual, adds capacitances and conductances across all the nodes. I should add that this solution should be used with care, as, even if in the real life there are capacitances everywhere, they may not be the same everywhere or have values that matter, so use with care. For example, adding .opt cshunt 1n
may obliterate any convergence issues, but you will be left with 1nF capacitances across every node, to ground.
Not least, the models/subcircuits, themselves, sometimes can be cumbersome, in that whomever made them didn't make such a great job, or, it may work better in one simulator than another. The solutions, here, are so vast it deserves another SE site, at least.
Besides what has already been said, I can't find, currently, something else to say, so I'll just add good luck, since, even if LTspice has no limits other than your hardware (as noted by @zebonaut), it's still at the mercy of hardware and software, especially true with growing schematic complexity. Good luck.