Está en la página 1de 22

Capítulo 6

Dispositivos Programables de Alta


Capacidad

Índice General

6.1. Estructura de una cPLD . . . . . . . . . . . . . . . . . . . . . . . . . 3


6.1.1. La cPLD XC9500 de Xilinx . . . . . . . . . . . . . . . . . . . . . . 5
6.1.2. Otras prestaciones de las cPLDs . . . . . . . . . . . . . . . . . . 6
6.2. Estructura de una FPGA . . . . . . . . . . . . . . . . . . . . . . . . . 8
6.2.1. Bloque lógico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
6.2.2. Tecnologías de programación . . . . . . . . . . . . . . . . . . . . 11
6.2.3. La FPGA XC4000 de Xilinx . . . . . . . . . . . . . . . . . . . . . 13
6.2.4. Otras prestaciones de las FPGAs y sus líneas futuras . . . . . . 16
6.3. Resumen de los dispositivos programables . . . . . . . . . . . . . 18
6.4. Sistemas de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Los dispositivos lógicos programables de alta capacidad permiten implementar


funcionalidades de un nivel de complejidad muy superior a los dispositivos sPLDs. Básica-
mente se trata de dos grupos de dispositivos: cPLDs y FPGAs
Las cPLDs fueron introducidas inicialmente por Altera, y su estructura no es más que
una agrupación de PALs. Las FPGAs fueron introducidas por Xilinx y poseen una estructura
más regular.
6.1 Estructura de una cPLD 3

6.1. Estructura de una cPLD


Las cPLDs constituyen una extensión del concepto de las sPLDs a un nivel de
integración más alto. En lugar de fabricar dispositivos con matrices programables cada vez
mayores, la CPLD está formada por la interconexión de muchos bloques lógicos, cada uno de
ellos similar a una pequeña PAL, como, por ejemplo, una 22V10.
Un esquema genérico de una cPLD se detalla en la figura 6.1. En ella se aprecia que los
diferentes bloques lógicos de interconectan entre sí mediante una matriz de interconexiones
programable, y con el exterior a través de los bloques de entrada y salida.

m m
Bloque Bloque
lógico lógico
n n
Matriz de
m interconexiones m
Bloque Bloque
entradas / salidas

entradas / salidas
lógico programables lógico
n n

m m
Bloque Bloque
lógico lógico
n n

Bloque m m Bloque
lógico lógico
n n

Figura 6.1: Esquema genérico de una cPLD

Cada bloque lógico es una PAL con un plano AND y una macrocelda de salida, que se
conecta con el exterior y se realimenta a la matriz de interconexiones programable. La figura
6.2 es un detalle del esquema genérico anterior.

Macrocelda

Plano
AND
celda I/O

bloque de Macrocelda
interconexiones
programables

Figura 6.2: Bloque lógico genérico de una cPLD

Las tecnologías de programación son las mismas que las que utilizaban las sPLDs, esto
es, fusible, EPROM, EEPROM y Flash.
4 Dispositivos Programables de Alta Capacidad

El bloque de interconexiones programables se encarga de unir las entradas de los blo-


ques de entrada/salida con las entradas de los bloques lógicos, y las salidas de estos últimos
con sus propias entradas o con entradas de otros bloques lógicos.
La mayoría de las cPLDs utilizan dos técnicas para implementar la matriz de inter-
conexiones programable: utilizando una matriz de elementos de memoria (Fusible, EPROM,
EEPROM o flash) o empleando una matriz de multiplexores.

pin de entrada

bloque
lógico

bloque
lógico

pin de entrada

Matriz de interconexiones programables

Figura 6.3: Matriz de interconexiones programables basada en elementos de memoria

La primera de ellas, la que se encuentra basada en una matriz de elementos de memoria,


permite que cualquier señal de la matriz de interconexiones pueda llegar a cualquier entrada
de un bloque lógico.
La figura 6.3 muestra un detalle de la matriz de interconexiones programable. En el-
la se aprecia que existen tantos cables verticales como entradas a bloques lógicos. Además,
en cada cruce de los cables verticales con salidas de bloques lógicos o entradas externas ex-
iste un elemento de programación (representado en la figura por un transistor FAMOS). Este
elemento de programación actúa a modo de interruptor, de modo que el usuario puede pro-
gramarlo siempre abierto (sin conexión) o siempre cerrado (con conexión). La idea es similar
a los elementos de programación vistos en las PLAs. La posibilidad de interconexión es to-
tal: cualquier entrada a la matriz de interconexiones programables puede ser llevada a una
entrada no usada de un bloque lógico, programando convenientemente los interruptores. Es-
ta ventaja presenta un grave inconveniente debido a que la gran cantidad de elementos de
conexión necesitan un área muy elevada.
La técnica basada en multiplexores de la figura 6.4 emplea un multiplexor por cada
entrada de un bloque lógico. Las señales de la matriz de interconexiones programable se
conectan a las entradas de los multiplexores. Las señales de selección de dichos multiplexores
se programan mediante celdas de memoria de modo que una de sus entradas sirva de entrada
a un bloque lógico. En este caso la rutabilidad no es completa y está estrechamente rela-
cionada con la dimensión de los multiplexores, cuyas entradas sólo se conectan a un número
pequeño de señales de la matriz de interconexiones programable. Cuanto mayor sea la di-
mensión de los multiplexores, tanto más se verá favorecida la rutabilidad, aunque a costa de
usar un área mayor. Igual que siempre, disponer de un mayor número de recursos de rutado
siempre tiene un mayor coste en área.
6.1 Estructura de una cPLD 5

bloque
lógico

Señales de selección

bloque Señales de selección

lógico

Matriz de interconexiones
programables

Figura 6.4: Matriz de interconexiones programables basada en multiplexores

6.1.1. La cPLD XC9500 de Xilinx


La figura 6.5 muestra el diagrama de bloques de la familia 9500 de Xilinx. Se trata de

controlador Control de programación del


Puerto JTAG
JTAG sistema

Bloque
I/O Matriz de lógico
interconexiones
I/O
programables
Bloque
entradas / salidas

I/O
lógico
I/O

Bloque
Reloj global
3 lógico
set/reset global
1
Bloque
tri-estado global
lógico

2 ó 4

Figura 6.5: Diagrama de bloques de la familia XC9500 de Xilinx

una cPLD con tecnología Flash, que admite hasta 10.000 ciclos de programación y borrado.
Siguiendo el esquema general de un cPLD, cuenta con varios bloques lógicos dependiendo de
qué elemento de la familia se trate. Cada bloque lógico es una 36V18, esto es, una PAL con
18 macroceldas de salida versátiles: programables con salida a registro o combinacional. El
elemento más básico de la familia es la XC9536, llamada así porque cuenta con 36 macro-
celdas de salida, permitiendo utilizar hasta un total de 36 biestables. La gama de cPLDs es
variable hasta llegar a la XC95576, con un total de 576 macroceldas de salida. Los tiempos de
propagación también se mueven entre los 5 ns de la 9526 y los 10ns de la 95576. La tabla 6.1
6 Dispositivos Programables de Alta Capacidad

detalla las características de varios componentes de la serie 9500.

Cuadro 6.1: Familia XC9500 de Xilinx

XC9500 9536 9572 95108 95144 95216 95288 95576


Macroceldas 36 72 108 144 216 288 576
Puertas eq. 800 1600 2400 3200 4800 6400 12800
tP D (ns) 5 7.5 7.5 7.5 10 10 12
Biestables 36 72 108 144 216 288 576
Entradas/salidas 34 72 108 133 166 192 232

La serie 9500 cuenta además con un puerto JTAG que permite testear el diseño o pro-
gramarlo en placa usando este estándar. Asimismo, dispone de varias entradas de reloj y un
set/reset que llegan a todos a los bloques lógicos.

6.1.2. Otras prestaciones de las cPLDs


Además de los bloques lógicos, recursos de rutado, tecnologías de programación, existen
otras prestaciones que actualmente se incorporan en la mayoría de integrados que aparecen
en el mercado, y que detallamos a continuación.

ISP (In System Programability). Es la posibilidad de programar un dispositivo cuando


se encuentra en una placa de circuito impreso. Es una prestación importante porque
permite ahorrar tiempo en la depuración de un diseño. Es especialmente importante
en los dispositivos que no van en zócalo, como los de montaje superficial, cuyos pines
se sueldan sobre la huella en la placa de circuito impreso. En este caso no es posible
desoldar el integrado para llevarlo al programador, por lo que es vital la posibilidad de
programación en placa con el dispositivo ya soldado.

ISR (In System Reprogramability). Es la posibilidad de reprogramar un dispositivo


cuando se encuentra soldado en una placa de circuito impreso y funcionando dentro
de una aplicación concreta. Es decir, se trata de la posibilidad de modificar la funcional-
idad del dispositivo dentro de la propia aplicación, por ejemplo, para realizar una serie
de tareas secuenciales en el tiempo usando el mismo dispositivo programable. Muchos
dispositivos utilizan un puerto JTAG, como el que incorpora la serie 9500 de Xilinx, para
llevar a cabo los procesos de ISP o ISR.

Puerto JTAG: muchos dispositivos programables incorporan este estándar (IEEE/ANSI


1149.1) que define un método para testear la funcionalidad y las conexiones dentro de
un integrado así como las interconexiones con otros integrados. Como hemos visto, tam-
bién puede usarse para programar o reprogramar el dispositivo programable. Desde un
punto de vista hardware, consta de varios pines externos que permiten definir un mo-
do de funcionamiento en el que se serializan todos los biestables de las macroceldas
("boundary scan"), de modo que podemos introducir una cadena de bits que recorren ese
registro de desplazamiento que constituyen todos los biestables del dispositivo. A través
de la salida del puerto JTAG, se lee la cadena de bits de salida, o bien directamente a
través de los pines externos de salida del dispositivo (ver figura 6.6).
Normalmente, el puerto JTAG cuenta con cuatro señales:

• TDI: señal de entrada a través de la cual se introducen los vectores de test.


6.1 Estructura de una cPLD 7

Macrocelda Macrocelda
Lógica del
sistema
Macrocelda Macrocelda

Macrocelda Macrocelda

Macrocelda Macrocelda

Macrocelda Macrocelda

TDI Lógica de control del puerto JTAG TDO

Figura 6.6: Testeo de la circuitería interna a través de un puerto JTAG

• TDO: señal de salida a través de la cual se leen los vectores de test.


• TMS: señal que permite la evolución del autómata interno que contiene el bloque
de control del puesto JTAG.
• TCLK: señal de reloj.

Algunos puerto JTAG usan una quinta señal TRST que sirve para resetear el bloque de
control del JTAG. Serializando los registros internos de varios dispositivos, conectán-
dolos en cascada mediante las señales TDI y TDO, es posible testear las conexiones de
varios dispositivos, como se indica en la figura 6.7

Lógica del Lógica del Lógica del


sistema sistema sistema

Lógica de control del puerto JTAG Lógica de control del puerto JTAG Lógica de control del puerto JTAG
TDI TDO TDI TDO TDI TDO

Figura 6.7: Testeo de las conexiones de varios dispositivos a través de un puerto JTAG

Introduciendo un patrón de entrada, se puede comprobar si las conexiones, indicadas


mediante flechas en la figura, tienen algún cortocircuito o discontinuidad. Para ello hay
que interpretar la discrepancia entre el patrón de salida y el patrón esperado.

Encapsulados. Las CPLDs pueden encontrarse en dos tipos de encapsulados:

• "Through-hole": son los encapsulados DIP ("Dual In-line Package", figura 6.8a) y
PGA ("Pin Grid Array"), caracterizados porque tienen pines "largos"que admiten
el empleo de un zócalo. La ventaja que tiene este tipo de encapsulado estriba en
un montaje más sencillo, mayor resistencia mecánica (interesante en aplicaciones
8 Dispositivos Programables de Alta Capacidad

militares) y la posibilidad de usar un zócalo que permite cambiar fácilmente el


integrado. Por contra, los montajes "through hole.ocupan bastante espacio en placa,
en primer lugar porque los encapsulados son grandes, y en segundo lugar porque
los pines atraviesan la placa de circuito impreso, anulando una cierto área de la
cara de abajo.
• "SMD (Surface Mount Devices)". Son encapsulados del tipo SOIC ("Small Out-
line IC"), PLCC ("Plastic Leadless Chip Carrier", 6.8b), PQFP ("Plastic Quad Flat-
pack"), CQFP (Çeramic Quad Flatpack") y BGA ("Ball Grid Array"). Presentan la
ventaja de ocupar mucha menos área que los encapsulados anteriores, no sólo por
ser más pequeños sino porque no atraviesan la placa de circuito impreso, pues se
sueldan sobre la huella en la cara correspondiente. Un mayor detalle de los dife-
rentes tipos de encapsulados puede encontrarse en las hojas de catálogo de cada
integrado en concreto.

Figura 6.8: Dos tipos de encapsulados para CPLD

6.2. Estructura de una FPGA


Una FPGA es una matriz de celdas lógicas que se comunican unas con otras y con
los pines de entrada salida a través de canales de rutado cuyas conexiones son programables.
El esquema genérico de la FPGA se muestra en la figura 6.9. Posee una estructura regular,
aunque el bloque lógico y la arquitectura de rutado varía de un fabricante a otro.

Bloque
lógico

Canales de rutado
horizontales

Canales de rutado
verticales Bloque
entrada salida

Figura 6.9: Esquema genérico de una FPGA


6.2 Estructura de una FPGA 9

La estructura de un FPGA, comparada con la de una cPLD, es mucho más regular, y se


encuentra más orientada a diseños que manejen mayores transferencias de datos y registros,
en tanto que las cPLD implementan más eficientemente diseños con una parte combinacional
más intensa. La figura 6.10 muestra a golpe de vista la diferente estructura de ambos dispos-
itivos. La arquitectura de una cPLD es una agrupación de PALs, interconectadas entre sí a

cPLD FPGA

Figura 6.10: Esquema de bloques de la arquitectura interna de una cPLD y una FPGA

través de la matriz de interconexiones programable. Cada bloque lógico es una PAL con una
parte combinacional que permite realizar un gran número de funciones lógicos programables,
más un biestable asociado al pin de entrada salida e caso de encontrarse habilitado. La ar-
quitectura de la FPGA cuenta también con un bloque lógico con una parte combinacional y
una parte secuencial. La parte combinacional es mucho más simple que la de una de las PAL
interna de una cPLD. La parte secuencial posee uno o dos biestables, que ya no están siempre
asociados a un pin de entrada salida, pues los bloques lógicos se distribuyen regularmente en
todo el dispositivo.
Con respecto a la densidad, las cPLDs poseen una densidad media o baja en tanto que
las FPGAs tienen unas densidades altas con capacidades crecientes que llegan incluso hasta
más del millón de puertas equivalentes.
Finalmente, es importante señalar como otra diferencia interesante el hecho de que
los retrasos asociados a la propagación de las señales son predecibles a priori en una cPLD,
en función de los parámetros temporales que nos proporciona el fabricante. En el caso de
una FPGA, los retrasos hay que determinarlos de forma exacta a posteriori, pues vendrán
determinados por el rutado final de las señales.

6.2.1. Bloque lógico


El bloque lógico consta de una parte combinacional, que permite implementar funciones
lógicas booleanas, más una parte secuencial que permite sincronizar la salida con una señal
de reloj externa e implementar registros. La parte combinacional varía de un fabricante a otro.
A continuación, explicaremos dos de ellas, representativas porque poseen unas prestaciones
opuestas.

Bloque lógico basado en LUT (look-up table):


Una LUT es una memoria SRAM que almacena una tabla de verdad. Las direcciones de
la memoria son las entradas de la función lógica que queremos implementar, y en las cel-
das de memoria se guardan todos los resultados para todas las posibles combinaciones
de las entradas. En una LUT de n × 1 es posible implementar cualquier función lógica
de n entradas. Veamos un ejemplo. Supongamos que queremos implemetar la función
10 Dispositivos Programables de Alta Capacidad

lógica de tres entradas f = X · Y + Z. La figura 6.11 indica cuál debe ser el contenido de
un LUT de 8 × 1.

X
Y
f=XY+Z LUT 8x1
Z
0
1
Tabla de verdad 0
X 1
X Y Z f Y Salida
Z 0
0 0 0 0 1
0 0 1 1 1
0 1 0 0 1
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 1

Figura 6.11: Ejemplo de implementación de una función lógica de tres entradas en una LUT
de 8 × 1

Bloque lógico basado en multiplexores:


El bloque lógico basado en multiplexores, como el de la figura 6.12, se caracteriza porque
requiere mucha menos lógica que el anterior basado en una LUT, y, en consecuencia,
ocupa mucha menos área. De este modo, se pueden implementar mayor número de blo-
ques lógicos en el mismo espacio, o, para el mismo número de bloques, disponer de más
espacio para incrementar los recursos de rutado. Como contrapartida, no se puede im-
plementar cualquier función lógica de n entradas, como ocurría con las LUTs. En caso
necesario, esta función lógica hay que repartirla entre varios bloques lógicos. La salida
f la podemos expresar en función de los valores intermedios α, β, γ.

A0 A1 SA

0
α
1
0 f
1
0 γ
β
1

B0 B1 SB S0 S1

Figura 6.12: Bloque lógico basado en multiplexores

α = SA A1 + SA A0 (6.1)
6.2 Estructura de una FPGA 11

β = SB B0 + SB B1 (6.2)

γ = S0 + S1 (6.3)
De donde resulta f = γ α + γ β. Evidentemente, cualquier función lógica que se
desee implementar debe respetar las ecuaciones anteriormente escritas. Si se quiere
realizar la misma función lógica del ejemplo anterior, f = X Y + Z, será necesario
elegir adecuadamente la asignación de las entradas para tener el resultado requerido.
Si tomamos A0 = Y , A1 = 0 y SA = X en la ecuación (6.1), resulta α = XY . Tomando en
la ecuación (6.2) B0 = 1, B1 = 0 y SB = 0, resulta que β = 1. Finalmente, sustituyendo
S0 = Z y S1 = 0 en la ecuación (6.2) se obtiene γ = Z. A partir de estos resultados, la
salida f = Z X Y + Z = X Y + Z. A través de otras asignaciones se puede llegar al
mismo resultado. Lo que está claro es que no podemos efectuar cualquier función lógica
de 8 entradas, pues tenemos las restricciones de las ecuaciones lógicas.

6.2.2. Tecnologías de programación


La tecnología de programación es el parámetro fundamental en el diseño de una FPGA,
ya que determina el resto de la arquitectura interna de las misma. Las principales tecnologías
de programación en FPGAs son: antifusibles, SRAM y Flash.
Antifusible. El antifusible es un dispositivo de dos terminales cuyo estado no progra-
mado presenta una gran resistencia óhmica. Se trata de la antítesis de un fusible. Suele
emplearse silicio amorfo (no cristalizado) que se deposita en una vía entre dos capas de
metal. Inicialmente presenta una elevada resistencia, pero, aplicando un pulso de pro-
gramación de 10 a 12 V a través de la vía, las capas de metal a ambos lados penetran el
silicio amorfo dando lugar a una conexión eléctrica. La figura 6.13 muestra el estado no
programado y programado de un antifusible. Esta técnica que emplea silicio amorfo se
denomina Vialink.

conexión
metal via metal via

SiO 2 SiO 2 SiO 2 SiO 2

SiO 2 SiO 2

Elemento antifusible no programado Elemento antifusible programado

Figura 6.13: Estados no programado y programado de un antifusible basado en silicio amorfo


(Vialink)

Existe otra técnica denominada PLICE que emplea un dieléctrico de oxígeno-nitrógeno-


oxígeno (ONO) entre una capa de polisilicio y una difusión n+ , aunque tiene peores
características resistivas que la anterior.
La principal ventaja del antifusible reside en que se trata de un elemento de inter-
conexión de alta densidad, ya que tan sólo ocupa el tamaño de un vía más la circuitería
externa de programación. No obstante, como inconvenientes principales hay que señalar
los siguientes:
• No son reprogramables. Una vez formada la conexión es imposible retornar al es-
tado no programado.
12 Dispositivos Programables de Alta Capacidad

• La serialización de elementos antifusibles programados en líneas largas puede dar


lugar a conexiones de un resistencia elevada.
• Es necesaria un circuitería adicional de programación.

RAM estática. Las celdas de memoria RAM estática controlan el estado de los transis-
tores de paso que actúan como interruptores. Programando estas celdas de memoria se
pueden realizar conexiones entre cables verticales y horizontales, como en el ejemplo de
la figura 6.14.

Figura 6.14: Conexión mediante celdas de RAM estática

Las ventajas e inconvenientes de las celdas de RAM estática como elemento de progra-
mación son opuestas a los antifusibles. Su principal ventaja es la reprogramabilidad
que ofrecen las celdas de memoria RAM, lo que permite cambiar la funcionalidad una
vez programada la FPGA. Como inconvenientes cabe señalar los siguientes:

• Las celdas de RAM estática son volátiles, por lo que normalmente van acompañadas
de una memoria externa que guarda la configuración interna. En el momento del
arranque, la FPGA carga desde esta memoria EPROM externa su configuración y,
a continuación, comienza a operar normalmente.
• Al igual que los antifusibles, necesita de una circuitería externa de programación.
• El tamaño de una celda RAM estática es mucho mayor que el de un antifusible.

Flash. El avance experimentado en los últimos años en el diseño y prestaciones de


las celdas de memoria Flash ha permitido su incorporación reciente al mundo de los
dispositivos programables como tecnología de programación. Las FPGAs basadas en
celdas Flash recogen las ventajas principales de las dos técnicas anteriores situándose
en un punto intermedio.

• Su tamaño es bastante más reducido que el de una celda de RAM estática, aunque
sin llegar al tamaño reducido de un antifusible.
• Son reprogramables, aunque la velocidad de programación es bastante más lenta
que en el caso de una RAM estática.
• Son no volátiles, por lo que no necesitan un dispositivos auxiliar para guardar la
configuración interna, como en el caso de la SRAM
6.2 Estructura de una FPGA 13

La tecnología de programación es un parámetro de diseño fundamental en una FPGA,


ya que condiciona su arquitectura interna.
Las FPGAs basadas en antifusibles se caracterizan por tener una elevada rutabilidad
debido a que el elemento de programación ocupa poco espacio. Prácticamente, existe un in-
terruptor en cada intersección, siendo posible llegar a ocupar el 100 % de los bloques lógicos
internos. Este bloque lógico se caracteriza por ser bastante sencillo, con poca lógica en su
parte combinacional. Este es el caso del bloque lógico a base de multiplexores del apartado
anterior. No obstante, posee un elevado número de entradas y salidas para poder aprovechar
la gran cantidad de recursos de rutado disponibles. El hecho de usar un bloque lógico sencillo
supone que para implementar una función lógica compleja haya que dividirla entre varios
bloques lógicos, lo que introduce mayores retrasos en la propagación de las señales, limitando
la velocidad máxima que puede alcanzarse.
Las FPGAs basadas en SRAM se caracterizan por poseer muchos menos recursos de
rutado, como consecuencia de emplear un interruptor que ocupa un mayor espacio. El bloque
lógico es más complejo que el de las FPGAs basadas en antifusibles, con una parte combina-
cional que permite implementar funciones lógicas más complicadas. Este es el caso del bloque
lógico basado en LUT, que permiten implementar cualquier función lógica del mismo número
de entradas. Como contrapartida, nunca llegan a aprovechar el 100 % de la lógica interna. A
diferencia de las FPGAs de antifusibles, no suele ser necesario partir funciones lógicas en-
tre muchos bloques lógicos, lo que redunda en menores retrasos de propagación para lógicas
complejas.
Finalmente, las FPGAs basadas en celdas Flash suelen emplear un bloque lógico sencillo
para incrementar los recursos de rutado, como ocurre con las FPGAs de antifusibles.

6.2.3. La FPGA XC4000 de Xilinx


La figura 6.15 es un esquema general de la FPGA XC4000 de Xilinx. Se trata de una de
una FPGA de RAM estática, formada por una estructura regular de bloques lógicos o CLBs y
bloques de entrada salida en la periferia o IOBs. Todos estos bloques se unen unos con otros a
través de las interconexiones programables que existen en los canales internos de rutado.

Bloque de
entrada salida
Bloque lógico
(IOB)
(CLB)

Interconexiones
programables

Figura 6.15: Esquema genérico de la FPGA de Xilinx XC4000


14 Dispositivos Programables de Alta Capacidad

El bloque lógico interno o CLB se ilustra mediante un diagrama simplificado en la figura


6.16. La parte combinacional de tres generadores de funciones: F, G y H, las dos primeras

C1 C2 C3 C4

H1 DIN S/R EC

Control
set reset

SD
G4 D Q YQ
Generador
G3 de funciones
G
G2
EC
RD
G1
"1"
Generador Y
de funciones
H

F4
Generador Control
set reset
F3 de funciones
F
SD
F2 D Q XQ

F1

EC
RD

"1"
X

clk

Figura 6.16: Diagrama de bloques simplificado de la CLB de la FPGA XC4000 de Xilinx

son LUTs de cuatro entradas, y la H, de tres entradas. Los generadores de funciones F y


G pueden implementar cualquier función lógica de cuatro entradas, almacenando todos los
posibles resultados en sus 16 celdas de memoria RAM estática. La LUT H tiene la posibilidad
de trabajar con las salidas de las otras dos LUTs o directamente con las entradas Cx de
la CLB, según se programen los multiplexores internos. Es interesante observar el hecho
de que la parte combinacional de la CLB puede emplearse, no sólo para realizar funciones
lógicas, sino para implementar una memoria RAM interna asíncrona, que podría ser incluso
una memoria de doble puerto, o una memoria RAM síncrona, usando los biestables de salida
de la CLB. La CLB tiene un total de 13 entradas.
En cuanto a la parte secuencial, consta de dos biestables o latches, según se configuren.
Como biestables, la señal de reloj es una entrada de la CLB, siendo programable la polaridad
del reloj de cada biestable, a partir de los multiplexores internos encargados de ello. Como
latches, ambos usan las señal de clock enable (EC), sin existir en este caso la posibilidad de
invertirla dentro de la CLB. Por último, ambos elementos de almacenamiento disponen de
entradas de set y reset independientes.
La salidas de la CLB vienen gobernadas por un multiplexor que determina si ésta
proviene de la salida de los biestables o directamente de la parte combinacional. Es impor-
tante señalar que la programación de los multiplexores internos de configuración de la CLB
son totalmente transparentes al usuario, siendo el sistema de desarrollo quien, de una man-
era automática, se encarga de esta labor, tomando como punto de partida el diseño realiza por
el usuario.
6.2 Estructura de una FPGA 15

Los bloques lógicos de entrada y salida o IOBs proporcionan la interfaz entre los pines
externos y la lógica interna del integrado. Cada IOB controla un pad externo que puede ser
configurado como entrada, salida o bidireccional. La figura 6.17 es un detalle de la estructura
interna de una IOB. Las señales I1 e I2 son entradas a la lógica interna y pueden pasar por

Vcc
Pasivo,
Control de
Pull-up
slew-rate
Pull-down

T/OE

D Q Buffer
O de salida
CE
Pad

OK (output clock) Buffer


Flip Flop de entrada

I1

I2
D Q
Delay
Clock enable
CE

IK (Input clock)
Flip Flop / Latch

Figura 6.17: Diagrama de bloques simplificado de la IOB de la FPGA XC4000 de Xilinx

un biestable incluido en la propia IOB o pasar directamente desde el pad de entrada, según la
programación interna de la IOB. La señal de salida O procedente de la lógica interna también
posee la posibilidad de pasar por un biestable. Los dos biestables internos de la IOB poseen
señales de reloj independientes y carecen de set y reset, a diferencia de los biestables de la
CLB. Finalmente, la señal T permite controlar el estado de alta impedancia del buffer de
salida, necesario para implementar pads bidireccionales o conectar la salida a un bus.

Las interconexiones internas de una FPGA se pueden realizar de tres formas:

Conexiones directas. Son las que tienen lugar entre CLBs adyacentes. Estas conexiones
se indican mediante flechas en la figura 6.18.

Conexiones de propósito general. Para realizar conexiones entre CLBs no adyacentes


es necesario pasar por las matrices de interconexiones de la figura 6.18. Su misión es
conectar canales verticales y canales horizontales de rutado que permitan llegar al pun-
to final de conexión. Cuanto más larga sea la línea de rutado, mayores serán los retrasos
introducidos, tanto por la propia longitud de la línea, como por los elementos de conexión
por los que va pasando.

Líneas largas. En diseños complejos, siempre existen líneas que deben recorrer el inte-
grado o que tienen longitudes grandes, como ocurre con las señales de reloj o los buses
internos. Para evitar que estas líneas atraviesen muchos elementos de conexión, que in-
troducen retrasos, se contempla la existencia de líneas largas, que recorren el integrado,
y que normalmente se usan para llevar la señal de reloj o soportar buses internos.
16 Dispositivos Programables de Alta Capacidad

CLB CLB

Matriz de Matriz de
conexiones conexiones

CLB CLB

Figura 6.18: Conexiones internas en la FPGA XC4000 de Xilinx

La familia XC4000 tiene FPGAs que oscilan entre las 3.000 y las 62.000 puertas. Este
no es un valor excesivo si se tiene en cuenta que existen ya FPGAs que superan el millón de
puertas y además de forma creciente en un futuro inmediato. No obstante, la familia XC4000
posee una capacidad suficiente para implementar diseños de cierta complejidad. La tabla 6.2
es un resumen de los distintos miembros de la familia.

4003 4005 4010 4020 4025 4044 4062


Macroceldas 3K 5K 10K 20K 25K 44K 62K
Puertas equivalentes 2-5K 3-9K 7-20K 13-40K 15-45K 27-80K 40-130K
Total bloques lógicos 100 196 400 784 1024 1600 5376
Biestables 360 616 1120 2016 2560 3840 5376
Entradas/salidas (max.) 80 112 160 224 256 320 384

Cuadro 6.2: Familia XC4000 de Xilinx

6.2.4. Otras prestaciones de las FPGAs y sus líneas futuras


Otras prestaciones que suelen incluir las FPGAs son similares a las vistas para
las cPLDs:

ISP (In System Programability).

ISR (In System Reprogramability).

Puerto JTAG.

Encapsulados Through-hole y SMT.

Además, hay FPGAs, como la familia XC4000 de Xilinx, que incluyen biestables en las
celdas de entrada y salida (IOBs), disponen de búferes con triestados internos y poseen dis-
positivos de baja tensión.
6.2 Estructura de una FPGA 17

Las líneas futuras, que veremos hechas realidad en los próximos años, trabajan en los
siguientes puntos:

Crecimiento en velocidad y capacidad. Tecnologías con más metales y menos escalas


de integración (actualmente llegan a las 0.18 micras) permitirán de dispositivos con
mayores prestaciones en capacidad y velocidad.

Dispositivos de baja tensión. A medida que aumenta la escala de integración es preciso


disminuir las tensiones de alimentación. El gráfico 6.19 muestra las tendencias actuales
y futuras.

Tecnología ( µ
m)
1.2

Menor coste 1

Mayor rapidez 0.8

Mayor densidad 0.6

5V
Menor potencia 0.4
3.3 V

2.5 V
0.2
1.8 V
1.3 V

0
1990 1992 1994 1996 1998 2000 2002

Figura 6.19: Evolución de las tecnologías con las tensiones de alimentación

Reprogramabilidad. Actualmente, se trabaja intensamente en dispositivos que puedan


ser reprogramados rápidamente para implementar funcionalidades distintas que ten-
gan que estar presentes en un sistema digital de forma secuencial en el tiempo. Esta
posibilidad permitiría emplear un único dispositivo programable en lugar de varios.

La distinción entre CPLDs y FPGAs irá disminuyendo en el futuro, con la aparición de


dispositivos híbridos.

La principal dificultad que encuentra el usuario de dispositivos programables radica en


la elección del fabricante. Esto se debe a que dos FPGAs con dos arquitecturas diferentes re-
sultan difícilmente comparables de una manera objetiva. Para superar esta dificultad, existe
una corporación sin ánimo de lucro denominada PREP (Programmable Electronics Perfor-
mance Company). Se trata de un consorcio formado por varios vendedores de dispositivos pro-
gramables cuya misión es proporcionar un método estándar que permita analizar y comparar
CPLDs y FPGAs. La idea principal es que el ingeniero usuario de dispositivos programables,
que no puede disponer del suficiente tiempo para estudiar y comparar las características y
prestaciones de los diferentes fabricantes, disponga de un patrón objetivo de comparación que
le permite realizar la mejor elección para el proyecto que pretenda abordar. Este patrón de
comparación se realiza e base a una serie de circuitos sencillos definidos por el PREP:

Un circuito datapath consistente en un multiplexor de 4 a 1, un registro y un registro


de desplazamiento, de un tamaño de 8 bits.
18 Dispositivos Programables de Alta Capacidad

Un circuito contador formado por dos registros, un multiplexor de 4 a 1, un contador y


un comparador, todo de un tamaño de 8 bits.

Una máquina de estado pequeña de 8 entradas, 8 salidas y 8 estados.

Una máquina de estado grande de 16 estados, 8 entradas y 8 salidas.

Un circuito aritmético consistente en un multiplicador de 4 bits, un sumador de 8 bits y


un registro de 8 bits.

Un acumulador de 16 bits.

Un contador de 16 bits con carga síncrona y habilitación.

Un contador pre-esacalado de 16 bits con carga y habilitación. El contador no tiene que


empezar a contar hasta varios ciclos de reloj después de la carga.

Un decodificador de direcciones de 16 bits.

Cada uno de los fabricantes implementa estos circuito en sus dispositivos programables
y entrega los resultados y prestaciones. Concretamente, indica el número de veces que cada
uno de los circuitos puede implementarse en el dispositivos bajo estudio. Caso de ser más de
una, las salidas de los circuitos se unen a la entrada de los adicionales. También se indican
las prestaciones en velocidad, cómo se ha realizado la optimización, la herramienta utilizada,
etc. El PREP se encarga de recoger, verificar y publicar estos datos.
Aunque estos datos sirven de guía al ingeniero, tienen sin embargo algunos inconve-
nientes:

Los circuitos utilizados como patrón de comparación no son los más adecuados para
dispositivos de gran capacidad, pues repiten una y otra vez el mismo circuito hasta
ocupar toda la capacidad, en lugar de usar un sistema más realista.

No todos los fabricantes de dispositivos participan en el PREP.

Los circuitos anteriores no dan idea de la facilidad para conseguir esos resultados ni de
las prestaciones de los sistemas de desarrollo utilizados.

Más información sobre las actividades del PREP pueden encontrase en su página web,
http://www.prep.org.

6.3. Resumen de los dispositivos programables


En una primera división , podemos considerar tres grandes grupos:

El primero está constituido por la denominada lógica discreta, circuitos integrados que
implementan circuitos lógicos muy sencillos, y que se utilizan para funciones concretas
auxiliares dentro de un sistema digital.

Circuitos ASIC (Application Specific Integrated Circuits) o circuitos integrados de apli-


cación específica, donde se ubican los dispositivos programables estudiados.

Sistemas microprocesadores.
6.3 Resumen de los dispositivos programables 19

La figura 6.20 ubica los dispositivos programables dentro de los dispositivos lógicos.

Dispositivos
lógicos

Lógica Micro-
ASIC
discreta procesadores

Dispositivos Standard Full custom


Gate Arrays
programables cells ICs

sPLDs cPLDs FPGAs

Figura 6.20: Resumen de los dispositivos lógicos programables

Dentro de los circuitos ASIC tenemos dos tipos de dispositivos:

Dispositivos programables eléctricamente, constituidos por las sPLDs, cPLDs y FPGAs.

Dispositivos programables a nivel de máscaras, constituidos por las Gate Arrays, Stan-
dard cells y los circuitos integrados Full-Custom. Estos dispositivos aparecen en la figu-
ra 6.20 en orden creciente de programabilidad a nivel de máscaras, de modo que los
circuitos full-custom constituyen circuitos totalmente a medida.

La diferencia entre ambos tipos de dispositivos se centra en el llamado NRE ("Non Re-
curring Engineering") o ingeniería no recuperable. Se trata del coste fijo que suponen las
máscaras del proceso de fabricación. En el caso de dispositivos programables eléctricamente
el coste NRE es cero, ya que se trata de dispositivos estándar que pueden comprarse en el mer-
cado. Por contra, los dispositivos programables a nivel de máscaras tienen un NRE bastante
alto, ya que las máscaras son específicas de ese diseño y debe pagarlas el cliente. Se trata
pues de un coste fijo asociado a la propia fabricación. En cuanto al coste variable o coste por
unidad, resulta mucho más barato el dispositivo programado con máscaras, donde no es nece-
sario incluir elementos de programación y, en consecuencia, el área final de silicio es menor.
De todo lo anterior se deduce que el hecho de usar uno u otro tipo de dispositivos es un proble-
ma económico, que depende de la tirada final de integrados requerida. Para tiradas grandes,
el coste NRE de los dispositivos de programados con máscaras se reparte entre muchos inte-
grados, afectando de manera pequeña a cada uno de ellos, de modo que el coste por unidad
no se incrementa demasiado y son más rentables. Para tiradas bajas, el coste NRE, que no
existe en cPLDs, FPGAs ..., incrementa tanto el coste por unidad, que dejan de ser rentables.
El límite de la tirada se obtiene calculando el punto de apalancamiento o "breakeven point".
20 Dispositivos Programables de Alta Capacidad

Veamos un ejemplo. Supongamos que se desea realizar un diseño digital para el que tenemos
como alternativas realizarlo con un standard cells o con una FPGA.
El coste NRE de la opción standard cell es de 27.000$. A esto hay que sumarle el coste
de la ingeniería y las herramientas de desarrollo, que suman un total de 72.000$. Final-
mente, el coste por unidad es de 10$.
El coste NRE de la opción FPGA es cero. El coste de ingeniería y herramientas es más
pequeño que en la opción anterior, unos 23.000$. El coste por unidad es bastante más
caro, 75$ por cada integrado.
Si denominamos X al número de piezas fabricadas, el "brakeven point"se calcula de la sigu-
iente forma:

27,000$ N RE + 72,000$ Ing. + 10$ · X = 0$ N RE + 23,000$ Ing. + 75$ · X (6.4)

Resolviendo la ecuación (6.4) resulta X = 1.169 unidades. esto significa que, para tiradas
iguales o inferiores a esa cantidad es más rentable la opción de la FPGA. Para tiradas superi-
ores, resulta más rentable utilizar standard cells.
El problema que acabamos de resolver es puramente económico. Sin embargo, existen
otros factores que también hay que tener en cuenta al tomar la decisión y que, indirecta-
mente, también tienen incidencia en el aspecto económico. Estos son el riesgo y el llamado
time to market o tiempo que tarda nuestro diseño en comercializarse. Ambos factores se de-
cantan hacia el lado de los dispositivos programables eléctricamente. El riesgo es menor, pues
se pueden reprogramar. Un fallo en un dispositivo programado a nivel de máscaras puede
suponer que resulte inservible. Por este motivo, en los dispositivos programables a nivel de
máscaras de lleva a cabo una preserie antes de la tirada completa, para validar el diseño. Por
lo que respecta al time to market, también es bastante inferior en el caso de los dispositivos
programables estudiados, ya que los puede programar el propio usuario y no necesita de la
elaboración de máscaras que implican un mayor tiempo de fabricación. Un diseño como el del
ejemplo anterior puede tardar del orden de 11 semanas si se emplea una FPGA y unas 32
semanas con un circuito standard cell. El retraso en llegar al mercado puede suponer unas
pérdidas de beneficios cuantificables que alterarían el punto de apalancamiento calculado ha-
cia un valor mucho más alto.
Para evitar el problema del coste unitario alto de los dispositivos programables eléc-
tricamente, los fabricante ofrecen la posibilidad de migrar un diseño a lo que se llama un
dispositivo "hardwire". Son dispositivos exactamente iguales a las FPGAs o cPLDs, pero en
los que los elementos de programación se sustituyen por metalizaciones. Evidentemente, no
se pueden reprogramar. Pero se usa para migrar diseños ya probados en el correspondiente
dispositivo programable, sustituyendo sus conexiones ya definidas por metalizaciones, lo que
da lugar a un área mucho menor de silicio y reduce el coste por unidad, sin añadir ningún
coste de ingeniería adicional.

6.4. Sistemas de desarrollo


El sistema de desarrollo típico para dispositivos programables de alta capacidad se ilus-
tra en la figura 6.21. A continuación, detallamos cada uno de los módulos del diagrama ante-
rior:

Captura esquemática:
La introducción del diseño se puede efectuar desde una captura esquemática. La her-
ramienta de desarrollo CAD nos permite dibujar el circuito digital a partir de los símbo-
los de una librería suministrada por el fabricante en función del dispositivo final elegido
6.4 Sistemas de desarrollo 21

Captura HDL :
esquemática : - VHDL
- Viewlogic - Verilog
- Cadence - ABEL
- Orcad
- Mentor
Síntesis
Simulación
Simulación

Optimización

Fitting

Placement

Routing

Simulación
post-layout

Fichero de
configuración

Programación

Figura 6.21: Sistemas de desarrollo para dispositivos programables de alta capacidad

para implementar el diseño. Existen diferentes entornos, entre los que Viewlogic, Orcad,
Cadence o Mentor figuran entre los más conocidos.

Lenguajes de descripción hardware:


Para diseños complejos la captura esquemática resulta insuficiente, por lo que se em-
plean lenguajes de descripción hardware que permiten la descripción de un diseño digi-
tal con un mayor nivel de abstracción, relajando en gran medida la labor del diseñador.
VHDL y Verilog son, con diferencia, los dos lenguajes más populares.

Síntesis:
Es el proceso por el cual se transforma una descripción en alto nivel, mediante un
lenguaje HDL, a un conjunto de puertas lógicas, en base a una librería seleccionada.
El resultado es un archivo de netlist o archivo de conexiones. El proceso de síntesis se
dice que depende de la tecnología en el sentido de que se realiza sobre una librería
concreta de un fabricante determinado.

Simulación:
Este módulo establece el primer bucle iterativo de todo diseño digital, e interviene tanto
desde la captura esquemática como desde los lenguajes HDL. Se trata de comprobar
la funcionalidad del diseño introduciendo unos estímulos y comprobando que el compor-
tamiento resultado es el deseado. La herramienta de simulación es uno de los elementos
más importantes de un sistema de desarrollo y, quizás, donde más tiempo puede estar
trabajando el diseñador. Su facilidad en el manejo y sus prestaciones son fundamentales
a la hora de elegir un sistema de desarrollo. En el caso de la introducción de un diseño
a partir de un lenguaje HDL existen dos tipos de simulaciones que pueden realizarse:
22 Dispositivos Programables de Alta Capacidad

• Simulación del código HDL: se ha indicado con una línea punteada en la figura
6.21. Se trata de simular únicamente la funcionalidad o comportamiento descritos
en HDL. Es, pues, una simulación independiente de la tecnología, porque todavía
no se ha realizado la síntesis sobre una librería concreta.
• Simulación en puertas: es la simulación que se lleva a cabo tras el proceso de sín-
tesis. Por tanto, depende de la tecnología concreta con la que se está trabajando.

Evidentemente, la segunda simulación es más próxima a la realidad física. No obstante,


resulta de utilidad y puede ahorrar tiempo poder simular y depurar el comportamiento
del código sin lanzar el proceso de síntesis. En cualquier caso, las simulaciones estable-
cen un bucle iterativo que retorna a la entrada del diseño, bien desde captura esquemáti-
ca o desde HDL, hasta lograr la funcionalidad deseada.

Optimización:
Consiste en la optimización de las expresiones lógicas en función de los recursos disponibles
en el dispositivo final y de las restricciones introducidas por el usuario, como pueden ser
restricciones de tiempo o de área.

Fitting:
Consiste en tomar la lógica producida por los procesos de síntesis y optimización y par-
ticionarla, si es necesario, en estructuras que se acomoden lo mejor posible a los bloques
lógicos del dispositivo final de implementación. A veces se usa también el término "map-
ping"para referirse a esta tarea.

Placement y routing:
El proceso conocido como placement consiste en la colocación de los bloques resultado
del proceso de fitting en posiciones óptimas para su posterior cableado. El proceso de
routing es el cableado entre los bloques lógicos y de éstos con los bloques de entrada y
salida. Ambos procesos de placement y routing llevan a cabo complejos problemas de
optimización que además son fuertemente no lineales, ya que tanto para la colocación
como para él cableado existe un número finito de recursos disponibles. La resolución
de estos problemas de optimización utilizan técnicas que contienen una componente
probabilística, lo que puede dar lugar a que se llegue a soluciones diferentes lanzando
dos procesos de placement y routing sobre el mismo diseño.

Simulación post-layout:
La simulación post-layout se lleva a cabo no tanto para verificar la funcionalidad como
para comprobar que las restricciones en tiempo son las requeridas. Por eso se realiza
una vez que se tiene el diseño muy cercano a la realidad, tras el placement y routing.
En el caso de las FPGAs, no se puede tener unos parámetros de tiempo predecibles como
en las sPLDs o las cPLDs. Los tiempos de propagación de las señales dependen de su
cableado final. En este caso, es imprescindible la simulación post-layout para validar el
diseño.

Programación:
El resultado final de los procesos anteriores es llegar a un archivo de programación que
permita configurar al dispositivo programables con la circuitería lógica diseñada.

La mayor parte de los procesos del diagrama de la figura 6.21 tienen lugar de forma
automática y transparente al usuario. Tan sólo la entrada (esquemática o HDL) y las simula-
ciones son realizadas manualmente por el usuario.

También podría gustarte