Download arquitectura FPGA

Document related concepts
no text concepts found
Transcript
1.1. Tecnologías de diseño de circuitos integrados
Durante la década de los 80, varias compañías intentaron resolver el viejo
compromiso de complejidad versus estandarización. Por un lado se tenía la opción barata
del microprocesador, componente completamente estándar, y por otro lado los ASICS
denominados full-custom, es decir, circuitos integrados de aplicación específica diseñados
completamente a medida, óptimos pero muy caros. En estos, los ingenieros diseñaban
todas las máscaras presentes en el proceso de fabricación de los circuitos integrados.
También existía la posibilidad de realizar diseños denominados semi-custom, con las
tecnologías denominadas Gate Array y Standard Cells [3]. En la tecnología Gate Arrays se
estandarizan las etapas iniciales de fabricación, por lo que los clientes comparten una
estructura similar en forma de filas de transistores sin interconexión. La conexión se
realizaba a medida en las últimas fases del proceso de fabricación, diseñando a media una o
más capas de metalizaciones, finalizando así el diseño. La tecnología Standard Cells, en
cambio, no era un proceso premanufacturado, pero se dispone de células prediseñadas y
estandarizadas, como RAMs, ALUs, multiplicadores, etcétera, con lo que se optimiza en
densidad, velocidad y área respecto los Gate Arrays.
Una de las maneras de caracterizar las prestaciones de un diseño digital es evaluar
conjuntamente el área que ocupa, la velocidad máxima a la que puede operar y la potencia
que consume, lo que se denomina figura ATP (área-tiempo-potencia). Teniendo esto en
cuenta, los ASICs tienen mejores prestaciones que los componentes estándares tipo
microprocesador, además de ser más confidenciales y fiables. Por el contrario, los ASICs
son mucho más difíciles de depurar y tienen un coste fijo elevado, por lo que requieren un
volumen de fabricación muy elevado. Pero lo peor era, sin duda, la imposibilidad de
corregir errores, ya que una vez se enviaba el circuito a fabricar, era imposible hacer
modificaciones.
Los avances en la tecnología hacían que se pudieran elaborar sistemas cada vez más
complejos, lo que hace inevitable la aparición de errores. Además, la propia complejidad de
los sistemas hacía que su diseño supusiera cada vez un tiempo mayor. Por otra parte, la ley
de Moore hacía obsoleto cualquier producto en dos años, que se veía reflejado en una
presión adicional sobre los diseñadores.
1.2. Dispositivos lógicos programables
La crisis anteriormente citada hizo que algunos ingenieros buscaran ofrecer un
producto, o una metodología de diseño que combinara el notable ATP de los ASICs con
las ventajas centrales de los microprocesadores: bajo costo, alta estandarización, facilidad
de corrección de errores y reducción del tiempo de salida al mercado.
Varias compañías se lanzaron en los 80 a fabricar un ASIC reprogramable. La idea era
sencilla: en primer lugar, reemplazar la interconexión fija de los Gate Arrays y Standard Cells
por una serie de pistas metálicas conectables por transistores de paso controlados por un
conjunto de bits de control almacenados en una memoria interna.
Históricamente, los arreglos de lógica programable (PLA) fueron los primeros
dispositivos lógicos programables. Los PLA contenían compuertas AND y OR con una
estructura de dos niveles (figura 1.4), con conexiones programables por el usuario [4]. La
estructura de los PLA sufrió mejoras y su costo disminuyó con la introducción de
dispositivos lógicos de arreglo programable (PAL), en los que el array de puertas OR es fijo
(no programable) y los dispositivos de arreglos genéricos (GAL). Actualmente, tales
dispositivos se denominan de manera genérica como dispositivos de lógica programable y
se puede decir que son los MSI de la industria de la lógica programable.
Figura 1.4a. PLA 4x6x3, arrays de puertas AND y OR
programables. Figura 1.4b. PAL 4x6x3, array de puertas OR
fija
Estos dispositivos, antecesores de las FPGAs, ya se configuraban haciendo uso de un
lenguaje de descripción de hardware, en los que se profundizará más adelante. Sin embargo,
la configuración de los primeros circuitos se realizaba, inicialmente, mediante la
destrucción física de unos fusibles y sólo se podían programar una vez, con todas las
limitaciones que esto suponía. Con el paso del tiempo, la tecnología permitió el borrado o
desconfiguración del dispositivo mediante exposición a rayos UV o bien eléctricamente y,
por tanto, su reconfiguración.
Los dispositivos lógicos programables evolucionaron con la idea de proporcionar al
diseñador mayor flexibilidad y posibilidades de configuración, con lo que incorporaron
registros, realimentaciones a los arrays programables, buffers tri-estado, etcétera (figura 1.5).
Figura 1.5. Diagrama lógico de una PAL16R8
La siempre creciente capacidad de los circuitos integrados creó una oportunidad para
los fabricantes de diseñar PLDs más grandes para aplicaciones mayores de diseño digital.
Sin embargo, un dispositivo demasiado grande usando una estructura alambrada del estilo
de las figuras 1.4 y 1.5 sería demasiado lento y, desde el punto de vista del fabricante, no se
haría un uso efectivo en cuanto al costo del área del chip [5].
Como escalar esta estructura resultaba irrealizable, los fabricantes idearon un
dispositivo lógico programable complejo (CPLD) que consistía, básicamente, en una
colección de PLD individuales en un simple chip, en compañía de una estructura de
interconexión programable que permitía que los PLD fueran conectados entre sí en el chip
de la misma manera que un diseñador conectaría externamente PLDs individuales (figura
1.6).
Figura 1.6. Arquitectura genérica de un CPLD
Actualmente, las compañías Xilinx, Altera y Lattice fabrican CPLDs que difieren en
las PLDs internas (tanto el array de puertas AND como en las macroceldas de salida), en
los bloques de entrada y salida, y en la interconexión programable.
1.3. FPGAs
La invención del microprocesador retrasó al menos una década la aparición del
primer dispositivo FPGA. Siempre teniendo en mente las ventajas e inconvenientes de los
ASIC, Xilinx sacó al mercado un Gate Array programable por campo, es decir, la
sustitución de la interconexión fija de los Gate Arrays por una serie de pistas metálicas
conectables por transistores de paso controlados por un conjunto de bits de control
almacenados en una memoria interna. De hecho, la interconexión reconfigurable ya había
sido detallada en un artículo de 1967 [6]. Así, estos dispositivos surgen en 1985 con el
nombre de LCA (Logic Cell Array), aunque posteriormente se renombraron como FPGA
(Field Programmable Gate Array)
ƒ
Arquitectura general
Básicamente, en una FPGA la lógica se divide en un gran número de bloques lógicos
programables que son individualmente más pequeños que un PLD (figura 1.7). Se
encuentran distribuidos a través de todo el chip en un mar de interconexiones
programables y todo el arreglo se encuentro rodeado de bloques de E/S programables
(IOBs). Un bloque lógico programable (CLB o slice) de FPGA es menos eficiente que un
PLD típico, pero un chip FPGA contiene muchos más bloques lógicos que los PLD que
contiene un CPLD del mismo tamaño [5].
Celda lógica
Bloque de memoria
Multiplicador dedicado
Bloque de E/S
DCM
Buffer de reloj
Figura 1.7. Arquitectura general de una FPGA
•
Slices: En los slices se realiza la mayor parte de la funcionalidad de la FPGA y
suelen estar agrupados de 2 en 2 o de 4 en 4 formando bloques lógicos
configurables (CLBs). Dentro de este componente encontramos los módulos
LUT, registros y multiplexores programables en un número que depende de
familia de FPGA, pero la arquitectura básica común es la que se muestra en la
figura 1.8.
G4
G3
G2
G1
SR
LUT
D
G
CE
Q
H
Y
H1
F4
F3
F2
F1
YQ
SR
LUT
F
D
CE
=multiplexor programable
Q
XQ
X
Figura 1.8. Slice simplificado de una FPGA
Los elementos programables más importantes son los generadores
reprogramables de función lógica, realizadas por las denominadas LUT (Look-up
Table) o tablas de búsqueda, que son celdas de memoria SRAM y multiplexores
para seleccionar la salida (figura 1.9) [7].
Figura 1.9. LUT de 2 entradas, implementación de la
función (AB)’
Los generadores de función pueden diseñarse para cualquier número de
variables que se desee sin más que aumentar el tamaño de la memoria SRAM y la
ubicación de selectores que escojan un solo valor almacenado para cada
combinación de valores de las variables, de la manera que se muestra en la figura
1.10.
SRAM
X
X
X
SRAM
X
X
X
SRAM
X
X
X
X
X
X
X
f
X
X
b
2-LUT
a
X
f
X
X
X
X
X
X
X
c
b
a
f
X
X
X
3-LUT
X
X
d
c
b
a
4-LUT
Figura 1.10. LUTs de 2, 3 y 4 variables
Retraso promedio (ns)
Área normalizada
Sin embargo, el número de variables con que pueden diseñarse las LUTs no
es trivial. Si intentamos realizar una LUT con un número de entradas elevado, el
área que ocuparía sería relativamente grande, con lo que el número de slices dentro
de la FPGA se reduciría. Si, por el contrario, se opta por LUTs con pocas entradas,
cabrían muchos slices, pero la rutabilidad sería complicada, se necesitarían muchas
conexiones por lo que el retardo debido al cableado entre los slices sería importante.
Por lo que puede apreciarse en las figura 1.11, parece alcanzarse un compromiso
entre el área y la velocidad usando LUTs de 4 entradas [8].
Figura 1.11. Tamaño óptimo de las LUTs
Cualquier función lógica que se desee implementar con un número de
variables mayor se realiza usando varias LUTs, ya que dicha función siempre podrá
ponerse en función de varias funciones de 4 variables aplicando el conocido
teorema de Shannon las veces que sea necesario [9]:
F ( X 1 , X 2 , K X n ) = X 1 ⋅ F (1, X 2 , K X n ) + X 1 ⋅ F (0, X 2 , K X n )
En general, los slices contienen alguna lógica adicional aparte de las LUTs para
aumentar las prestaciones y la eficiencia de estos bloques, como biestables para
obtener salidas registradas o lógica para implementar eficientemente comparadores,
contadores o sumadores serie. Además, como las funciones lógicas se generan en
realidad a través de memorias SRAM, los propios slices se pueden configurar para
usarlos como bloques de memoria en lugar de lógica, es lo que se denomina
memoria distribuida para diferenciarla de bloques de memoria específicos que
pudiera haber en la FPGA. Los slices más próximos suelen agruparse siguiendo esta
filosofía en grupos denominados CLBs o bloques lógicos configurables.
•
IOBs: Los bloques de Entrada/Salida de las FPGAs cumplen la misma función
que las macroceldas de salida en otros dispositivos lógicos programables, pero con
más controles lógicos, entre los que se incluyen, configuraciones de entrada y salida
combinacionales o registradas, alta impedancia, elementos de retardo, controles
analógicos y otros.
•
Interconexión programable: Según se mostró en la figura 1.7, cada CLB en la
FPGA se encuentra incrustado en la estructura de interconexión, que se componen
en realidad de cables con conexiones programables para ellos. Inicialmente, se
disponía de unas interconexiones heterogéneas de propósito general, aunque en la
década pasada se evolucionó hacia una estructura de interconexión jerárquica, tal
como se muestra en la figura 1.12. Las líneas del grupo del reloj están optimizadas
para su uso como entradas de reloj a los CLB, proporcionando un retardo corto. El
conjunto de líneas simples se optimizan para conectividad flexible entre bloques
adyacentes, pero en mayor cantidad y sin la limitación unidireccional de las líneas
directas.
8
Simple
4
Doble
3
Larga
2
Conexión
directa
3
Larga
2
2
6
Larga
4
8
4
Doble Simple Reloj
Global
CLB
2
Conexión
Directa
Figura 1.12. Estructura de interconexión de una FPGA
XC4000 de Xilinx
Sería posible conectar dos CLBs no adyacentes usando líneas simples, pero
deberían pasar por un conmutador programable para cada salto, lo que agregaría
retardos adicionales. Las líneas de los grupos doble viajan pasados dos CLBs antes
de llegar a un conmutador, de modo que proporcionan retardos más cortos para
conexiones más largas. Para conexiones muy largas, se emplean los grupos largos,
que no pasan por ningún conmutador programable y recorren todo la FPGA en
vertical u horizontal.
•
Otros componentes dentro de una FPGA: Las FPGAs muchas veces se evalúan
en función de la flexibilidad de sus arquitecturas y la consistencia de los resultados
obtenidos de un ajuste después de que se han efectuado pequeños cambios de
diseño. De esta manera, los fabricantes proporcionan recursos extra en sus
arquitecturas para ayudar a asegurar resultados consistentes e implementar algunos
sistemas de manera muy eficiente.
Así, si las FPGAs más antiguas eran muy homogéneas, como las XC4000
[10], las que imperan hoy en día, familias como la Spartan-3 [11-12] o Virtex-4 [1314], representantes de la gama baja y la gama alta de las FPGA de Xilinx
respectivamente, disponen de diversos dispositivos embebidos dentro del
dispositivo, como memorias, multiplicadores, DCMs (administradores de reloj), e
incluso microprocesadores.
ƒ
La FPGA Spartan-3 XC3S200
En la tabla 1.1 se muestran las características principales del dispositivo que puede
extraerse de las especificaciones del fabricante. En este caso se dispone de 2 columnas de 6
multiplicadores integrados en el dispositivo. También se dispone de 12 bloques de 18Kbits
de RAM. En esta familia, los slices se agrupan de 4 en 4 formando los CLBs, teniendo un
array de 24x20 de estos bloques. Cada slice contiene 2 generadores de función (LUT) y 2
flip-flops, acorde con la figura 1.8.
Características de la Spartan-3 XC2S200
General
Recursos CLBs
Puertas equivalentes
50K
Filas
24
DCMs
4
Columnas
20
CLBs
480
Total
480
Pines E/S
173
Slices
1920
Multiplicadores
12
LUTs/Flip-Flops
3840
Módulos BRAM
RAM16/SRL16
1920
Columnas de RAM
2
Memoria distribuida 30K
Bloques de RAM por columna
6
Bloques de RAM
12
Memoria RAM disponible
216K
Tabla 1.1. Características principales de la Spartan-3
XC3S200
Cada LUT puede configurarse como una memoria de 16x1 bits o como un registro
de desplazamiento que puede ser de 16 bits como máximo. Configurados como memoria
distribuida, se puede almacenar hasta 30Kbits.
ƒ
La FPGA Virtex-4 XC4VSX35
Examinando los datos de la tabla 1.2 podemos observar que la Virtex-4 posee
mayores recursos que la Spartan-3. En el caso de este dispositivo los multiplicadores han
sido sustituidos por unos circuitos aritméticos más completos denominados DSP48s y
vienen en mayor cantidad. Nuevamente los slices se asocian cada 4 formando un CLB,
aunque estos difieren ligeramente de los que forman parte de la Spartan-3 y se dispone de
mayor cantidad de memoria, tanto en módulos específicos (también de 18Kbits) como en
memoria distribuida.
Características de la Virtex-4 XC4VSX35
General
Recursos CLBs
Celdas lógicas
DCMs
CLBs
Pines E/S
DSP48s
Módulos BRAM
Columnas de RAM
Bloques de RAM por columna
Bloques de RAM
Memoria RAM disponible
34560
8
3840
448
192
8
24
192
3456K
Filas
Columnas
Total
Slices
LUTs/Flip-Flops
RAM16/SRL16
Memoria distribuida
96
40
3840
15360
30720
15360
240K
Tabla 1.2. Características principales de la Virtex-4
XC4VSX35
ƒ
Circuitos aritméticos específicos en FPGA
Algunos de los componentes específicos que más éxito están teniendo dentro de las
FPGAs son aquellos pensados para resolver de manera eficiente cálculos matemáticos
complejos. Según qué FPGA analicemos podemos tener circuitos aritméticos distintos, ya
que estos se van mejorando según van apareciendo nuevas familias. Por ejemplo, la
Spartan-3, contiene unos módulos denominados MULT18x18 bastante sencillos. La Virtex4, en cambio, contiene un módulo más avanzado, el DSP48, con mayores prestaciones. La
familia más potente que tiene Xilinx en el mercado, la Virtex-5, dispone de bloques DSP48
mejorados, los denominados DSP48E.
•
Circuitos MULT18x18
Se trata de multiplicadores de números de 18 bits en complemento a dos. El
resultado tiene una precisión de 36 bits. A continuación, en la tabla 1.3 se muestra
en el número de estos circuitos en las FPGAs de la familia Spartan-3:
Spartan-3
Dispositivo Multiplicadores
XC3S50
4
XC3S200
12
XC3S400
16
XC3S1000
24
XC3S1500
32
XC3S2000
40
XC3S4000
96
XC3S8000
104
Tabla 1.3. Número de multiplicadores en diferentes
Spartan-3. En negrita aparece la FPGA disponible en el
laboratorio
•
Circuitos DSP48
Estos circuitos proporcionan un mayor nivel de integración de procesado de
señales que las anteriores FPGAs del fabricante. Se suele disponer de un buen
número de estos circuitos teniendo en mente un empleo mínimo de lógica genérica
adicional, lo que conlleva a un menor consumo, alto rendimiento en términos de
velocidad, y un uso eficiente de los recursos del dispositivo [15]. La figura 1.13
muestra dos circuitos DSP48. Estos módulos aparecen asociados en parejas pues
comparten el puerto C, además de líneas de interconexión dedicadas.
Figura 1.13. Aspecto de dos DSP48
El módulo fundamental de este circuito es el multiplicador 18x18 de números
en complemento a dos. Este multiplicador viene acompañado de un
sumador/restador/acumulador de 48 bits, el cual es necesario en multitud de
aplicaciones dentro del procesado digital de señal. El resto de componentes de la
figura proporcionan una enorme posibilidad de configuración del circuito, lo que se
revierte una gran versatilidad y alta velocidad de funcionamiento. De esta manera,
el DSP48 puede implementar funciones matemáticas básicas de manera sencilla y a
alta velocidad, como sumadores/restadores, acumuladores, varios tipos de
multiplicadores,
multiplicadores/acumuladores
(MAC),
multiplexores,
desplazadores, contadores, divisores y raíces cuadradas. Así, la asociación de varios
de estos circuitos se presenta como un recurso muy potente para la implementación
de funciones avanzadas de manera eficiente [16].
A continuación se muestra, en la tabla 1.4, los DSP48 que disponen las
distintas FPGAs de la familia Virtex-4.
Sub-Familia LX
Dispositivo DSP48
XC4LX15
32
XC4LX25
48
XC4LX40
64
XC4LX60
64
XC4LX80
80
XC4LX100
96
XC4LX160
96
XC4LX200
96
Virtex-4
Sub-Familia SX
Dispositivo DSP48
XC4VSX25
128
XC4VSX35
192
XC4VSX55
512
Sub-Familia FX
Dispositivo DSP48
XC4VFX12
32
XC4VFX20
32
XC4VFX40
48
XC4VFX60
128
XC4VFX100
160
XC4VFX140
192
Tabla 1.4. Número de DSP48s en diferentes Virtex-4. En
negrita aparece la FPGA disponible en el laboratorio
La familia Virtex-4 SX ofrece la más alta relación de DSP48s frente a slices, así
que ésta es la familia adecuada para realizar aplicaciones donde existe un alto
componente matemático.