Medir la corriente de fuga de un inversor CMOS

Me gustaría medir la corriente de fuga de un inversor CMOS. Como esta corriente depende de la entrada, decidí medir algo promedio, es decir, la corriente de fuga de un anillo con dos inversores CMOS para que tanto los dispositivos PMOS como los NMOS tengan la oportunidad de estar tanto en estado de encendido como de apagado. Estoy usando un simulador SPICE para este propósito. Mi circuito es el siguiente (se omiten las instrucciones no tan relevantes):

X1 in  int dd ss bn bp inverter
X2 int in  dd ss bn bp inverter

Vdd dd 0 1
Vbp bp 0 1
Vbn bn 0 0
Vss ss 0 0

.ic V(in) = 0
.probe dc Ileak = par('abs(I(Vdd)) / 2')

donde inversor es un subcircuito basado en dispositivos BSIM4 (v4.7).

Dado que tengo poca experiencia en esta área, realmente no puedo decir si lo que estoy haciendo tiene sentido. Agradecería si alguien pudiera confirmar que el circuito sirve para el propósito deseado.

Hay un aspecto más que me gustaría aclarar. Mi objetivo global es obtener una estimación aproximada de la corriente de fuga de un circuito más grande en función de las medidas de este pequeño anillo. Entiendo que esta estimación probablemente será (muy, muy) vaga y abstracta. Sin embargo, tal enfoque es lo suficientemente bueno para mí. Sin embargo, me gustaría llevar esta estimación lo más que pueda, y me pregunto si sería mejor incluir algunas cargas en el circuito entre los dos inversores como se muestra a continuación:

.subckt load in dd ss bn bp
X1 in  int dd ss bn bp inverter M = 3
X2 int out dd ss bn bp inverter M = 12
.ends

X1   in int dd ss bn bp inverter
X1_1 int dd ss bn bp load

X2   int in dd ss bn bp inverter
X2_1 in dd ss bn bp load

Vdd dd 0 1
Vbp bp 0 1
Vbn bn 0 0
Vss ss 0 0

.ic V(in) = 0
.probe dc Ileak = par('abs(I(Vdd)) / 2')

donde la carga es un subcircuito con un par de inversores ligeramente agrandados.

Sospecho que estás confundiendo términos aquí. ¿Podría aclarar qué quiere decir con corriente de fuga? El circuito consumirá corriente, principalmente durante la conmutación. La corriente de fuga verdadera (óxido de puerta), túnel S/d bb, etc. no se modela en SPICE y, en particular, se sabe que SPICE no tiene balance de carga. Sin embargo, es posible que algunas personas hayan intentado incluir fugas en sus modelos SPICE, por lo que puede haber instancias particulares aquí en las que me equivoque.
@rawbrawb, gracias por la respuesta. Me refiero principalmente a los dos principales contribuyentes a la disipación estática de energía, es decir, a las corrientes de fuga subumbral y de compuerta. Ambos se tienen en cuenta en el modelo BSIM4 de dispositivos MOSFET.
Dado que está ejecutando una simulación de CC, no creo que la presencia de una carga haga una diferencia en la puerta o la fuga subumbral, pero la forma en que ha configurado la simulación, su corriente promedio incluirá la fuga de corriente en la carga misma y No creo que eso sea lo que quieres. Es posible que deba usar condiciones iniciales para sacar el anillo de la metaestabilidad.
SI está completamente seguro de que su modelo modela la fuga de la puerta con precisión, entonces medir esta corriente no es un gran problema: simplemente integre la corriente en el terminal de la puerta del inversor. El valor total de esta integral es la corriente que voló hacia la puerta pero no regresó. Sin embargo, debe aplicar algunas condiciones iniciales y de contorno a estas mediciones. Podré publicar una respuesta más elaborada una vez que describa qué quiere decir exactamente con corriente subumbral, en particular: en qué condiciones trata la corriente como subumbral.
@JoeHass, sí, estoy de acuerdo en que, en el segundo caso, las medidas también incluirán la corriente a través de la carga y, de hecho, no es lo que quiero. Gracias por la nota. En cuanto a la condición inicial, si no me equivoco, te refieres al .iccomando; He actualizado el código de arriba.
@VasiliyZukanov, no estoy seguro de qué tan preciso es el modelo, pero estoy seguro de que modela las corrientes de fuga tanto de la puerta como del subumbral. Estás hablando de medir la corriente de la puerta por separado, ¿verdad? Pensé que podía medir todo a la vez Vdd, ¿no es así? Acerca de su pregunta con respecto a mi definición de la corriente de fuga subumbral , de acuerdo con la literatura que estoy leyendo, es la corriente entre la fuente y el drenaje de un transistor cuando el transistor está apagado/cerrado.
Sí, debe medir las corrientes por separado para separar las de fuga de las activas. Estoy familiarizado con la definición de conducción subumbral en general, pero siempre hay una pregunta sobre cómo definir "corriente subumbral": puede definirla simplemente como la corriente que fluye entre los terminales del transistor cuando está cerrado, o usted puede agregar la corriente que fluye durante la conmutación del transistor cuando la polarización de puerta a fuente está por debajo del voltaje de umbral del transistor. El primero es mucho más fácil de obtener y, supongo, es de su interés.
En ese caso, el modelado de corrientes por debajo del umbral será interesante para buscar tendencias y cosas como GIDL, etc. La precisión no será tan grande, pero se aprenderán cosas interesantes. Lo más probable es que los modelos de fundición tengan estas pruebas integradas, pero debe verificar. Si son modelos genéricos, probablemente no tenga suerte.
@VasiliyZukanov, sí, es lo que me interesa. Ya que lo mencionaste, déjame hacerte una pregunta, que también está relacionada con el primer comentario. ¿Cuál es la fuente de las corrientes activas en este caso? No tengo ninguna actividad de cambio. Entonces, ¿por qué necesito separarlos de la corriente de fuga? Gracias.
¿Qué estás intentando lograr? Las corrientes estarán más cerca de cero que la mayoría de las otras cosas que medirá. En el mundo real, a menudo se verán inundados por rutas de fugas externas a los circuitos integrados. La mayoría de las baterías tendrían una vida útil más corta que el tiempo necesario para que dichas corrientes de fuga las descarguen sustancialmente. Por lo tanto, las corrientes pueden tener cierta relevancia en un diseño de múltiples puertas de lathge (que usted menciona), pero debe tener en cuenta otros factores que contribuyen si el anser debe ser útil en el mundo real.
@RussellMcMahon, sí, estoy interesado en la fuga en el contexto de los diseños de VLSI. ¿Puedo pedirle que elabore un poco más su última oración? ¿Cuáles son otros factores que contribuyen a la corriente de fuga? Como mencioné anteriormente, este enfoque es lo suficientemente bueno para mis propósitos en este momento; Me gustaría estudiar este circuito simple primero para obtener una mejor intuición y comprensión del tema. Gracias.
Lo siento, no me di cuenta de que está utilizando simulación de CC aquí, no hay transitorios involucrados. Ok, ahora parece ser suficiente información para escribir una respuesta.

Respuestas (1)

Si entendí correctamente su intención, está tratando de medir las corrientes de fuga utilizando la simulación de CC en el siguiente circuito:

ingrese la descripción de la imagen aquí

El código que obtuve (omitiendo todas las configuraciones habituales) es:

********* Simulation Settings - Parameters and SPICE Options *********

*-------- Devices: SPICE.ORDER > 0 --------
MNMOS_1 N_1 IC Gnd Gnd NMOS W=250n L=250n AS=225f PS=2.3u AD=225f PD=2.3u  
MNMOS_2 IC N_1 Gnd Gnd NMOS W=250n L=250n AS=225f PS=2.3u AD=225f PD=2.3u  
MPMOS_1 N_1 IC Vdd Vdd PMOS W=500n L=250n AS=450f PS=2.8u AD=450f PD=2.8u  
MPMOS_2 IC N_1 Vdd Vdd PMOS W=500n L=250n AS=450f PS=2.8u AD=450f PD=2.8u  
VVdd Vdd Gnd  DC 2.5 

********* Simulation Settings - Analysis section *********
.dc lin vVdd 0 2.5 100m

********* Simulation Settings - Additional SPICE commands *********
.ic v(IC)=0

.print DC gate_leak<A>='(abs(i2(mNMOS_1))+abs(i2(mNMOS_2))+abs(i2(mPMOS_1))+abs(i2(mPMOS_2)))/4'

.print DC subth_leak<A>='(abs(i3(mPMOS_1))+abs(i3(mPMOS_2)))/2'


.end

Tenga en cuenta el uso de la función abs() : es necesaria porque las corrientes pueden tener signos diferentes.

La sintaxis del comando de impresión es:

i<#terminal>(<device_type><name>)

En el ejemplo anterior:

  • Los terminales 2 y 3 representan Gate y Source respectivamente
  • m significa MOSFET

Y las huellas resultantes:

ingrese la descripción de la imagen aquí

Puede ver que el modelo que utilicé no modela las fugas de la puerta en absoluto, o el valor es extremadamente pequeño (supongo que lo primero es cierto). La fuga por debajo del umbral, por otro lado, parece tenerse en cuenta. De todos modos, dijiste que tus modelos son precisos, por lo tanto, no debería ser un problema para ti.

La información anterior lo ayudará a obtener los resultados que desea, pero creo que estos resultados no serán demasiado precisos. De hecho, para corrientes subliminales serán muy imprecisos. La razón de esta inexactitud es que las corrientes subumbrales tienen una dependencia exponencial del sesgo de puerta a fuente. En la simulación de CC, este sesgo será constante para cada transistor. En aplicaciones reales, siempre hay algo de ruido que afecta el sesgo de puerta a fuente.

Una forma de mejorar ligeramente los resultados será agregar alguna fuente de voltaje de "ruido" en serie a la entrada de cada inversor. Si barre el valor de este ruido, podrá tener una idea de cómo las corrientes de fuga pueden verse afectadas por el ruido. Sin embargo, para aproximaciones que sean buenas, deberá realizar un análisis transitorio y agregar fuentes de voltaje de ruido que se aproximen al ruido real que esperaría que estuviera presente en su sistema.

Si esta tarea no es solo educativa, sino que estas medidas se van a tener en cuenta durante el desarrollo de un hardware real, tendrá que ejecutar el análisis Monte-Carlo para comprobar los valores de las corrientes de fuga para una amplia gama de condiciones de funcionamiento.

Espero que esto ayude.

Vasiliy, estoy sinceramente impresionado por tu respuesta detallada. ¡Gracias por su tiempo y sus valiosos comentarios! ¿Puedo preguntar qué simulador de SPICE está utilizando? Parece que el mío no puede leer las corrientes de pines individuales usando la sintaxis iN(M)donde Nestá el número del pin deseado del dispositivo especificado por M. Además, si tuviera que medir todas las corrientes juntas sin necesidad de conocer la contribución de cada una individualmente, ¿sería correcto medir solo una corriente que fluye a través del nodo de tierra? ¡Gracias!
@Ivan 1) Estoy usando TSpice, que es parte del paquete Tanner Tools. Esta es una herramienta comercial. Sin embargo, imprimir los voltajes/corrientes en los terminales de los transistores es la funcionalidad básica de Spice. Consulte la documentación de su Spice; estoy seguro de que encontrará algunos ejemplos allí. Agregaré una línea a la respuesta explicando la sintaxis, tal vez esto ayude. 2) Medir la corriente en el nodo de tierra debería darte 0, por lo tanto, en general, no puedes usar este enfoque. Sin embargo, puede imprimir la corriente en el terminal positivo de la fuente de alimentación.
Lo siento, de hecho tenía la intención de preguntar sobre Vdd, no sobre el nodo de tierra. ¡Gracias!
@Vasiliy e Ivan Para simular pequeñas cantidades (<1nA), como la fuga por debajo del umbral y, en particular, la fuga de la puerta, a menudo es relevante reducir el parámetro GMIN y/o GMINDC unos pocos órdenes de magnitud (el simulador inserta las conductancias GMIN detrás de escena para la convergencia, y normalmente el valor predeterminado es GMIN=1e-12). Otras configuraciones de convergencia y precisión también pueden afectar los resultados.