I am trying to simulate a cascode circuit followed by a source follower in LTSpice and observe its frequency response. I added a 100GH inductor to serve as negative feedback only for DC, i.e., the circuit functions as an open loop in the AC simulations. This is the schematic of the circuit:
simulate this circuit – Schematic created using CircuitLab
VX is at 964 mV (DC), and VY is at 1.15 V (DC).
I have turned off the body effect (shorted the source and bulk for all the MOSFETs) to simplify my analysis and have verified that all the MOSFETs are in saturated inversion.
As per my theoretical understanding, the circuit should have only two (high frequency) zeros, one from the common source MOSFET M1 and one from the common drain MOSFET M5, but the AC response shows that it has three zeros— one each from CS M1, CG M2 (~ 1.5 GHz, very obvious in the vy/vx bode plot), and CD M5.
When I remove the L1 from the circuit, M2 no longer introduces the zero, but it reappears when the loop closes again.
I have tried to debug the CGA by itself to figure out the source of the problem and am using the following circuit for it:
So far, I have noticed that this circuit also presents the same zero (at the same frequency), and the zero disappears when I replace the MOSFET with a BJT. I have also turned off all capacitances (CDB, CSB, CGBO, CJ, and CJSW) apart from CGS and CGD in the Level 1 SPICE MOSFET Model I'm using.
I have also noticed that this zero disappears as soon as my VY increases beyond 1.6 V. But this is a DC voltage, and it should not impact the AC frequency response in any way as long as the MOSFET remains in saturated inversion. So, observing this does not make much sense to me.
I think (maybe wrongly) that the COxide component in the CGS capacitance is somehow introducing this zero, but I'm not sure. Does anyone know why the zero could appear in the circuit and how I could resolve the problem?
Any input is highly appreciated.
Edit 1: I simulated the circuit in both Cadence and NGSpice. The CGA zero was absent from there. This leads me to think that LTSpice is doing something ridiculous and inserting a zero where it shouldn't be. Does anyone know why or how LTSpice is doing this?
Edit 2: Added simulation details to the debugging circuitry.