rf – cascode amplifier for 2.4 GHz has a distorted output waveform

enter image description here

I am trying to make a bare bones LNA that can take in a 100mV signal and create a 13dB gain or 4.7V/V gain. The W/L for both is 18 and transistor length is 1um, the bias voltage is 1.85, vdd is 3.3V, the current is biased for 835uA, unCox is 120 uA/V^2, and Vth is 0.8. I plotted the output gain vs frequency and got the following:
enter image description here

so far, i don’t see a problem. The gain should be 7.4 and this is a bit more than what I was aiming for but its ok. However, I don’t understand what is causing the gain to be only within a particular band. The gain I have is on the decreasing part of the plot.
I am thinking about the biasing and how to keep the transistors in saturation to calculate the voltage swing. My reasoning is that:
1)vbias is 1.85 and vth is 0.8 so Vds will stay in saturation so long as vd2 is above 1.85-0.8 or 1.05
2)if vd2 is 1.05, then vds_cascode is 2.25. is vds_cascode in saturation? my answer here is vgs-vth< or = to vds_sat_cascode. since vg-vs-vth=vds_sat_cascode=3.3-1.05-0.8=1.45, then both are in saturation. On the other hand, the minimum vds_cascode can be is 0.8. This is achieved when vgs is 0.8 or when Vd2 is 2.5. This means that vd2 can be anywhere from 1.05 to 2.5 while maintaining both transistors in saturation. Is this thinking correct?

I am inputting a signal of 100mV and it experiences distortion as shown below:
enter image description here

At first glance, the signal looks like a sinusoid but it is obviously distorted due to the signal peak and bottom locations in the vertical axis and the gain of the frequency sweep not matching. Please advise.So far, I have added a source at the output to plot the output imepdance vs frequency and got around 527 ohms magnitude with angle 17. I took this an multiplied it by the gm of the common source transistor which was 1.21msiemens. this should produce the gain of 4.77 v/v without causis distortion as the swing was calculated to be enough but i must have made a mistake somewhere and can’t figure it out.

Read more here: Source link