La Optimización de Rutado en FPGAs con Algoritmos

Anuncio
La Optimización de Rutado en FPGAs con Algoritmos
Genéticos
Dr. Falcón-Urquiaga W 1, Dr. Altuna-Iraola J 2
1
Universidad de Pinar del Río, Pinar del Río, Cuba,
[email protected]
http://www.upr.edu.cu
2 Mondragón Unibertsitatea, Mondragón, España,
[email protected]
http://www.eps.muni.es
Resumen. Dentro de la evolución de las tecnologías de diseño de circuitos integrados,
los FPGAs juegan el papel fundamental para ser usados en los sistemas reconfigurables. La ubicación de los módulos de un diseño en la estructura de un FPGA garantizando una buena distribución de las rutas, es una de las etapas del flujo de diseño de
aplicaciones sobre esta tecnología, con gran influencia sobre los retardos, y como la
velocidad de transferencia de información es uno de los parámetros más importantes a
tener en cuenta en el desarrollo de sistemas electrónicos, la optimización de esta etapa
es de suma importancia. Algunos aspectos relacionados con la influencia de la ubicación y rutado en las demoras de procesamiento en los FPGAs, y con la optimización
de dicha ubicación y rutado mediante el uso de Algoritmos Genéticos, son presentados en este tutorial.
1 Introducción
En los últimos años, la tecnología de FPGAs (Field Programmable Gate Array) ha permitido disponer de dispositivos totalmente fabricados y verificados que se pueden personalizar
desde el exterior mediante diversas técnicas de programación. Por una parte, los FPGAs
posibilitan el diseño de aplicaciones con la misma flexibilidad en cuanto a programación
que los microprocesadores y con mayor flexibilidad en cuanto a la implementación de diseños en forma paralela se refiere. Por otra parte, en comparación con los ASICs Full Custom
o Semicustom, donde cualquier cambio en los requerimientos de la aplicación significa
cambio de tecnología, los dispositivos reconfigurables del tipo FPGA y las modernas metodologías de diseño basadas en HDL (Hardware Description Language), permiten los cambios con gran flexibilidad y sin necesidad de sustitución del hardware. Los FPGAs son el
hardware ideal para aquellas aplicaciones en las que continuamente puede haber un cambio
en el diseño [1], [2], [3]. El uso de los FPGAs también tiene ventajas económicas en comparación con los ASICs, cuando se trata de productos a pequeña escala como es el caso de
los prototipos.
En primer lugar, el grado de integración que han logrado alcanzar los FPGAs gracias al
desarrollo de la microelectrónica (tecnologías de fabricación, en el año 1998, en el orden de
los 0.22 µm y 1 millón de puertas de sistema por chip y ya hoy se cuenta con tecnologías en
el orden de los 0.09 µm y hasta 10 millones de puertas de sistema [4]). En segundo lugar,
por las ventajas propias de generar diseños muy complejos para estas tecnologías a través
de un lenguaje de descripción de hardware, independientemente del fabricante, con posibilidad de reutilización de los códigos, eliminando el coste de fabricación y disminuyendo
los tiempos de diseño [5], [6], [7]. Y por último, y en tercer lugar, por las posibilidades de
reprogramación de estos dispositivos y de admitir diseños con paralelismo incluido [8],
[9], [10], es que los FPGAs se han convertido en el manjar más codiciado para los diseñadores y fabricantes de aplicaciones electrónicas.
El diseño de aplicaciones sobre FPGAs se divide por etapas, como se representa en la Fig. 1
y en su conjunto son llamadas flujo de diseño. Dentro de las etapas del flujo de diseño sobre
FPGAs, la ubicación y rutado tiene como objetivo lograr una adecuada disposición de los
módulos en la estructura del FPGA, garantizando la mejor distribución de rutas, para lograr
disminuir las demoras y el consumo. La mayor parte de las demoras y del consumo de un
circuito implementado sobre un FPGA, son debidas al rutado [11], [12], [13], [14], por tal
motivo la optimización de la etapa de ubicación y rutado adquiere gran importancia.
El problema fundamental que se trata en este tutorial, precisamente es la optimización de la
etapa de ubicación y rutado dentro del flujo de diseño de aplicaciones sobre FPGAs. Debido a que el problema de la ubicación y rutado está dentro del grupo de problemas NP completos (Non-deterministic Polynomial-time), afirmación que ha sido argumentada en [15] y
que se repite en [16], [17], [18] y [19], se a centrado la atención en los algoritmos heurísticos de tiempo polinomial, que "resuelven" un problema, en un sentido razonable, para el
que no se conoce ningún algoritmo determinístico en tiempo polinomial que pueda darle
solución.
D is e ñ o d e E n tr a d a
S ín te s is
Im p le m e n ta c ió n
T ra d u c c ió n
M apeo
P la c e & R o u te
F ic h e ro d e C o n fig u ra c ió n
P ro g r a m a c ió n d e l F P G A
Fig. 1. Flujo de diseño para aplicaciones sobre FPGAs
Dentro del grupo de los algoritmos heurísticos, con posibilidades de tratar el problema de la
ubicación y rutado, se han elegido a los Algoritmos Genéticos (GAs-Genetics Algorithms) y
se han diseñados dos de estos algoritmos para optimizar la ubicación de los módulos resultantes del mapeo en los diseños de aplicaciones sobre FPGAs. Uno de ellos actúa sobre la
asignación de los pines de entrada-salida, y el otro actúa sobre la ubicación de los módulos
resultantes del mapeo en la estructura del FPGA, influyendo ambos en las demoras máximas
del diseño y en el promedio de todas las demoras. Los dos GAs permiten aumentar las velocidades de transferencia de datos para diseños sobre FPGAs, en comparación con los resultados de las herramientas de desarrollo actuales.
2 Flujo de Diseño para FPGAs
En cada una de las etapas del flujo de diseño sobre un FPGA se influye en mayor o menor
medida en la velocidad de respuesta, en el área que ocupa el diseño y en el consumo. A
continuación se describirá el flujo de diseño para aplicaciones sobre FPGAs (Fig. 1), resaltando los objetivos de cada fase. Para el trabajo se ha tomando como base las tecnologías de
diseño de Xilinx y la herramienta de desarrollo de este fabricante, ISE versión 5.1.03i.
La estructura básica de un FPGA de Xilinx está compuesta esencialmente por bloques lógicos configurables (CLBs-Configurable Logic Block), por matrices de interconexión programables (PSMs-Programmable Switch Matrix) y por bloques de entrada-salida programables
(IOBs-Input-Output Block). Los CLBs posibilitan la implementación de las funciones lógicas que define el usuario, las PSMs soportan conexiones flexibles entre los propios CLBs
así como entre IOBs y CLBs, y los IOBs proporcionan conexiones flexibles con otros circuitos dentro del sistema en que se encuentre el FPGA [10], [15], [20].
En el año 1985, el fabricante Xilinx, introduce el primer FPGA en el mercado, y actualmente su tecnología es de las más establecidas. Sus arquitecturas están basadas en tablas de
búsquedas (LUTs-Look Up Tables) de k entradas, implementadas en bloques de memoria
SRAM (Static Random Access Memory) de 2k bits.
2.1 Diseño de Entrada
La primera tarea dentro del flujo de diseño electrónico sobre FPGAs, después de concebir
la idea, es realizar una descripción de lo que se pretende hacer, ya sea mediante esquemáticos o mediante el uso de lenguajes de descripción de hardware.
La captura de esquemas, fue la metodología de diseño utilizada cuando las densidades de
integración de los FPGAs estaban en el orden de los cientos de puertas. Resulta un desafío
para el pensamiento humano, hacer diseños que permitan utilizar toda el área de un FPGA
actual mediante esta metodología. Es por este motivo que las metodologías de diseño actual
tienden al uso de los lenguajes de descripción de hardware (VHDL, VERILOG, ABEL,
ORCAD PLD, PALASM, CUPL, AMAZE, entre otros), que permiten aumentar la productividad de los diseños al hacer las descripciones desde niveles de abstracción superiores al
usado en los esquemáticos.
Para cualquier tecnología de FPGA que se use, e independientemente de las herramientas de
desarrollo que se utilicen para el proceso de diseño e implementación, una misma descripción del problema será válida como diseño de entrada, siempre que la capacidad del hardware lo permita.
2.2 Síntesis
Durante el proceso de síntesis, se hace una traducción del diseño de entrada a nivel de puertas lógicas (formato netlist) [8], [15]. Actualmente existen cuatro herramientas de síntesis
que se pueden integrar en el flujo del diseño: XST (Xilinx Synthesis Technology) de la compañía Xilinx, Inc. y que se adquiere de forma gratuita unido a la herramienta de diseño lógico ISE Foundation, la herramienta FPGA Express de Synopsis, Inc., Leonardo Spectrum de
Exemplar Logic, Inc. y el Synplify de Synplicity, Inc. [4].
Una vez hecha la síntesis se puede hacer una simulación funcional del sistema, para verificar el diseño. Los resultados de esta simulación no tienen en cuenta, las demoras que se
generan en la ubicación y en el rutado del circuito lógico sobre el FPGA.
2.3 Implementación
La implementación es una fase del flujo de diseño que está constituida por varias etapas.
Dentro de sus principales objetivos se encuentran, lograr una adecuada partición del circuito
para minimizar el número de LUTs a utilizar, y hacer una adecuada ubicación de los bloques resultantes del proceso de partición en la estructura del FPGA, garantizando un buen
rutado entre ellos. De los resultados del proceso de implementación fundamentalmente,
dependerán el área que ocupe el diseño en la estructura del FPGA, el consumo de potencia,
y la velocidad máxima de trabajo.
La primera etapa de la implementación es la traducción. En esta etapa se combinan los
ficheros resultantes de la síntesis, y unido con las restricciones que se le pueden hacer al
diseño, se produce un fichero que describe el circuito a implementar en términos de las
primitivas de diseño de Xilinx [10].
La segunda etapa es el mapeo, donde se recibe como entrada al fichero resultante de la
traducción. En esta etapa, se agrupan convenientemente los elementos básicos en bloques
lógicos, que se corresponden con la estructura del FPGA que se tenga. El objetivo de las
herramientas de mapeo es encontrar la mejor asignación lógica de los CLBs, entiéndase por
ello, reducción del número de LUTs utilizadas debido a una adecuada partición del circuito,
lo cual contribuye a minimizar el área utilizada en el chip, a mejorar la rutabilidad del diseño, y otros factores como pueden ser las demoras y el consumo [21].
El proceso de mapeo consiste en dividir un circuito en partes pequeñas, de forma tal que
cada una de ellas se ajuste al componente básico de un FPGA [15]. Las herramientas actuales de implementación no garantizan que se haya hecho el mejor mapeo debido a la naturaleza NP de éste problema [23]. Por tal motivo se han dedicado muchos esfuerzos en aras de
obtener resultados superiores en esta etapa del flujo de diseño, encontrando trabajos, por
sólo mencionar algunos, como los presentados en [24], [25], [26], [27].
La tercera etapa dentro del proceso de implementación es la fase de ubicación y rutado,
que se encarga de ubicar los componentes o módulos que se obtienen del mapeo en los
CLBs físicos, así como de decidir los IOBs que se utilizarán, y se encarga también de hacer
el rutado entre los CLBs seleccionados y entre los IOBs y CLBs [15]. Una vez hecha la
ubicación y el rutado, se puede hacer una simulación temporal del sistema, y en este caso, sí
se proporciona información de las demoras que se generan en la ubicación y en el rutado del
circuito lógico sobre el FPGA.
2.4 Configuración
La última etapa del flujo de diseño se denomina configuración. En ella se recibe como
entrada el fichero que proporciona la etapa de ubicación y rutado, y se genera el fichero de
configuración con el que será programada el FPGA. El fichero generado, también llamado
de programación, puede ser codificado en diferentes formatos, y contiene toda la información sobre la configuración del FPGA para que se genere en ella el hardware correspondiente que responde a la aplicación implementada.
3 Ubicación y Rutado en FPGAs
La mayor parte de las demoras y del consumo de un circuito implementado sobre un FPGA,
son debidas al rutado y no a las demoras que se generan en los CLBs e IOBs [11], [12],
[13], [14]. Muchos investigadores han planteado y demostrado, que una fracción significativa de los retardos de un circuito, provocados por las rutas de interconexión, se relaciona
con el número de puntos de interconexión programables (PIP-Programmable Interconnect
Points) a través de los cuales pasa una señal [28], [29], [30], [14].
La estructura lógica de los FPGAs de Xilinx proporciona varias conexiones de rutado local
[22], como son: trayectorias dedicadas para la conexión directa entre las LUTs de un mismo
CLB que generan un mínimo de demora de rutado; rayectorias de interconexión entre LUTs,
registros y las PSMs; y trayectorias directas, que proporcionan conexiones de alta velocidad
entre CLBs adyacentes, eliminando los retardos de las PSMs. Estas conexiones de rutado
local, son recursos de interconexión dedicados que generan demoras mínimas. Otro recurso
dedicado que genera demoras mínimas, aunque no se considera un recurso de rutado local,
lo constituyen las líneas de distribución de relojes dedicadas, que garantizan el sincronismo
de la señal de reloj entre todos los puntos del FPGA.
Por otra parte, se encuentran las rutas de interconexión general que dominan todo el chip
de forma horizontal y vertical, y que se unen a través de las PSMs; así como, los recursos de
rutado que permiten la unión entre los CLBs y los IOBs, también utilizando conexiones a
través de PSMs.
Las PSMs no son más que una colección de transistores NMOS (Negative channel Metal
Oxide Semiconductor), o de buffer tercer estado, que conectados adecuadamente se encargan de habilitar la unión entre dos líneas de conexión. Estas PSMs están constituidas por
PIPs, que son grupos de seis transistores que posibilitan la conexión entre dos líneas [31],
[32]. La distribución de los seis transistores en un PIP, se representa en la Fig. 2. La conexión o no, de una línea con otra, se hace mediante la habilitación o no, de los transistores,
y el control sobre ellos se produce mediante la programación de memorias SRAM que actú-
an sobre su base, que es el terminal libre que se observa en la figura. Los PIPs, además de
encontrarse en las PSMs, se pueden encontrar en la unión entre las trayectorias locales y
globales del FPGA. Las trayectorias que usan las PSMs, son las que generan mayores demoras, y como consecuencia, limitan la velocidad del diseño [22].
FPGA
IOB
CLB
PSM
PIP
PSM
Fig. 2. Matrices de interconexión en la estructura de un FPGA de Xilinx
Al hacer la ubicación de los módulos resultantes del mapeo, en la estructura del FPGA, se
generan rutas de interconexión, que pueden ser mayores o menores, en dependencia de la
ubicación que se les de a los módulos. El principal objetivo de los algoritmos de ubicación
es disminuir esos tamaños de las rutas de interconexión, para disminuir el número de PIPs y
con ello los retardos. La ubicación y rutado es una etapa dentro del proceso de implementación que no se considera óptima porque las herramientas actuales no lo garantizan, dada la
naturaleza de éste problema. Por este motivo y por la influencia de esta etapa en los retardos
y el consumo, es que los trabajos que se hagan para mejorarla siempre serán importantes.
En la rapidez de respuesta de un FPGA, influye de forma general: el área ocupada por la
aplicación (número de CLBs, IOBs, rutas y los PIPs utilizados), la ubicación que se le dé a
los módulos de la aplicación dentro del FPGA y las interconexiones entre módulos.
Una de las etapas del flujo de diseño, que posibilita la disminución de los retardos, es la
etapa de mapeo, aunque su influencia fundamental está dirigida a la reducción de área. Otra
etapa del flujo de diseño, que influye considerablemente sobre los retardos es la etapa de
ubicación y rutado. Como el principal objetivo de esta etapa es garantizar la mejor distribución de las rutas de interconexión reduciendo sus distancias, se puede plantear que la velocidad sería el parámetro más favorecido para una adecuada ubicación y rutado. Dentro de
los algoritmos de ubicación y rutado para FPGAs que mejores resultados han presentado en
cuanto a densidad de rutado y a demoras de interconexión se encuentran: VPR [33], SEGA
[34], TRACER-FPGA-PR [35] y el algoritmo de rutado de Eum et al. [36].
Aunque se han desarrollado trabajos en este sentido, la creación de métodos de optimización para esta fase del flujo de diseño es muy importante, máxime, si se trata de aplicaciones que necesitan de altas velocidades de procesamiento para garantizar sus requerimientos.
4 Algoritmos de Optimización para el problema de la Ubicación en
FPGAs
La solución a los problemas de alto nivel de complejidad computacional, como es el caso
de los problemas NP completos, ha sido un desafío constante a los investigadores de diversas áreas. El problema que se trata en este tutorial es la optimización de la etapa de ubicación, dentro del flujo de diseño de un FPGA, y como se comentó en los apartados anteriores, este problema es NP completo. Es por ello que se centrará nuestra atención en los algoritmos probabilísticos de tiempo polinomial.
Durante los últimos años han aparecido una serie de métodos, generalmente usados para
abordar problemas NP completos, denominados heurísticos, cuya finalidad es la de encontrar buenas soluciones a problemas de optimización complejos, aunque no garantizan que la
solución sea óptima. Entre ellos se encuentran: el enfriamiento simulado (SA-Simulated
Annealing), la búsqueda tabú (TS-Tabu Search), las redes neuronales artificiales (RNAArtificial Neural Networks) y los algoritmos evolutivos (EA-Evolutionary Algorithms).
Dentro de los EAs se encuentran básicamente tres técnicas: la programación evolutiva (EPEvolutionay Programming), las estrategias evolutivas (ES-Evolution Strategies), y los algoritmos genéticos (GAs-Genetic Algorithms) [37], [38]. Existen más técnicas comprendidas
dentro de los EAs, pero casi todas las demás se derivan de las mencionadas anteriormente.
Cualquier problema de optimización que pueda tratarse como un problema de búsqueda del
resultado óptimo dentro de un conjunto acotado de soluciones, aunque el tamaño sea considerablemente grande, para el cual se pueda obtener una función que en la búsqueda penalice
a las malas soluciones y premie a las buenas, podrá ser tratado favorablemente con los EAs.
Una ventaja importante que presentan las heurísticas frente a las técnicas que buscan soluciones exactas es que, por lo general, permiten una mayor flexibilidad para el manejo de las
características del problema. No suele ser complejo utilizar algoritmos heurísticos que en
lugar de funciones lineales utilicen no linealidades. Habitualmente las heurísticas proponen
un conjunto de soluciones, ampliando de esta forma las posibilidades de elección del que
decide, especialmente cuando existen factores no cuantificables que no han podido ser reflejados en el modelo pero deben ser tenidos en cuenta. En resumen, podría decirse que el uso
de estas técnicas supone la posibilidad de resolver, de forma práctica, problemas de gran
complejidad que resultan intratables mediante técnicas exactas.
Las diferencias entre las tres técnicas fundamentales de la computación evolutiva se centran
en los operadores que se usan en cada caso, y por lo general, en la forma de implementar
estos operadores (selección, cruce y mutación). En este trabajo se ha decidido el uso de los
GAs para mejorar la ubicación en el diseño sobre FPGAs.
4.1 Algoritmos Genéticos
La computación evolutiva de modo general, y especialmente los GAs, se han convertido en
los últimos veinte años, en uno de los focos de mayor interés para investigadores de diversas ramas de la computación y la ingeniería.
Los GAs, desarrollados por Holland, se fundamentan en la integración e implementación
eficiente de dos ideas fundamentales: las representaciones como cadenas binarias de las
soluciones del problema y la realización de transformaciones simples para modificar y mejorar estas representaciones. Durante el procesamiento del algoritmo se mantiene una población que representa un conjunto de posibles soluciones, la cual es sometida a ciertas
transformaciones aleatorias (mutación y entrecruzamiento) con las que se trata de obtener
nuevos candidatos, y en un proceso de selección pueden ser favorecidos los mejores.
Los GAs propuestos y extendidos por Holland en sus trabajos de 1962 a 1975, fueron retomados por Goldberg [39] en 1989 y popularizados con el nombre de Algoritmos Genéticos
Simples (SGA: Simple Genetic Algorithm). Los SGA se basan en un principio básico de la
evolución natural: los mejores individuos tienen mayor probabilidad de reproducirse y sobrevivir que otros individuos menos adaptados al entorno [39], [40]. La estructura del GA
que implementa este principio se ha representado en la Fig. 3 en forma de pseudo código.
t:=0; //Primera generación
Generar Población Inicial P(t); //Crear de forma aleatoria población inicial
Evaluar P(t); //Evaluar con la función de coste a cada individuo de la población
while no se cumpla la condición de terminación do // Criterio de terminación
Seleccionar Progenitores de P(t); //Seleccionar progenitores de la población
Entrecruzamiento de los Progenitores; //Entrecruzar genes de los progenitores
Mutar a los Descendientes; //Perturbaciones estocásticas de los descendientes
Evaluar Descendientes; //Evaluar los descendientes y obtener sus pesos
P(t+1):=Sobrevivientes; //Insertar en la población los descendientes
t:=t+1;
end;
Fig. 3. Pseudo código de un algoritmo genético
4.2 Razones para el uso de los Algoritmos Genéticos y sus Ventajas
La naturaleza (NP completo) del problema de la ubicación y rutado en FPGAs, es la primera
razón para incluir a los GAs dentro del grupo de los métodos de optimización con posibilidades de utilización en la solución a este problema. De modo general, los algoritmos heurísticos son los más recomendados en la búsqueda de soluciones a problemas en los que, de
entrada, se declina la posibilidad de encontrar la solución óptima debido a la cantidad ingente de candidatos [37], [38].
Cuando el espacio de búsqueda es muy grande, para encontrar una buena solución al problema en un tiempo aceptable, es recomendable explorar varias posibilidades de solución de
forma simultánea (proceso con paralelismo). Existen dos formas de lograr este paralelismo,
y una es con el uso de varios procesadores que hagan cómputo a la vez, mientras que la otra
sería con una adecuada técnica de búsqueda. Los GAs, intentan modelar el proceso de la
evolución natural, y para ello hacen la búsqueda en paralelo de un “buen” individuo (una
buena ubicación en la estructura del FPGA) dentro de una población (conjunto de posibili-
dades de ubicación) cambiante. Los GAs, operan de forma simultánea con varias soluciones,
en lugar de trabajar de forma secuencial como las técnicas tradicionales.
Los GAs, desde su surgimiento, fueron desarrollados para resolver problemas de optimización combinatoria, pero de tipo discretos, o sea que el espacio de búsqueda en estos problemas debe de estar delimitado dentro de un cierto rango conocido. El problema de la
ubicación en FPGAs, se produce fundamentalmente porque el espacio de búsqueda es muy
grande, pero precisamente es discreto, porque el número total de posibilidades de solución
es conocido (ver ecuación (3)).
El problema de la ubicación en un FPGA puede ser codificado fácilmente, y la codificación
podría generalizarse en una matriz. Por otra parte, como el aspecto más interesante en la
ubicación, es disminuir las distancias de interconexión y con ello los PIPs, la función de
coste para este problema podría ser una función que calculase la distancia entre dos puntos
en una matriz, y de modo general las operaciones que habría que hacer serían sólo sumas y
restas, con almacenamiento de valores. Tanto el trabajo con matrices, y las operaciones que
se han mencionado, son muy fáciles de tratar en ordenadores, y como los GAs se prestan
para dar solución a problemas donde las soluciones se puedan codificar fácilmente de forma
que resulte fácil la implementación en un ordenador, y donde se pueda definir una función
de aptitud que indique la bondad de una respuesta [41], se mantiene la idea de que los GAs
pueden dar buenos resultados en la solución al problema en cuestión.
Los algoritmos genéticos son el paradigma con mayor base teórica dentro de la computación evolutiva. Además, dicha base teórica es sencilla en su desarrollo y con grandes posibilidades de ampliación [39], [40], [42], [43], [44]. Es importante señalar además, que el
número de aplicaciones en las que se han usado los algoritmos genéticos en los últimos
años, dando resultados satisfactorios, es bastante amplio lo que brinda confianza en su uso
[39], [45], [46] y [47].
Los algoritmos evolutivos, no son un juego de técnicas que están listas para ser aplicadas a
cualquier problema de optimización, sino que son un juego de técnicas que tienen que ser
modificadas y entalladas a mano para cada problema de optimización en cuestión [38], de
aquí el hecho del diseño del GA para el problema planteado en este tutorial.
4.2.1 Formulación del Problema
Con el uso de los GAs se quiere mejorar la ubicación para diseños de aplicaciones sobre
FGPAs, con el objetivo de disminuir retardos de propagación. Con una adecuada ubicación
del diseño en un FPGA, se pueden disminuir las distancias de las rutas de interconexión y
esto repercute de forma directa en los retardos y el consumo.
El problema de la ubicación se puede reducir a colocar a elementos en b posiciones posibles. Los a elementos representan el número total de módulos resultantes del mapeo de una
aplicación para un FPGA determinada, y será la suma del número de LUTs (al), del número
de registros (ar) y del número de módulos suma (as) (ecuación (1)), que se usarán por la
aplicación, del total b de la estructura del FPGA. Consideraremos que se usará como FPGA
una Virtex de Xilinx [4], que dispone por cada CLB de cuatro LUTs, cuatro registros tipo D,
y de cuatro elementos de multiplexado que serán dedicados para la propagación de acarreos
y a los que informalmente les llamaremos módulos suma. Definiendo al número de CLBs
totales de un FPGA como NCLB, entonces el valor de b para la Virtex de Xilinx se calcularía
a través de la ecuación (2).
(1)
(2)
a = al + ar + as .
b = 12 * NCLB .
Para un problema como éste, el número de posibilidades de ubicación diferentes en el
FPGA es igual a Cb,a y se calcula con la expresión que representa el número total de variaciones sin repetición (3).
(3)
Cb,a = b!/(b-a)! .
En un ejemplo donde a = 3 y se use un FPGA con NCLB = 1536 (b = 18432), el total de
posibilidades de ubicación que habrá, en base a la ecuación (3) será de 6.26x1012. Mientras
más módulos se estén usando del FPGA mayor número de posibilidades hay, y este problema puede llegar a ser tan complejo como tener todo el FPGA ocupada que sería lo mismo
que buscar una posibilidad de solución de ubicación de entre 18432!, para este ejemplo.
Un FPGA se puede representar como una matriz con m filas y n columnas, donde la intersección entre filas y columnas pueden representar un módulo (LUT, registro o módulo suma). Los a elementos están entrelazados entre si, y si se conoce la ubicación de estos elementos en la matriz (estructura del FPGA) y las rutas de conexión entre ellos, se podría
calcular las distancias de las rutas de interconexión. Teniendo en cuenta esta explicación, se
podría formular una función de coste que evalué la bondad de una ubicación para una aplicación en un FPGA, en base a la suma total de las distancias de rutas. Para mejorar la ubicación habría que minimizar la función que calcule las distancias entre las rutas de los a
módulos. Esta función se expresa a través de la ecuación (4), donde Dcr representa la suma
total de las distancias de las k rutas del diseño, FLUTa es la fila del módulo origen y FLUTb la
del módulo destino, y CLUTa es la columna del módulo origen y CLUTb la del módulo destino.
k
Dcr =
∑(F
LUTa
− FLUTb + C LUTa − C LUTb
).
(4)
i =1
La búsqueda de ubicaciones óptimas a diseños sobre FPGAs es el problema que se ha planteado optimizar mediante el uso de algoritmos genéticos. Para ello se ha partido del conocimiento del flujo de diseño estándar, y con apoyo en los resultados de las herramientas de
desarrollo de Xilinx, se ha mejorado la etapa de ubicación.
Los SGAs parten del criterio de que la población se genera de forma aleatoria, pero en este
caso se ha hecho una pequeña modificación y es que el primer individuo de la población en
los dos GAs diseñados, no se crea de forma aleatoria, sino que se extrae de los resultados de
la implementación que se ha hecho siguiendo las etapas del flujo de diseño estándar de
Xilinx. El resto de la población si se genera de forma aleatoria.
Una vez finalizada la fase de ubicación y rutado, se genera el fichero NCD (Native Circuit
Description), que contiene toda la información de rutado y de utilización de los recursos en
el FPGA. Se propone hacer uso de este fichero NCD resultante de la ubicación y rutado, y
mediante el uso de GAs mejorar la ubicación del diseño.
En la Fig. 4 se muestra el nuevo flujo de diseño que se propone. Haciendo uso de la herramienta Floorplanner de Xilinx, se convierte el fichero NCD que está en formato binario a
formato texto, y se obtiene el fichero FNF (Floorplanner Netlist File). A partir de aquí, y
haciendo uso de un algoritmo programado en Perl, se genera un nuevo fichero texto (cromosoma.txt) que tendrá codificada la utilización de los recursos del FPGA, información que
será utilizada por el GA para producir nuevos resultados de ubicación que minimicen las
distancias de las líneas de interconexión. Con estos resultados se modifica el fichero original FNF, que sería interpretado por las herramientas de implementación de Xilinx como una
edición manual de la ubicación y rutado haciendo uso del FloorPlanner, y se genera nuevamente el fichero NCD haciendo uso de las herramientas de ubicación y rutado de Xilinx,
dándole continuación a su flujo de diseño estándar.
Los análisis que se hacen a continuación y los resultados que se presentan son en base al
FPGA XCV300pq240 de Xilinx (aunque el trabajo es extensible a cualquier FPGA). Este
dispositivo cuenta con 166 pines de entrada-salida (de los 240 que dispone), y el número de
CLB totales que tiene es de 6144. Los resultados que se muestran por las herramientas de
Xilinx han sido obtenidos con un máximo de esfuerzo en el proceso de ubicación y rutado y
con el parámetro de máxima velocidad (-6).
D is eñ o d e E n tra d a
S ín te sis
Im ple m en tación
T radu cción
M ap eo
P la ce & R oute
F lo o rP lan n e r (N C D a F N F )
F N F a C ro m o s o m a.txt
O p tim iza C o lo ca ció n
N ue va E ta pa
G e n era N u e vo F N F
P lace & R o u te
F ich ero de C o nfigu ra ció n
Prog ra m ación del F P G A
Fig. 4. Variación del flujo de diseño de Xilinx
4.2.2 SGA para la mejora de la ubicación de pines en diseños sobre FPGAs
Se ha implementado un algoritmo genético simple para optimizar la distribución y asignación de pines para una aplicación sobre un FPGA, que disminuye las demoras de conexión
en el diseño y contribuye al aumento de la velocidad de transferencia de datos.
El problema de la ubicación de pines se reduce a buscar la mejor asignación y distribución
de los pines de entrada salida que use una aplicación (Np), del total disponible del FPGA
(Npt). Para el XCV300pq240 Npt = 166, y el número total de soluciones se puede buscar
aplicando la ecuación (3) siendo b = Npt y a = Np, por lo tanto, el peor caso pudiera significar un total de 166! soluciones diferentes de ubicación de los pines (un poco más de
9x10297), que sería si cada pin de entrada salida está siendo usado en la aplicación. A continuación se describirán los operadores del SGA diseñado (selección, cruce y mutación), así
como la codificación escogida. Finalmente se mostrarán los resultados de la aplicación del
algoritmo en la optimización de aplicaciones.
4.2.2.1 Algoritmo Genético Diseñado
En el diseño de este algoritmo genético se decidió una codificación binaria donde cada
cromosoma es un array de tres dimensiones (Fig. 5). Cada elemento del array representa
una posibilidad de conexión de un pin a un CLB. Dos dimensiones del array son usadas
para definir cada CLB (CLBx,y), y la otra dimensión sería un vector de 166 elementos (E =
(e1,e2, ..., e166)), donde cada elemento ei representa a uno de los posibles pines de entrada
salida. Se ha tomado como consenso que si ei = 1 entonces se estará usando por el CLBx,y el
pin i y si ei = 0 entonces el pin i no se estará usando. Para el FPGA del ejemplo se tienen
32x48 CLBs pero la codificación se hace con una matriz de 34x50 porque se incluyen dos
filas y dos columnas para designar como un punto en el espacio a los pines también. La
tercera dimensión para los elementos de la matriz de 34x50 que representan pines, siempre
será un vector con todos sus elementos en cero (de un pin no hay conexión a otro pin).
Pines
FPGA XCV300 PQ240
CLB
2
32x48x 1
0
0
1
31
.
.
.
1
32
2
47
48
0
1
0
1
1
2
3
4
163
164
165
166
Fig. 5. Representación de la estructura de cada cromosoma
Como se comentó anteriormente, el primer individuo de la población no se crea de forma
aleatoria. Este individuo será la solución que han generado las diferentes etapas del flujo de
diseño estándar de Xilinx. Para codificar esta solución al formato de un cromosoma, es
necesario tener como entradas un fichero con la información de la posición física de los
pines de entrada salida (pines.txt) y otro con la información de todas las conexiones entre
pines y CLBs para el diseño. Este segundo fichero se obtiene por el procedimiento descrito
en el apartado 4.2.1 y se llamó cromosoma.txt. Una vez se tenga esta información se codifica a la estructura en forma de array binario de tres dimensiones explicada anteriormente.
La generación del resto de los individuos de la población se hace de forma aleatoria, pero
respetando que cada uno de ellos sea solución de la aplicación que se haya diseñado. De
forma empírica se ha escogido el tamaño de la población en 100, tratando de llegar a un
compromiso entre el riesgo de no cubrir adecuadamente el espacio de búsqueda con una
población pequeña, y el del excesivo coste computacional debido a una población grande.
Una vez generada la población se computa la función de coste de cada individuo. Para
minimizar las demoras del rutado, lo que se trata es de lograr que las distancias de los pines
a los CLB sean mínimas. Como que en este diseño sólo se tienen en cuenta las rutas que
unen a pines con CLBs, el término k de la ecuación (4) será el número totales de pines de
entrada salida, quedando la función de coste para este SGA como la ecuación (5). En este
caso FCLBi y CCLBi son la fila y columna del CLBi conectado con el pin pi cuya posición en el
plano es (Fpi, Cpi).
Dcr =
i =166
∑ (| F
CLBi
− F Pi | + | C CLBi − C Pi |) .
(5)
i =1
El proceso de selección de un individuo (selección proporcional a la función objetivo), se
hace en base a una función de distribución de probabilidad que depende del valor de la
función objetivo de cada individuo, por lo que con este criterio de selección se favorecerán
a los individuos más aptos. En éste sentido, si se tiene al individuo xit y asumiendo que el
tamaño de la población es T y que se quiere maximizar la función O, entonces la probabilidad de selección de este individuo, ps(xit), se representa mediante la ecuación (6). Se seleccionan dos individuos de forma aleatoria usando el método de la ruleta. Este método es muy
sencillo y aparece explicado en numerosas referencias bibliográficas, por ejemplo [39].
p s ( xit ) =
O ( xit )
T
∑
.
(6)
O ( x kt )
k =1
El cruce se hizo intercambiando la información entre los progenitores, de un CLB escogido
de forma aleatoria, y respetando que los descendientes sean soluciones de la aplicación en
cuestión. El cruce está presente en cada generación. El tipo de cruce que se hizo realmente
no es el habitual de los SGA, porque no es cruce de un punto [15] sino el cruce de dos puntos (Fig. 6) que según la teoría debe ofrecer mejores resultados.
La mutación también está presente en este algoritmo y siempre ocurre. Se llevó a cabo
escogiendo un CLB y un bit específico (pin) de forma aleatoria, y el proceso de mutar consistió en usar un nuevo pin (un bit que estaba en ‘0’ ponerlo a ‘1’) y por supuesto desactivar
uno de los que se estaban usando (un bit que estaba en ‘1’ ponerlo a ‘0’), como se representa en la Fig. 7, esto para cada descendiente y también respetando que se mantengan como
soluciones del circuito que se implementa.
Puntos de Cruce
Puntos de Cruce
Padre: 1 0 1 1 0 1 0 0 0 0 0 1
Madre: 0 0 1 0 1 1 0 1 1 1 0 1
Hijo 2: 1 0 1 1 0 1 0 1 0 0 0 1
Hijo1: 0 0 1 0 1 1 0 0 1 1 0 1
Fig. 6. Entrecruzamiento de dos puntos
Descendiente
‘0’
‘1’
CLB 1,1
‘1’
Descendiente Mutado
CLB 1,1
‘0’
Fig. 7. Proceso de mutación
Por último se hace la inserción en la población de los descendientes. En los dos GAs diseñados en el contexto de esta tesis, se ha utilizado el criterio de reemplazo del peor. Los
nuevos individuos creados, sustituyen a los peores individuos de la población actual.
4.2.2.2 Resultados Experimentales
Como resultados experimentales se muestra la evolución del GA y las mejoras de tiempos
para dos aplicaciones. La primera aplicación es el diseño de un reloj digital y la segunda es
el diseño del decodificador para los códigos de corrección de errores LDPC (20,3,4), implementados sobre la tarjeta de desarrollo XSV300 suministrada por XESS Corporation.
En la primera aplicación las demoras promedios de conexión de todo el diseño se mejoraron
en 0.043 ns (el GA logró reducir las demoras de 1.179 ns a 1.136 ns) y la evolución del GA
se muestra en la Fig. 8.
En la Tabla1 se muestran los resultados de las demoras de conexión para la segunda aplicación, después de hacer la implementación siguiendo el flujo de diseño estándar de Xilinx, y
optimizando mediante el uso del GA.
Se observa una ligera mejora, que aunque parezca insignificante, al traducirlo a velocidad
de transferencia de datos si puede ser significativo. Mediante el uso del GA diseñado, se
influye fundamentalmente en el promedio de las demoras de todo el diseño.
Fig. 8. Evolución del GA en la mejora de ubicación de pines
Parámetro
Herramientas Xilinx GA
(ns)
(ns)
Promedio de las demoras de co1.725
1.713
nexión para este diseño.
Máxima demora de un pin.
6.475
6.459
Promedio de las demoras de co5.910
5.895
nexión para las 10 peores rutas.
Mejora del GA vs
Xilinx (%)
0.69
0.24
0.25
Tabla 1. Comparación de retardos haciendo ubicación de pines automática y con el GA
4.2.3 GA para mejorar la ubicación interna del diseño sobre FPGAs
Se ha implementado un segundo algoritmo genético para optimizar la ubicación de módulos
resultantes del mapeo, para un diseño sobre un FPGA. A continuación se describirán los
principales operadores de este GA diseñado y se mostrarán los resultados de su uso.
4.2.3.1 Algoritmo Genético Diseñado
Para este problema, una solución será, un cromosoma que represente todas las rutas de
interconexión del diseño. Cada ruta será un gen y se representará mediante dos puntos en el
espacio (módulo origen y módulo destino), donde cada uno de ellos se corresponde con la
ubicación de un módulo resultante del mapeo, en la estructura en forma de matriz del
FPGA. En este GA también se ha representando al FPGA como una matriz, y para la estructura que usamos de ejemplo el array de dos dimensiones es de [66x98]. Estas son las dimensiones porque se ha querido detallar hasta el nivel de módulo (LUT, registro o módulo
suma) y para ello se ha dividido cada CLB en cuatro sub-módulos.
La codificación en este problema se ha ideado de forma tal que cada gen será un número
complejo representado por dos números enteros, donde su parte real (x) representa al elemento origen de la conexión (ruta) y la parte imaginaria (yi) al elemento destino (x + yi). El
valor entero de x y de y se calcula mediante las ecuaciones (7) y (8) respectivamente, teniendo en cuenta que en una matriz, cada elemento (fila,columna) puede representarse con
estas expresiones mediante un valor entero en el sistema decimal. Ct es el número total de
columnas de la matriz, 98 en este caso. Cada cromosoma estará constituido por un vector
complejo de tamaño igual al número total de rutas de interconexión.
(7)
(8)
x = (F1 - 1) * Ct + C1 .
y = (F2 - 1) * Ct + C2 .
Se ha usado el convenio de representar los dos valores de los puntos origen y destino de
cada ruta de conexión, mediante un único elemento en forma de número complejo, porque
de esta forma el procesamiento es más sencillo y rápido, siendo cada cromosoma un vector
de V elementos (rutas), en lugar de una matriz de [Vx2].
Para obtener el cromosoma número uno de la población también hay que hacer uso del
fichero pines.txt, porque un pin de entrada salida puede ser un extremo de una ruta de interconexión. El otro fichero que se utiliza (cromosoma.txt) es también generado con el mismo
procedimiento que en el diseño anterior, lo que ahora la información que contendrá por
cada línea son los dos puntos (origen y destino) de una ruta de interconexión y tendrá tantas
líneas como rutas tenga el diseño.
La generación del resto de los individuos de la población se hace de forma aleatoria, respetando que cada uno de ellos sea solución de la aplicación. Para este algoritmo se han hecho
pruebas escogiendo desde tamaños de población en 50 hasta 500, y se sigue manteniendo el
criterio de que con una población de 100 individuos, para el problema que se analiza, se
obtienen resultados satisfactorios.
El cómputo de la función de coste para cada individuo se hace mediante la ecuación (3)
que ha sido reformulada convenientemente en la ecuación (9), siendo k el número de rutas
de interconexión, y calculando los valores de F y C mediante las ecuaciones (10) y (11). Al
evaluar un cromosoma lo que se debe hacer es calcular las distancias que representan cada
gen o ruta y sumarlas todas, obteniendo un valor que mientras menor sea, mejor solución
representará ese individuo. Hay que convertir los valores enteros de x e y (Entero en (10) y
(11)) a valores de sus filas y columnas correspondientes a la matriz que representa la estructura del FPGA.
∑ (F
k
Dcr =
origen
− Fdestino + C origen − C destino
i =1
 Entero − 1 
 +1.
F = floor 

Ct


C = mod((Entero − 1), Ct ) + 1 .
).
(9)
(10)
(11)
En la ecuación (10) floor representa una función que devuelve el valor entero de la división
(el cociente), y en la ecuación (11) mod representa una función que devuelve el resto de una
división. Ct es el número de columnas totales de la matriz.
En este caso se han implementado los criterios de selección proporcional a la función de
coste y proporcional al rango (ecuaciones (6) y (12)). En el primero de los casos se le da
mayor probabilidad de selección a los individuos más aptos, y en el segundo se hace una
distribución uniforme de las probabilidades de selección de los individuos. Para hacer la
selección de los progenitores por el segundo método, se organiza la población en una lista
de 1 hasta T en función de los valores de la función objetivo, siendo el primer elemento de
la lista el que menos adaptado está, y el último aquel que mejor adaptado está. A continuación se calculan las probabilidades de selección de cada individuo, para lo cual existen
diversas vías pero la más extendida es la del cálculo de la probabilidad lineal al rango. La
probabilidad de selección de cada individuo ps(xit), para cada generación t y población de
tamaño T, puede calcularse mediante la ecuación (12), donde p s ( xit ) ≥ 0 ∀i ∈ {1,2, , T } .
De esta forma todos los individuos tienen la misma probabilidad de ser seleccionados. Al
igual que en el diseño del GA anterior, se ha hecho uso del método de la ruleta para seleccionar dos individuos de la población.
p s ( xit ) =
Rango(O ( xit ))
.
T (T + 1) / 2
(12)
Se han hecho pruebas con los dos criterios de cruce por separado, y también se han hecho
pruebas utilizando los dos criterios de cruce durante una misma evolución. Las diferencias
de los resultados no han sido significativas.
El cruce se hizo seleccionando de forma aleatoria una ruta de interconexión e intercambiando la información de este gen entre los progenitores (tanto el módulo origen como el
destino). En todas las generaciones se ha tenido en cuenta que los nuevos individuos que se
generen sean soluciones del problema.
A cada generación se aplica el criterio de mutación. En este caso la mutación ha consistido
en elegir de forma aleatoria uno de los genes (una ruta) del individuo, y generar de forma
aleatoria un nuevo extremo a esa ruta (origen o destino). Se es conciente de lo que implica
ese cambio de ruta, y el algoritmo es capaz de reestablecer de forma adecuada todas las
demás rutas que se ven implicadas en ese cambio.
La generación aleatoria del nuevo extremo se fuerza a que sea un módulo libre del diseño
sobre el FPGA. De aquí que también se extrae, con un procedimiento similar al de cromosoma.txt, de los resultados de las herramientas de desarrollo, la información de los módulos
libres y se crea el fichero libres.txt. Finalmente, los nuevos individuos creados sustituyen a
los peores individuos de la población actual, usando como criterio de inserción el “reemplazo del peor”.
4.2.3.2 Resultados Experimentales
Para este segundo GA diseñado se mostrarán resultados en la optimización de las demoras
de la implementación del decodificador LDPC (20,3,4). Se tendrán en cuenta modificaciones de los parámetros del GA, y en base a ello se ofrecerán diferentes resultados.
Los resultados de la aplicación de este GA, mostrados en la Tabla 2, son comparados siempre con los obtenidas por el uso de la herramienta de diseño de Xilinx, mostrados en la
Tabla1.
Parámetro
Simulación 1 Simulación 2 Simulación 3 Simulación 4
Número de Iteraciones
750
40000
10000
15000
Tiempo de Simulación
893
19390
5943
8167
Tamaño de Población
50
50
100
100
Criterio de Selección
Coste
Rango
Coste+Rango Coste+Rango
(1) Promedio de todas
1.658 ns
1.662 ns
1.651 ns
1.649 ns
las demoras
+3.88 %
+3.65 %
+4.28 %
+4.4 %
% de mejora vs Xilinx
(1) 1.725
(2) Demora máxima
5.648 ns
5.531 ns
6.267 ns
5.250 ns
+12.77 %
+14.57 %
+3.21 %
+18.91 %
% de mejora vs Xilinx
(2) 6.475
Tabla 2. Demoras en la ubicación en el FPGA usando el GA, para el LDPC (20,3,4)
Como se puede apreciar, con el uso del algoritmo genético, tanto las demoras promedios de
todo el diseño, como las demoras máximas, son mejoradas con relación a los resultados de
las herramientas de desarrollo de Xilinx. Una mejora de 1.225 ns en la demora máxima del
diseño del decodificador LPDC, obtenida en la Simulación 4 es significativa si se tiene en
cuenta que la frecuencia de trabajo de la aplicación es de 100 MHz.
5 Conclusiones
Mejorando la etapa de ubicación y rutado para aplicaciones sobre FPGAs, de forma tal que
se minimice el número de puntos de interconexión de las rutas del diseño, se mejora la velocidad de procesamiento de información. Todos los aportes que se hagan en aras de alcanzar mayores velocidades de procesamiento de información, son considerados de suma importancia. Alcanzar los 2 Gbit/seg como velocidad de transferencia de información es la
meta actual en los sistemas de comunicaciones inalámbricas, pero no será la meta futura ni
el tope. A pesar de los trabajos que se han desarrollado en aras de optimizar la etapa de
ubicación y rutado del diseño de aplicaciones sobre FPGAs, se ha mostrado que los resultados de las herramientas actuales de desarrollo pueden ser mejorados.
Se ha implementado un SGA para optimizar la distribución y asignación de pines para una
aplicación sobre un FPGA, que disminuye las demoras de conexión en el diseño y debido a
ello contribuye en el aumento de la velocidad de transferencia de datos. También se ha
implementado un GA para optimizar la ubicación de módulos resultantes del mapeo para
diseños sobre FPGAs, contribuyendo de igual forma al aumento de la velocidad de transferencia de datos. Para ambos diseños, se ha partido de la generación de un cromosoma a
partir de los resultados entregados al final de la fase de ubicación y rutado, siguiendo la
secuencia del flujo de diseño de Xilinx. Los resultados de los dos GAs son favorables, y se
muestran mejoras en las demoras de conexión para los diseños donde se usen. Se ha propuesto una ampliación del flujo de diseño de Xilinx, como metodología para hacer uso de
los GAs diseñados en la optimización de demoras para un diseño sobre un FPGA.
En estos momentos el problema de la ubicación en FPGAs es un problema sin resolver, por
tal motivo las aportaciones en éste campo siguen siendo de importancia. Independientemente a las mejoras que proporcionan los GAs diseñados, no se obtienen soluciones óptimas,
claramente justificado por la naturaleza NP del problema y por el uso de algoritmos heurísticos. Se debe resaltar que los resultados de la optimización con GAs, en el problema de la
ubicación para el proceso de diseño sobre FPGAs, es aplicable a todo el entorno de diseño
de aplicaciones sobre estas tecnologías, y no a una aplicación únicamente.
Referencias
1. Jamin, A., Mähönen, P. and Shelby, Z.: Software radio implementability of Wireless LANs. In the
12th Thurrhenian International Workshop on Digital Communications (2000).
2. Reichhart, S., Youmans, B. and Dygert, R.: The Software Radio Development System. IEEE Personal Communications, Vol. 6, No. 4 (1999).
3. Mitola, J.: The software radio architecture. IEEE Communication Magazine, Vol. 33, No. 5 (1995).
4. Xilinx: The home page for Programmable Logic, http://www.xilinx.com (2004).
5. Ashenden, P. J.: The Designer's Guide to VHDL. Morgan Kaufmann Publishers, Inc. (1996).
6. Pardo, F. y Boluda, J. A.: VHDL Lenguaje para Síntesis y Modelado de Circuitos. RA-MA (1999).
7. Skahill, K.: VHDL for Programmable Logic. Addison Wesley (1996).
8. Smith, D. J.: HDL Chip Design: A Practical Guide for Designing, Synthesizing and Simulating
ASICs and FPGAs using VHDL or Verilog. Doone Publications (2001).
9. Altera, Inc.: Cyclone: The Lowest-Cost FPGA Ever, http://www.altera.com.
10. Xilinx: The Programmable Gate Array Data Book. Xilinx Inc. (1992).
11. Chung, K.: Size, Speed and Power Analysis for Application-specific Integrated Circuits Using
Synthesis. M. S. Thesis, University of Tennessee (2003).
12. Singh, A. and Marek-Sadowska, M.: Efficient circuit clustering for area and power reduction in
FPGAs. In Proceedings of the ACM/SIGDA Tenth International Symposium on FPGAs (2002).
13. Shang, L., Kaviani A. and Bathala, K.: Dynamic Power Consumption in Virtex-II FPGA Family.
In International Symposium on Field Programmable Gate Arrays (2002) 157-164.
14. Kumthekar, B. and Somenzi, F.: Power and Delay Reduction via Simultaneous Logic and
Placement Optimization in FPGAs. In Proceedings of the DATE’2000 (2000) 202-207.
15. Falcón-Urquiaga, W.: Optimización de Diseños sobre FPGAs e Implementación Paralela de
Decodificador para LDPC. Tesis de Doctorado, Universidad de Mondragón (2004).
16. Cohoon, J. P., Karro, J., Lienig, J.: Evolutionary Algorithms for the Physical Design of VLSI
Circuits. Advances in Evolutionary Computing: Theory and Applications (2003) 683-712.
17. Baruch, Z., Creţ, O. and Pusztai, K.: An Efficient Sequence to Apply Slicing Lines in FPGA
Placement. In Proceedings of the Q&A-R 2000 International Conference on Quality, Automation
and Robotics, Tome I (2000) 267-272.
18. Drechsler, R.: Evolutionary Algorithms for VLSI CAD. Kluwer Academic Publishers (1998).
19. Sait, S. M. and Youssef, H.: VLSI Physical Design Automation. McGraw-Hill, (1995).
20. Cong, J., Ding, Y., Gao, T. and Chen, K. C.: LUT-Based FPGA Technology Mapping under
Arbitrary Net-Delay Models. Computers and Graphics, Vol. 18 (1994) 507-516.
21. Mazumder, P. and Rudnick, E. M.: Genetic Algorithms for VLSI Design, Layout & Test Automation. Prentice Hall PTR (1999).
22. Xilinx: Virtex Data Sheet, http://www.xilinx.com/partinfo/ds003.htm.
23. Pérez, J. I. H.: Técnicas de Partición y Ubicación para Sistemas Multi-FPGA basadas en Algoritmos Genéticos. Tesis de Doctorado, Universidad Complutense de Madrid (2001).
24. Francis, R., Rose, J. and Vranesic, Z.: Chortle-crf: Fast Technology Mapping for Lookup TableBased FPGAs. In Proceedings of the 28th Design Automation Conference (1991) 227-233.
25. Murgai, R., Shenoy, N., Brayton, R. K. and Sangiovanni-Vincentelli, A.: Improved Logic Synthesis Algorithms for Table Look Up Architectures. In Proceedings of the IEEE International Conference on Computer-Aided Design (1991) 564-567.
26. Karplus, K.: Xmap: A Technology Mapper for Table-Lookup Field- Programmable Gate Arrays.
In Proceedings of the 28th Design Automation Conference (1991) 240-243.
27. Kao, C. C. and Lai, Y. T.: A Routability Driven Technology Mapping Algorithm for LUT Based
FPGA Designs. IEICE Transactions on Fundamentals of Electronics, Communications and Computer Sciences, Vol. E84-A, No.11 (2001), 2690-2696.
28. Betz, V. and Rose, J.: FPGA Routing Architecture: Segmentation and Buffering to Optimize
Speed and Density. ACM/SIGDA International Symposium on FPGAs (1999) 59-68.
29. Brown, S., Francis, R., Rose, J. and Vranesic, Z.: Field-Programmable Gate Arrays. Kluwer
Academic Publishers (1992).
30. Duan, H., Lockwood, J. W. and Kang, S. M.: FPGA Prototype Queuing Module For High
Performance ATM Switching. In Proceedings of the Seventh Annual IEEE International ASIC
Conference (1994) 429-432.
31. Xilinx: The Programmable Logic Data Book. Xilinx, Inc. (2002).
32. Tahoori, M. B.: Improving Detectability of Resistive Open Defects in FPGA. In 5th MAPLD
International Conference (2002).
33. Betz, V. and Rose, J.: VPR: A New Packing, Placement and Routing Tool for FPGA Research.
Seventh International Workshop on Field-Programmable Logic and Applications (1997) 213-222.
34. Lemieux, G. G., and Brown, S. D.: A Detailed Routing Algorithm for Allocating Wire Segments
in Field-Programmable Gate Arrays. In Proc. ACM/SIGDA Physical Design Workshop (1993).
35. Lee, Y.S. and Wu, A. C. H.: A performance and routability-driven router for FPGA's considering
path delays. IEEE TCAD (1997).
36. Eum, N. W., Kim, T. and Kyung, C. M.: A Router for Symmetrical FPGAs Based on Exact Routing Density Evaluation. In Proceedings of the ACM/IEEE International Conference on ComputerAided Design (2001) 137-143.
37. Tomassini, M.: Evolutionary Algorithms. In Proceedings of the International Workshop Towards
Evolvable Hardware, Lecture Notes in Computer Science, Vol. 1062 (1996) 19-47.
38. Larrañaga P. and Lozano J. A.: Estimation of Distribution Algorithms: A New Tool for Evolutionary Computation. Kluwer Academic Publishers, (2001).
39. Goldberg, D. E.: Genetic Algorithms in Search, Optimization and Machine Learning. Addison
Wesley (1989).
40. Michalewicz, Z.: Genetic Algorithms + Data Structures = Evolution Programs. Springer-Verlag,
Berlin Heidelberg New York, 3rd edn. (1999).
41. Coello, C. A.: Introducción a los Algoritmos Genéticos, Soluciones Avanzadas. Tecnologías de
Información y Estrategias de Negocios, Año 3, No. 17 (1995) 5-11.
42. Vose. M. D.: The Simple Genetic Algorithm: Foundations and Theory. The MIT Press (1999).
43. Mitchell, M.: An Introduction to Genetic Algorithms. MIT Press (1996).
44. Rudolph, G.: Convergence analysis of canonical genetic algorithm. IEEE Transactions on Neural
Networks, Vol. 5, No. 1 (1994) 96-101.
45. Lienig, J. and Thulasiraman, K.: A new genetic algorithm for the channel routing problem. In
VLSI Design Conference (1994) 133-136.
46. Drechsler, R., Becker, B. and Gockel, N.: A Genetic Algorithm for the Construction of Small and
Highly Testable OKFDDs Circuits. In Genetic Programming Conference (1996) 473-478.
47. Falcón-Urquiaga, W., Altuna, J., Flores, J. L. and Vento, J. R., Using Genetic Algorithms for
Delay Minimization in the FPGAs Routing. The First International ICSC Congress on NeuroFuzzy NF´2002 (2002).
Descargar