Layout. Guía rápida de inicio. En este documento vamos a mostrar los pasos a seguir para la realización del layout de un circuito, su verificación, extracción de parásitos y finalmente la simulación del circuito extraído. En este ejemplo el circuito que vamos a implementar es el de la figura de la izquierda, mientras que el de la derecha es el circuito que utilizaremos para las simulaciones. Sus nombres son “circuito1” y “circuito1_tst” respectivamente: 1. Editando layouts En la ventana “Library Manager” picamos en “File ->New ->CellView” y en la ventana que aparece seleccionamos “Tool: Virtuoso”. El nombre de la vista es el mismo del esquemático, “circuito1”, y el tipo de vista se pone en “layout” de forma automática. Tras picar en OK aparecen dos nuevas ventanas. La más grande es el editor de layouts, que está vacío. También aparece una ventana alargada y vertical llamada LSW (Layer Select Window). En esta ventana elegimos la capa de material con la que vamos a realizar las conexiones en el layout. En la figura de la izquierda se señalan las capas más utilizadas en la práctica. Sólo las capas con la etiqueta “dg” (drawing) se usan en la fabricación de las máscaras del chip, así que hay que evitar confundirlas con otras capas similares como las “pn”, “hl”, ... etc, que sólo tienen significado para el propio editor de layouts. En la figura de la derecha se señalan los botones más usados del editor de layouts. Antes de empezar a dibujar el layout del circuito hay que cambiar algunas opciones del editor. Picamos en “Options >Display” y cambiamos las opciones resaltadas en la figura. Al terminar picamos en “Save To”. Comenzamos el layout añadiendo como instancias los transistores de canal P. Los situamos deliberadamente próximos para tener errores de reglas de diseño. Picamos en “Verify ->DRC...” y en la ventana que aparece picamos en “Set Switches” y seleccionamos los que se muestran en la figura. A conttinuación picamos en OK y en la ventana “icfb” aparece un listado con los errores encontrados. Entre los errores obtenidos tenemos “Minimum MET1 spacing = 0.45” y “Minimum DIFF spacing = 0.6”. Debemos separar los transistores lo suficiente como para cumplir con estas reglas. En el layout aparecen rectángulos parpadeantes que nos indican las zonas donde hay errores de DRC. Estas zonas parpadeantes se pueden borrar en el menú “Verify ->Markers ->Delete all”. Separamos los transistores mediante la accióm “Move” y ahora recurrimos a la regla (atajo de teclado “k” ) para medir las distancias entre las capas de los transistores: Movemos los transistores hasta que las capas DIFF (en verde) quedan separadas 0.6 micras y borramos las reglas mediante el atajo de teclado “K, mayúscula”. Ahora son las zonas PPLUS (amarillo) las que están demasiado cerca, pero no pasaría nada si las unimos en un único rectángulo, simplemente se haría la implantación sobre un óxido grueso. Para ello seleccionamos la capa PPLUS en la ventana LSW y dibujamos un rectángulo que una los dos transistores: Pasamos de nuevo la comprobación de reglas de diseño y ahora ya no salen errores. Sin embargo los transistores no están completos. Faltan los contactos al pozo N. Para añadir contactos picamos en “Create ->Contact” o usamos el atajo de teclado “o”. Seleccionamos el tipo de contacto “ND_C” (contacto a difusion N). Para crear múltiples contactos usamos los campos de filas y columnas del formulario. En el ejemplo se crea una matriz de contactos de 1 fila y 8 columnas. Colocamos los contactos en la parte de arriba de los transistores, pero no hay suficiente espacio como para que queden dentro del pozo N. Tendremos por lo tanto que extender el pozo N, cosa que hacemos seleccionando la capa NTUB en la ventana LSW y dibujando un rectángulo que incluya los contactos Añadimos ahora el transistor de canal N, que colocamos a más de 3 micras del pozo N y también unos contactos al sustrato (tipo PD_C), al finalizar comprobamos las reglas de diseño picando en “Verify ->DRC...” y vemos que no hay errores. En la figura de la izquierda vemos los dispositivos ya colocados: Ahora comenzamos la interconexión de los terminales. Comenzamos conectando las fuentes de los transisitores a masa (canal N) o alimentación (canal P). Para ello seleccionamos la capa de metal 1 en la ventana LSW y hacemos las conexiones mediante pistas o rectángulos. También conectamos los drenadores de los trasnsistores de la derecha. Ahora faltan por conectar las puertas de los transistores. Creamos contactos al polisilicio (tipo P1_C), seleccionamos la capa POLY1 y rellenamos con rectángulos de polisilicio hasta completar las conexiones de las puertas (figura de la derecha). Tras comprobar de nuevo las reglas de diseño tenemos completado el layout del circuito. Ahora falta indicar qué zonas de qué capas se corresponden con los pines del esquemático. Añadimos los pines como se muestra en la siguiente figura: En el formulario hay que seleccionar los campos “I/O type” y “Pin Type” adecuados para el pin. En nuestro caso todos los pines se conectan a zonas de METAL1, de modo que seleccionamos “MET1_T”. También activamos la opción “Display Pin Name”, damos el nombre adecuado al pin y finalmente lo conectamos picando en el layout. Este es el aspecto del layout tras añadir todos los pines: 2. Extracción y Layout versus Esquemático (LVS) El siguiente paso es la validación del layout. Hay que garantizar que el circuito es el mismo en el esquemático y en el layout. Para comprobarlo disponemos de dos herramientas: La extracción y LVS. La extracción genera una nueva vista a partir del layout que puede incluir dispositivos parásitos, en particular capacidades. El programa LVS compara el circuito extraído con el esquemático y nos dice si son iguales o no. Comenzamos con la extracción. Para ello picamos en “Verify ->Extract” y en el formulario que aparece picamos en “Set Switches” y seleccionamos “Capall” (todas las capacidades parásitas): Tras picar en OK se genera la nueva vista del circuito (View: extracted). En la ventana “icfb” sale el “log” del programa de extracción, que incluye los errores detectados en el caso de que los hubiese. La vista extraída tiene un aspecto como el de la siguiente figura, en la que podemos observar un diodo parásito entre el pozo N y el sustrato y un par de capacidades parásitas. Una vez obtenida la vista extraída podemos compararla con el esquemático picando en “Verify ->LVS...” en la ventana del layout, no en el extraído. Rellenamos los campos “Library”,”Cell” y “View”, tanto para el esquemático como para el extraído y luego picamos en “Run”. Un poco después una ventana nos dice que la tarea LVS ha terminado con éxito, pero eso no significa que las vistas coincidan, sólo que el programa LVS ha corrido sin errores. Para asegurarnos que layout y esquemático coinciden picamos en “Output” y en la ventana que aparece leemos el “log” hasta encontrar la frase esperada: “The net-list match”!!! En el caso (bastante frecuente) de que los net-list no coincidan hay que leer detalladamente el log para intentar comprender donde están los errores. Ningún layout se puede dar por bueno si no pasa la prueba del LVS. 3. Simulando con circuitos extraídos Para utilizar el circuito extraído en lugar del esquemático en las simulaciones hay que crear en primer lugar una nueva vista de la celda “circuito1_tst”. Fijemonos que esta es una vista para la celda que incluye el circuito del que hemos hecho el layout, no del propio “circuito1”. En el formulario elegimos la herramienta “Hierarchy-Editor”, lo que nos genera una vista de tipo “config”: En el formulario que aparece picamos en “Use Template” y en la nueva ventana que se abre seleccionamos “spectre” y picamos en OK: Esto rellena de forma automática el formulario anterior, de modo que sólo tenemos que picar en OK. Finalmente aparece una tabla con el listado de celdas de “circuito1_tst”. Entre ellas está “circuito1” con su vista de tipo “schematic”. En la columna “View to Use” escribimos extracted y picamos en “Update”: Al actualizar la tabla aparecen nuevas celdas para los dispositivos parásitos del circuito extraído (pnwd, pcapacitor) y ahora la vista encontrada para “circuito1” es “extracted”. Picamos en “Save” (icono del disquete) y en “File ->Exit”. Al terminar tenemos una vista “config” para “circuito1_tst”. Al hacer un doble click en esta vista aparece la siguiente ventana: Si seleccionamos “Open for editing: Top Cell View ..... schematic” y picamos en OK aparecemos en el editor de esquemáticos. Si por el contrario seleccionamos “Open for editing: Configuration .... config” volvemos a editar la tabla de celdas que acabamos de modificar anteriormente. Abrimos el esquemático, que a primera vista parece ser el esquemático de siempre. Sin embargo, si seleccionamos el símbolo de “circuito1” y descendemos en la jerarquía en lugar de un esquemático aparece la vista del extraído de “circuito1”. Esta es la prueba de que en las simulaciones vamos a utilizar el circuito extraído con todos sus parásitos. Picando en “Tools ->Analog Enviroment” podemos realizar las simulaciones de la forma habitual.