You are on page 1of 13

Tutorial para el diseño de un circuito integrado I:

El inversor

Este tutorial es una introducción a las herramientas básicas que se usará para diseñar un
CI básico y complejo desde la perspectiva transistor hasta la perspectiva lay-out. También
se propondrá una metodología que puede ser considerada como base para cualquier tipo
de diseño.
https://www.youtube.com/watch?v=lcQCwYrX2wE

I. Introducción
El flujo de diseño cosiste en varias herramientas que produce un output usado como input
para el siguiente paso. Este flujo esta dad a continuación:

Cdesigner, Hspice y Wave View permite de visualizar el circuito a implementar y simular


lo con forma de onda. Cdesigner permitirá también de crear el lay-out y Hercules de
verificar los errores.
El sistema el más básico es el inversor así que implementaremos uno en tecnología 90nm
y lo usaremos para implementar un circuito más complejo.
II. El espacio de trabajo
Todos los numbre que usarán debe ser consistente para todolos diseños (nivel transistor,
circuito, sistema) respectar la minúsculas y mayúsculas: vin ≠ Vin. Elegir nombre que sea
relacionado a los circuitos y los que hacen: si su circuito es un inversor llaman lo inv o
inversor or invertir, si se trata de un circuito con fuente para hacer test llaman lo inv_test,
invertir_testbench, inversor_prueba etc… Una gran parte de los errores que pueden tener
provienen de no respetar eso.

 Antes de todo asegurar que el bashprofile ha sido correctamente modificado para


poder usar las diferentes herramientas.
 Lanzar el cdesigner con el comando: cdesigner&
 Crear una nueva biblioteca: File New  Library
 Dar un nombre en “name” (algo relacionado al circuito que van a implementar)
 Elegir la opción import file y seleccionar el archivo:
III. Crear una Cell View
 Crear una “Cell View” en su biblioteca: File  New CellView (aquí Sample_Inv)
 Completar como debajo:

 Click OK y aparece la vista Schematic


 Seleccionar la biblioteca correcta: Tools Technology Manager y averiguar que a
su biblioteca es bien vinculado el buen PDK: SAED_PDK_90
 Añadir componente: AddInstance o hacer un click en el icono del transistor
 Seleccionar en la biblioteca del PDK 90 el “pmos4t” y el “nmos4t” y posicionar les
de manera a conectar en inversor
o Para el pmos4t asignar un ancho de canal de 0.5um y para el nmos4t una
ancho de 0.25um
o Todas las propiedades de sus componentes se maneja desde
EditPropertyProperty Edito y seleccionar el componente

 Hacer la conexión eléctrica usando el icono


o Ojo los MOSFET de los inversor tiene el D en cortocircuito y las fuentes en
corto circuito con el cuerpo

 Poner un nombre si se falta con el icono: y el campo Wire name


o Vin, Vout, VDD, VSS etc.
 Añadir los Pins : Add Pin y dar les un nombre a cada una
o Input: VIN, VDD, VSS
o Output: VOUT
o OJO cada pin debe ser sea input o output (campo “type”)
 Guardar: Designsave y cerrar
 Crear un símbolo: Design New CellViewFrom CellView
o Asegurar sé que la biblioteca corresponda a su biblioteca
o Tenemos el modelo nivel transistor del inversor que vamos a “simbolizar”
o Elegir una forma (AddShape) que representa un inversor por ejemplo un
triángulo y eliminar las etiquetas que no les son de utilidad:
o Ejemplo:

 File New CellView y seleccionar su biblioteca debajo el campo la columna


bibliteca. Ingresar un nombre relacionado a la prueba de su inversor, ejemplo:
inversor_testbench y elegir “schematic” para el campo “viewname” y “editor”
 Addinstance y seleccionar su biblioteca y su inversor (con el nombre que ha
elegido) y usar la opción “Symbol” para la vista. La idea es de usar el símbolo que
han creado.
 Añadir la fuente de alimentación y de señal: addinstance, elegir la biblioteca
analogLib y seleccionar “vsource, vpulse y gnd y colocar para hacer su montaje de
test
 Conectar las fuentes y el inversor con los cables y un pin para la salida Vout
 Usando el editor de propiedad asignar los valores siguiente:
o Vpulse: pulso de 1.2V (voltage1 = 0 y voltage2 = 1.2V) tensión dc a 0,
tiempo de retraso de 100ps, tiempo de subida 10ps, de caída 10ps ancho
del pulso = 2ns y periodo = 4ns
o Vsource: DC voltaje = 1.2V
 Guardar: DesignSave y cerrar
IV. Simulation and AnalysisEnvironment (SAE)
El SAE es un entorno para hacer la análisis DC y transitorio

 Tools (en Console 0) SAE single testbench:

Sección Output

o SetupModels Files y seleccionar el archivo “SAED90nm.lib” en el campo


Model File y elegir TT_12 en el campo section (tipo de transistor)
o SetupAnalysis y seleccioanr la opción “tran” para análisis transitoria,
checkear la opción Enable y en el cuadro: TransientAnalysis: Number of
Intervals = 1, Start Time = 0, Time step 10p and stop time 100ns y clickApply
o Ahora elegir dc para aplicar el DC sweep, Dar un nombre a la fuente (V0 por
ejemplo), elegir en SweepType Linear Steps, Start = 0, Stop 1.2
stepsize=0.01, y chekear la opción Enable.
o En la sección output:
 poner el nombre de la salida (VOUT)
 En expresión elegir el nodo sobre el “schematic” o escribir v(/vout)
 En la parte “analysis” seleccionar el tipo de analysis a hacer. En este
caso “dc” y “tran”
o Arreglar la tensión de entrada input: hacer el mismo que para el output
poniendo VIN
o Arreglar la corrient del circuito: hacer el mismo considerando la fuente de
entrada
o Debería obtener algo parecido al siguiente:
 SessionSaveState
 Aparece una nueva ventana OpenAcess y elegir un nombre  OK
 Para ejecutar a simulación: SimulationNetlist and Run
 Ejecucion terminada hace aparecer una ventana de Wave View donde puede elegir
el tipo de análisis que quiere visualizar (transient o dc) Graficar cada una y
interpretar las
V. Wave View
Se trata de una herramienta de medición que tiene ciertas características. Para cada una
aplicar las y comentar. Todas la mediciones aparecen en cajas (box) que se puede mover
en su grafico para ilustrar su resultado.
- Zoom de la señal
- Agrupar o desagrupar señales (vista separada)
o Seleccionar las señales a agrupar con el comando CTRL
- Medición del retraso del Vin y Vout @50%
o Retraso a 50% entre Vin y Vout: Seleccionar la opcintran (bajo izquierda) y
agrupar Vout y Vin. Abrir Toolmeasurement, seleccionar la pestaña All y
elegir Time Domain, Delay, percentage (L(%) = 50 y ref. L(%) = 50), target
signal y OK
- Rise/fall Tima @ 90% and @10% for Vout:
o Usar el mismo que para el retraso y elegir: Time Domain, Rise/Fall,
Percentage(L(%) = 90 y ref. L(%) = 10), target signal y OK
- Medición de la corriente promedia
o Seleccionar la pestaña “tran” nuevamente y borrar la formas de onda de
Vin y Vout; pueden reproducir estos grafico con la opción PLot en la
ventana de SAE
o Tools measurements y desplegar en la izquierda y click sobre “Average”
en el sub-menu “Level”  OK
- Medición en Frecuencia:
o Seguir como en la medición del r/f time or retraso pero elegir “Frequency”
OK
VI. Crear un layout
El dibujo del layout es la etapa la más cercana de la fabricación. Para entender la relación
entre el circuito con símbolo abstracto y la fabricación en término de material se
recomiende de leer el documento de la tecnología (DesignRules.pdf) pero para introducir
el propósito de la regla de los LMIN podemos ilustrar la con la figura siguiente debajo.
Observan que llamamos LMIN la longitud mínima de la tecnología que se relaciona al nodo
tecnológico.

Como lo podemos ver el valor de  es la medida a usar en la implementación de su


circuito y permite de aplicar reglas/restricciones a respectar para que su transistor no
aparece con error a la implementación. Es la razón por la cual esta etapa se completa con
una herramienta para averiguar los circuitos/transistores. Esta herramienta aplica las
Design Rules Check (DRC) sobre su circuito en forma de layout para comprobar lo.
El inversor debe tener la forma siguiente:
NWEL
L
pMOS Contacto cuerpo

IN OUT

pMOS

 File NewCellView (en la consola) y seleccionar la biblioteca de su circuito


 OJO: Poner la opción “SmartDRD:” a “Off” en la parte de arriba de la ventana del
layout para evitar de observar las DRC en tiempo reales.
 Usar el icono en forma de regla para conocer las unidades en  al momento de
dibujar.
 Seleccionar una material (usar como referencia la figura de arriba) por ejemplo
NWELL (pozo de semiconductor de tipo N que contiene el pMOS) y seleccionar
CreateRectangle
o Dibujar un rectángulo que calza con las reglas dibujada anteriormente
 Crear el pMOS y nMOS y las conexiones al cuerpo. Eso se define usando las
difusiones de impurezas para crear los contactos S, D y B. Usar el material DIFF y
dibujar 2 rectángulos (ojo el pMOS es más ancho que el nMOS) y dos otros para el
contacto hacia el cuerpo entonces cerca del transistor; para el pMOS
específicamente en el pozo.
o Arreglar la dimensión EditProperty editor
 Añadir la implantación de las impurezas:
o pMOS implantación de tipo n  NIMP en el NWELL
o nMOS implantación de tipo p  PIMP hasta el límite del NWELL
o el cuerpo debe tener una implantación inversa: Si no se produce un corto
circuito entre VDD y VSS  efecto de latch-up
 otra opción sería de hacer una contacto específico para hacer una
polarización local
 Crear la conexión del poly (poli-Si): CreatePath y dibujar una banda que une los 2
transistor puesto que es la entrada común (material poly)
 Añadir los contactos:
o seleccionar CO en los materiales y usar créate Rectangle o CreatePolygon
(de dimensión 0.13x0.13) y usar la regla de diseño
o Añadir el metal sobre los contactos: seleccionar el material M1 y,
CreatePath, el metal debe recubrir el contacto de un área especificada en
las regla de diseño para esta tecno.
o Añadir nombre en los contactos/conexiones: Seleccionar M1PIN,
CreateTextLabel
 VDD, VSS, Vout y Vin (son equivalente a los pin en el diseño
transistor)
 Guardar : DesignSave
 Ejecución del DRC:
o VerificationDRC Setup and Run
o Ubicar el archivo de “runset” en la carpeta Hercules/drc:
rules.drc.9m_saed90.ev
o Run Dir: ./invertir.hercules.drc, Library: (su biblioteca), cell: (nombre de su
circuito, inversor por ejemplo), vista layout, Tool: Hercules, runset (ver
punto precedente)
 Resultado del DRC:
o En la consola debe aparecer un mensaje que notifica que no hay errores
sino deben buscar los errores de su layout y lanzar nuevamente el DRC
hasta que no haya error. Si su layout no es “Clear” no pueden pasar en la
etapa siguiente. Los errores provienen por no haber respectada las reglas
de diseño.
o Si tiene errores los detalles de los errores se encontrará en el archivo de
salida “inversor.LAYOUT_ERRORS”, y empezar para arreglar ciertas errores
porque a veces un errores puede producir otras errores atrás y así en loop.

VII. Ejecución del LVS


LVS significa Layout versus Schematic y permite de verificar que el diseño layout (modelo
físico) es bien equivalente al circuito electrónico (modelo matemático).¡OJO los nombres
de las labelas usado en el layout y el schematic debe corresponder sino no puede
funcionar! Si no funciona es posible que no han usados las mismas dimensiones de los
transistores entre el schematic y layout.

 VerificationLVSSetup and Run, y en la opción principal seleccionar el archivo


rules.lvs.9m_saed90.ev como runset que encontrará en la carpeta hercules/lvs
 En la opción NetlistingOptions: Schematicnetlist:
./inverter.hercules.lvs/inverter.cdesigner.sp, Netlister: CDL
 En la pestaña Control Variables seleccionar el variable DECK_TYPE, valor PEX_DECK
y no cambiar mas
 Eliminar los valores por defectos en la pestaña CustomOptions
 OKresultado en la consola
 Si no tiene errores se notificará el mensaje PASS sino FAIL. Para corregir los errores
leer el informe sobre los errores en el archivo invertir.LVS_ERRORS. Lanzar
nuevamente hasta que no haya errores.

VIII. Extracción de los parásitos


Solo si el test DRC y LVS sea exitoso se puede pasar en la extracción de los parásitos LPE,
LayoutParasiticExtraction que son en general debido a componentes resistivos y
capacitivos.

 Verification LPESetup and Run:

Note el runset se encuentra en la carpeta starrcxt esta vez.


En la pestaña ExtractionOption elegir el archivo saed90nm.map en la carpeta starrcxt y
aplicar las opciones como debajo:
Ojo: el nombre del nodo a la tierra debe corresponder! Si usaron VSS deben tener en
esta opción VSS.
En la pestaña output options elegir Format: OA, viewnamestarrc, devicemap
seleccionado desde la carpeta starrcxt (nombre del archivo device_map) y layermap
seleccionar el archivo output_layer_map de la misma carpeta.
Seleccionar OK para ejecución

 Después de ejecución aparece la ventana de los parasíticos en la cual los


elementos pueden ser mi pequeño; usar el zoom para la ver les más precisamente

IX. Simulación post layout


En esta simulación vamos a ver el efecto de los componentes parásitos sobre su inversor.

 File Open Design


 Seleccionar su biblioteca, la Cells que representa su inversor en testbench y la vista
Schematic; debería aparecer la ventana con su inversor en condición de test con la
vista schematic
 Vamos a cargar los componente parásitos: Files  New CellView, y en la
ventana de Cellview vamos a crear una nueva configuración: New
CellViewInversor_testbenchconfig; aplicar HE-config en el campo Editor
 La ventana de “Hierrachy Editor” aparece, elegir View: schematic, View SearchList:
schematichspice symbol, view Stop List: symbol; en el cuadro debajo en la columna
Selected elegir starrc y para terminar File Save
 Para iniciar la simulación: FileOpen design, seleccionar el archivo
inversor_testbench, config en view y seleccioanr Open Design con click derecho
sobre config
 Finalmente hacer la simulación: Tool SAE y comparar con los resultados
simulado sin parásitos

X. Medición de la capacitancia del circuito


La capacitancia es fundamental para medir el tiempo de transito de una señal a través de
una compuerta. La capacitancia total comprende la capacitancia de la tecno más las
capacitancias debidas a las conexiones y otros. Conocer la permite de saber estamos
dentro de las specs o no para un diseño definido.

 En la herramienta ResultsAnalyzer del SAE: ResultsAnalyzer,


 seleccionar la capacitancia especifica de un transistor: ”op” en el menú “analysis”
 seleccionar “operatingpoint” en el menú “Expression” y “Instance” en el menú
selección
 Seleccionar el componente a medir en el campo “Parametername“ (cgtot) y
averiguar la opcion: “ImmediateEvaluacion”
 Se puede leer el valor en el campo de abajo
 En el campo Expresión aparece la formula usada

You might also like