Zeichnen Sie die maximalen Steigungen der Spannungsübertragungseigenschaften in ngspice

Nov 22 2020

Ich habe einen grundlegenden CMOS-Wechselrichter in ngspice implementiert, der eine DC-Sweep-Analyse der Eingangsspannung durchführt, um die Spannungsübertragungskurven (Vout vs Vin) bei variierenden Vdd-Spannungen zu erhalten.

. cmos g (gain) vs vdd

.include tsmc180.txt

vdd source_p 0 0v
vin gate_common 0 0v

m_p out gate_common source_p source_p cmosp w=2u l=0.18u
m_n out gate_common 0 0 cmosn w=2u l=0.18u

.dc vin 0 2.5 0.01 vdd 0.5 2.5 0.5
.control
run
plot v(out) vs v(gate_common) 
plot deriv(v(out)) vs v(gate_common)
.endc
.end

Wenn ich das Obige ausführe, erhalte ich wie erwartet zwei Diagramme, eines die VTC und eines die Steigungen des VTC, die die Wechselrichterverstärkung darstellen.

Ich muss die maximalen Verstärkungspunkte (die negativen Spitzen auf den Verstärkungskurven) als Kurve in Bezug auf vdd darstellen. Ich habe darüber nachgedacht, den .MEASUREBefehl zu verwenden, um dies zu tun.

.measure dc g deriv v(out)
.measure dc g_max min g 

aber das gibt mir einen fehler

No. of Data Rows : 1255
        measure 'g'  failed
Error: measure  g  :
        function '' currently not supported
 .measure dc g deriv v(out) failed!

Ich konnte kein solches Beispiel im ngspice pdf-Handbuch oder im Git-Repository für ngspice-Simulationsbeispiele finden. Einige Anleitungen werden sehr geschätzt.

Antworten

aconcernedcitizen Nov 22 2020 at 18:15

Verwenden derivbedeutet, über die gesamte Länge der Ablaufverfolgung zu differenzieren, sodass Ihr Befehl .meas g deriv v(out)keinen Sinn ergibt, da der Rückgabewert ein Vektor von Punkten wäre. Das Handbuch beschreibt die Verwendung von derivals Schlüsselwort, um die Bewertung der Ableitung an einem Punkt zu unterstützen, entweder für den jeweiligen Trace oder durch die mit einem anderen erreichte Bedingung.

Da dieses Verfahren nicht zuzulassen , dass scheint min, max, & co, würde ich empfehlen, die gleiche durchführen .dcAnalyse, aber in .tran:

  1. Richten Sie Ihren Eingang als Rampe ein, z PWL(0 0 1 2.5).
  2. Weisen Sie {x}Ihrem Angebot (oder einen anderen Wert) zu.
  3. Schritt durch die Werte der Lieferung mit .step param x 0.5 2.5 0.5.

Es reicht aus V(out), nur zu zeichnen , was die richtige Reaktion zeigt, aber das Zeichnen gegen V(in)würde die .dcAnalyse nachahmen . Der Vorteil dieser Methode besteht darin, dass Sie, wenn Sie eine Schaltung hinzufügen, die die Ableitung der Ausgabe durchführen kann .meas, die min/ max/ etc. Finden können . Die Schaltung ist die Gruppe von G1und L1, wie hier beschrieben . Auch die Platzierung ist ähnlich: Schließen Sie einfach den nichtinvertierenden Eingang von G1an V(out)an und verwenden Sie die Spannung L1für die Ableitung. Ich würde einen Zeitschritt empfehlen, der 1000x kleiner als die gesamte Simulationszeit (z. B. 1 msfür 1 s) oder weniger ist, um eine ausreichende Genauigkeit zu erzielen (um Störspitzen zu vermeiden).

Wenn dies V(d)die Ableitung ist, verwenden Sie einfach:

.meas d min v(d) from 10m

Die from 10mstellt sicher , gibt es keine zufälligen Spitzen am Anfang aufgrund der Ableitung.