tracer les pentes maximales des caractéristiques de transfert de tension en ngspice

Nov 22 2020

J'ai implémenté un inverseur CMOS de base dans ngspice, en effectuant une analyse de balayage CC sur la tension d'entrée pour obtenir les courbes de transfert de tension (Vout vs Vin) à des tensions Vdd variables.

. 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

En exécutant ce qui précède, cela me donne deux tracés comme prévu, l'un le VTC et l'autre les pentes du vtc qui représentent le gain de l'onduleur.

Je dois tracer les points de gain maximum (les pics négatifs sur les courbes de gain) sous forme de courbe par rapport à vdd. J'ai pensé à utiliser la .MEASUREcommande pour ce faire.

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

mais cela me donne une erreur

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

Je n'ai trouvé aucun exemple de ce genre dans le manuel ngspice pdf ou dans leur référentiel git pour les exemples de simulation ngspice. Certains conseils sont très appréciés.

Réponses

aconcernedcitizen Nov 22 2020 at 18:15

Utiliser derivsignifie différencier sur toute la longueur de la trace, donc votre commande .meas g deriv v(out)n'a pas de sens, car la valeur de retour serait un vecteur de points. Le manuel décrit l'utilisation de derivcomme mot-clé pour aider à évaluer la dérivée à un moment donné, soit pour la trace respective, soit à travers la condition atteinte avec un autre.

Étant donné que cette méthode ne semble pas permettre min, max, & co, je vous recommande d' effectuer la même .dcanalyse, mais .tran:

  1. Configurez votre entrée comme une rampe, par exemple PWL(0 0 1 2.5).
  2. Attribuez {x}(ou une autre valeur) à votre approvisionnement.
  3. Parcourez les valeurs de l'offre avec .step param x 0.5 2.5 0.5.

Il suffit de tracer V(out), seulement, ce qui montrera la réponse correcte, mais le traçage par contre V(in)imiterait l' .dcanalyse. L'avantage de cette méthode est que, si vous ajoutez un circuit qui peut effectuer la dérivée de la sortie, vous pouvez l'utiliser .measpour trouver le min/ max/ etc. Le circuit est le groupe formé par G1et L1, comme décrit ici . Son emplacement est également similaire: connectez simplement l'entrée non inverseuse de G1à V(out)et utilisez la tension L1pour le dérivé. Je signifierais un pas de temps 1000x plus petit que le temps total de simulation (par exemple 1 mspour 1 s), ou moins, pour une précision suffisante (pour éviter des pics parasites).

Avec cela, si V(d)est le dérivé, utilisez simplement:

.meas d min v(d) from 10m

Les from 10massure qu'il n'y a pas des pointes aléatoires au début en raison du dérivé.