Estoy intentando simular un circuito utilizando la directiva .subckt en Ngspice-26 para definir la puerta NAND GATE y la puerta NOT.
Tengo dos archivos subckt separados para inv y nand como inv.txt y nand.txt que incluyo en mi archivo principal.
Cuando ejecuto el código mencionado a continuación usando source file_name.cir
en Ngspice, obtengo el siguiente promt en la terminal de Ngspice.
Warning: unknown device type: n
Error: too few nodes: numparm__________00000013
Lo leí y hubo un error en NgSpice, pero fue corregido en la versión actualizada 26 de Ngspice. Otro punto a destacar fue que este error ocurrió solo cuando se usa nand subckt y no da error cuando solo se usa inv. Además, la advertencia dice sobre un tipo de dispositivo n que no he usado en mi archivo cir en ningún lugar. Por favor, dime si estoy haciendo algo mal.
Esta parte del código es el archivo principal .cir.
** DUT Test for NAND **
.include nand.txt
.include inv.txt
.include models.txt
.PARAM Len = 0.4um
.param nWid = 0.60um
.PARAM pWid = 1.55826um
.PARAM vdd = 3.3
.global vdd
vdd vdd 0 vdd
vs 6 0 vdd
xinv1 1 2 inv
xinv2 2 3 inv
xnand1 3 6 4 nand
xinv3 4 5 inv
xinv4 4 5 inv
xinv5 4 5 inv
xinv6 4 5 inv
c1 5 0 0.1pF
vin 1 0 dc PULSE(0 3.3V 0 0.1ps 0.1ps 4ns 12ns)
.tran 0.05ps 8ns
.control
run
plot v(3) 'vdd - v(4)'
.endc
.end
A continuación se muestra el código para el archivo subckt para nand gate
* Subcircuit for Minimum sized NAND Gate
* CONNECTIONS: IN1
* | IN2
* | | OUTPUT
* | | |
.SUBCKT nand 1 2 3
*Specifying NMOS in this manner-
*name drain gate source body modelname as in model file
m1 node1 1 0 0 cmosn L=Len W=nWid AD='2*nWid*Len' AS='2*nWid*Len' PD='2*(nWid+2*Len)' PS='2*(nWid+2*Len)'
m2 3 2 node1 0 cmosn L=Len W=nWid AD='2*nWid*Len' AS='2*nWid*Len' PD='2*(nWid+2*Len)' PS='2*(nWid+2*Len)'
m3 3 1 vdd vdd cmosp L=Len W=pWid AD='2*pWid*Len' AS='2*pWid*Len' PD='2*(pWid+2*Len)' PS='2*(pWid+2*Len)
'
m4 3 2 vdd vdd cmosp L=Len W=pWid AD='2*pWid*Len' AS='2*pWid*Len' PD='2*(pWid+2*Len)' PS='2*(pWid+2*Len)
'
.ends nand
A continuación se muestra el código para el archivo subckt para el inversor
* Subcircuit for Minimum sized inverter
* CONNECTIONS: INPUT
* | OUTPUT
* | |
* | |
.SUBCKT inv 1 3
*Specifying NMOS in this manner-
*name drain gate source body modelname as in model file
m1 3 1 0 0 cmosn L=Len W=nWid AD='2*nWid*Len' AS='2*nWid*Len' PD='2*(nWid+2*Len)' PS='2*(nWid+2*Len)'
m2 3 1 vdd vdd cmosp L=Len W=pWid AD='2*pWid*Len' AS='2*pWid*Len' PD='2*(pWid+2*Len)' PS='2*(pWid+2*Len)'
.ends inv
Enlace al archivo models.txt aquí Enlace al archivo inv.txt aquí.
Enlace al archivo nand.txt, reemplace inv.txt en la parte superior con nand.txt