En esta segunda y última lección dedicada a la implementación de los sistemas digitales vamos a dar unas pinceladas sobre las estrategias de diseño de los circuitos integrados y sobre las herramientas de síntesis. Valga recordar una vez más que el diseño de circuitos integrados de aplicación específica es un tema complejo que podría constituir tranquilamente un curso completo o incluso más y que aquí nos limitaremos simplemente a dar unas pinceladas sobre el mismo. En la lección anterior vimos que diseñar un circuito integrado definiendo cada una de sus formas geométricas, definiendo lo que llamamos su layout es un problema realmente complejo por la cantidad de información con la que hay que trabajar, resulta por tanto imprescindible echar mano de estrategias que nos permitan trabajar con dicha complejidad y de disponer de herramientas software que nos faciliten la síntesis de los circuitos que deseamos implementar. Comenzaremos hablando sobre las estrategias de implementación y veremos las más comunes, veremos tres de ellas, las standard cells, los gate arrays y las FPGAs. Todas estas estrategias parten de la base de que se dispone de una librería de celdas, librería que contiene puertas lógicas, biestables e incluso otros componentes más complejos que suministra el propio fabricante. El fabricante suministra también el layout de estas celdas que se almacena en la citada librería. En el caso de las celdas estándar, de las standard cells, este layout está diseñado de manera que todas sus celdas tienen la misma altura y esto se hace para facilitar la ubicación de estas celdas, su placement como veremos más adelante, sobre la superficie de silicio, formando filas. Aquí tenemos, por ejemplo, el layout de una puerta NAND de tres entradas, contiene tres transistores N y tres transistores P. El layout del circuito completo se genera colocando los distintos componentes, es decir, cajas similares a estas en filas y reservando unos espacios, unas bandas entre ellas por las que pasarán las conexiones. Las librerías contienen no solo celdas básicas, sino también las llamadas macroceldas. Las macroceldas son, pues, bloques, por ejemplo, bloques de memoria, multiplicadores, sumadores completos, etcétera, cuya característica fundamental es que son configurables, es decir, el diseñador antes de utilizar la macrocelda puede definir alguno de sus parámetros, por ejemplo, si está trabajando con una celda de memoria RAM, puede definir el número de palabras de la memoria y el número de bits por palabra o, si está trabajando con una ROM, además del tamaño, puede definir incluso el contenido de la memoria ROM o, si trabajamos con un sumador de n bits, pues podemos definir en cada momento cuál es el número de bits de los operandos que vamos a utilizar. ¿De acuerdo? Al final, el circuito integrado tiene un aspecto como esto, una serie de filas, donde aquí hemos ido ubicando cada una de las celdas separadas por unos canales de interconexión por donde vamos a pasar las pistas que me conectarán unas celdas con otras. En muchos casos habrá también, pues, bloques de macroceldas, como aquí, donde podéis observar que las macroceldas no cumplen la condición de que su altura es la misma que el resto de las celdas que estamos utilizando. Este esquema, este esquema general de dónde van colocadas las distintas celdas y bloques recibe el nombre de plano de base o floor plan. De hecho, en los circuitos modernos no hay verdaderos canales de conexión, sino que toda la superficie del circuito está ocupada por celdas y las conexiones se pasan por encima de las mismas. Se cubren las celdas con una capa de óxido de silicio que las aísla y se pasan las pistas de conexión por encima de esta capa aislante. Bien, una vez ubicadas las celdas y realizadas las interconexiones el aspecto de un circuito integrado es algo como esto que podemos ver aquí, una maraña de pistas de distintos colores, donde cada color significa un tipo de material depositado o un proceso aplicado. Por ejemplo, las líneas azules suelen representar pistas de aluminio a distintos niveles, las líneas rojas suelen representar pistas de polisilicio, etcétera, etcétera, etcétera. La segunda estrategia de implementación que vamos a ver son los gate arrays. En este caso se trabaja con obleas de silicio, en las cuales previamente you se han integrado un conjunto de celdas totalmente independientes del circuito que se desea implementar. La tarea del diseñador será añadir las conexiones necesarias para que sobre esta base común se acabe configurando el circuito deseado. El aspecto del floor plan es bastante similar al de las celdas estándar, como veis hay un conjunto de filas de celdas y canales de interconexión entre ellas, con dos particularidades importantes, la primera es que, mientras que en las standard cells las celdas son puertas lógicas o biestables u otros dispositivos completos, aquí las celdas son conjuntos de transistores que, dependiendo de cómo los conectemos, formarán un tipo u otro de puerta o de dispositivo en general. Lo vamos a ver justo a continuación. La segunda particularidad es que mientras que en las standard cells, el diseñador va ubicando en filas las celdas de biblioteca que necesita, aquí una puerta AND, allá un flip flop, etcétera, en las gate arrays las celdas en cada fila son todas iguales y están you predefinidas. Ni las celdas predefinidas ni el número de columnas ni la anchura de los canales de interconexión se pueden modificar en un gate array. Los fabricantes ofrecen distintas versiones de una misma gate array con distintos números de filas, de columnas en el fondo, con distinto número de celdas básicas, normalmente agrupan todas estas gate arrays en lo que llaman familias. Las filas están formadas por celdas, digamos vírgenes o, en terminología inglesa, uncommitted cells que, dependiendo cómo las conectemos, acabarán configurando una puerta lógica u otra. Esto es lo que vamos a ver justo a continuación. Aquí tenemos una celda virgen, esto sería una celda virgen. Está formada por cuatro transistores N y cuatro transistores P, aparte de unas pistas metálicas que están conectadas a alimentación y a tierra. Estas pistas rojas, son pistas de polisilicio que forman las puertas de los transistores. Fijémonos que una misma pista de polisilicio forma las puertas de un transistor P y de un transistor N, de modo que, esta celda básica es equivalente a este esquema eléctrico que tenemos aquí a la derecha cuatro transistores N, cuatro transistores P, de forma que las puertas de cada pareja de transistor N y P están interconectadas. Estas dos pistas azules que hemos mencionado antes de VDD y de tierra se corresponderían con las línea de conexión VDD y GND. Veamos, por ejemplo, cómo podríamos personalizar una celda virgen para constituir, para formar una puerta NOR de cuatro entradas. Primero recordemos, una puerta NOR de cuatro entradas está formada por cuatro transistores P, los vamos a dibujar, conectados en serie y conectados a alimentación, seguidos de cuatro transistores N conectados en paralelo y finalmente todos conectados a tierra. Este punto de aquí es la salida y cada una de las señales que llegan a una puerta del transistor P, de un transistor P también llegan a un transistor N, es decir, si esta es la señal A, esta también es A, si esta es B, aquí tenemos B y lo mismo con C y D, ¿de acuerdo? Bueno, dice pues, esto, lo vamos a ver primero sobre el circuito eléctrico, podemos configurar esta celda virgen, diciendo, mira, los cuatro transistores P han de estar en serie, de hecho, you lo están, el extremo este ha de estar conectado a VDD, pues voy a añadir esta conexión aquí y este punto sé que será la salida. Vale, dice ahora tenemos los cuatro transistores n colocados en paralelo, que lo puedo configurar de esta manera. Dice, conectando este punto a tierra, este punto a out, fijaros que aquí tengo un primer transistor que uno de sus extremos está conectado a la salida y el otro está conectado a tierra. Es decir, podría ser por ejemplo este a. A continuación voy a conectar, vamos a ver el segundo, este segundo transistor n otra vez estará por uno de sus extremos conectado a la salida out y por el otro conectado a tierra. Lo mismo puedo hacer con este tercer transistor y con este cuarto. Fijaros que aquí estas son las entradas a, b, c, d yo tengo cuatro transistores p conectados en serie, con entradas a, b, c, d eh la salida y cuatro transistores n conectados en paralelo como muestra esta figura de aquí. Bueno pues, estas conexiones son pistas que yo puedo integrar el layout de la celda diciendo pues que aquí pondré una pista de metal, conectando estos dos puntos. Aquí pondré una pista de metal que me conectarán estos puntos de aquí, ¿De acuerdo? Este punto debería lo tener conectado a alimentación y este punto también lo debería tener conectado a alimentación, aquí tendría las entradas a, b, c, d y este punto de aquí sería la salida. Dibujado más bonito, aquí tenéis el resultado. para el diseñador esta parte del proceso resulta transparente. El diseñador ve que tiene una librería de celdas con puertas lógicas y similares con las que va construyendo su circuito y luego hay una herramienta de síntesis que genera automáticamente todas estas conexiones que hemos visto. Igual que en el caso de las standard cells, la verdad es que los gate arrays modernos tampoco tienen canales de interconexión, sino que toda la superficie está cubierta por estas celdas vírgenes y las interconexiones entre celdas se pasan por encima de las celdas pre habiendo, previamente aislado estas celdas con una capa de óxido de silicio. Estas gate arrays reciben el nombre de sea of gates o mar de puertas. Bien, debido a que las celdas en el caso de los gate arrays están predefinidas y su estructura es intocable, los circuitos construidos con gate arrays suelen ser menos eficientes que los construidos con standard cells. Menos eficientes en el sentido de que la densidad de integración es menor, es decir, el número de transistores por unidad de superficie finalmente es menor y en el sentido de unas prestaciones más modestas. Normalmente, los circuitos construidos con gate arrays son algo más lentos o tienen un consumo mayor que sus homólogos con standard cells. Pero a cambio, debido a que parte del proceso que you está realizado el tiempo de fabricación de los gate arrays es menor y el coste también es más bajo. Pensemos no sólo en el coste, el tiempo de fabricación muchas veces es un factor limitante, porque cuando queremos implementar un circuito de estas características un circuito integrado debemos encargarlo a una fábrica y la disponibilidad de un circuito puede demorarse semanas e incluso a un mes. Bueno pues precisamente la gran ventaja de la tercera estrategia de implementación que vamos a ver la FPGAs, es que el propio diseñador puede configurarlas en el laboratorio. El término field programmable hace referencia precisamente a este hecho. La estructuras de las FPGAs es pues similar a las que hemos visto hasta ahora con esta gran diferencia de que son programables por el usuario. El floor plan, el plano de base podría ser algo como esto miles de celdas básicas, aunque aquí no haya dibujado miles ¿vale? Más un montón de interconexiones que también son programables. Aquí podemos ver un ejemplo de una celda básica, de una celda básica muy simplificada, por supuesto. Vemos que incluye una look up table de cuatro entradas como las que vimos la semana tres, que permite implementar cualquier función de cuatro variables, más un flip flop y un multiplexor que permite conectar la salida de la celda básica, o bien con la salida de la look up table, es decir, la salida puede ser cualquier función de cuatro variables o bien con la salida del elemento de memoria. El bit de configuración del multiplexor o mejor dicho, los bits de configuración de los multiplexores de todas las celdas básicas se guardan en una memoria de programación. Es decir, además de las celdas básicas la FPGA contiene unas celdas de memoria que no forman parte del circuito final en sí, sino que sirven para almacenar la configuración específica de cada una de las celdas y veremos más adelante de las interconexiones. Aquí tenemos tres ejemplos de interconexiones. En el primer ejemplo, en cada intersección de una línea vertical y una línea horizontal tenemos un transistor. Dependiendo de que si la puerta de este transistor está a cero o a uno, la pista horizontal y la pista vertical quedan conectadas cuando aquí tenemos un uno o aisladas cuando en la puerta del transistor tenemos un cero. Igual que con los bits de configuración de los multiplexores, este valor de cero o uno que decide si en la pista horizontal y la pista vertical se conectan o no, se guardan en la memoria de configuración. Cambiando el contenido de esta memoria, programamos la FPGA. Si la memoria de configuración es una RAM, la FPGA se podrá reprogramar tantas veces como queramos. Pero, la programación se perderá cuando desconectemos la alimentación. En este segundo ejemplo, el dispositivo que une la pista horizontal y la pista vertical es un antifusible. Un antifusible actúa como un interruptor inicialmente abierto, es decir, inicialmente ambas pistas están desconectadas que se puede cerrar fundiéndolo mediante la aplicación de una tensión elevada. En este caso no es necesaria ninguna memoria de configuración pero la FPGA una vez programada no puede reprogramarse nunca más. Y en este tercer ejemplo, el elemento de interconexión es un transistor de puerta flotante del mismo tipo de los que se utilizan en las memorias EPROM. Se comporta como en el primer caso, con la diferencia de que al establecer una tensión de puerta cero uno, la puerta de transistor queda permanentemente cargada a cero o a uno hasta que se le aplica una tensión inversa. El resultado es una FPGA de configurable cuantas veces queramos y que además mantiene su configuración en ausencia de alimentación. Este es un ejemplo de una FPGA comercial, que incluye celdas básicas, los llamados bloques lógicos configurables o CLBs, bloques de memoria RAM, multiplicadores, etcétera. Las FPGAs actuales tienen un número muy elevado de celdas tanto, que permiten incluso implementar en un único chip sistemas digitales que pueden incluir incluso un microprocesador o memorias de tamaño medio alto. Constituyen las FPGAs una muy buena opción para el diseño de prototipos o de series de un número relativamente bajo de unidades. Con la gran ventaja que supone el que se pueda programar digamos en casa, sin necesidad de pasar por fábrica. Cuando se trata de construir un número elevado de unidades o cuando las prestaciones del circuito, velocidad, consumo o tamaño son críticas entonces es necesario optar por las otras estrategias de implementación que hemos visto.