Вы находитесь на странице: 1из 18

FPGAS (field-programmable gate array)

1. INTRODUCCION

La electrónica moderna usa electrónica digital para realizar perfeccionamientos en la


tecnología. En un circuito lógico digital existe transmisión de información binaria entre sus
circuitos. A primera instancia esto nos parece relativamente simple, pero los circuitos
electrónicos son bastante complejos ya que su estructura está compuesta por un número
muy grande de circuitos simples, donde todos deben funcionar de la manera correcta, para
lograr el resultado esperado y no obtener una información errónea.

La información binaria que transmiten los circuitos ya mencionados, se representan de la


siguiente forma:

 "0" o "1"
 "Falso" o "Verdadero"
 "On" y "Off"
 "Abierto" o "Cerrado"
 o cualquier mecanismo que represente dos estados mutuamente
excluyentes

La combinación de estos elementos digitales dan lugar a unas combinaciones como ser:
compuerta NAND (No Y), compuerta NOR (No O), compuerta OR exclusiva (O exclusiva),
demultiplexores o demultiplexadores, decodificadores, codificadores, flip-flops, memorias,
microcontroladores, microprocesadores, multiplexores o multiplexadores.
Las FPGAs son unos dispositivos nos permiten describir un circuito digital usando un
lenguaje específico (los dos más comunes son VHDL y Verilog) y que tras cargarlo en el
integrado, es creado físicamente en el chip.
En este documento se pretende mostrar la composición que tiene un FPGA y que tipos de
lenguajes utiliza para su programación y funcionamiento.

2. OBJETIVOS

 Dar a conocer cuál es la composición interna de un FPGA paso a paso y como estos
componentes permiten su funcionamiento.
 Enunciar algunos lenguajes de programación que utilizan los FPGAS.
 Dar una clara explicación de cómo se utilizan estos lenguajes de programación.
3. MARCO TEORICO
Una matriz de puertas programables o FPGA , es un dispositivo programable que contiene
bloques de lógica cuya interconexión y funcionalidad puede ser configurada en el momento,
mediante un lenguaje de descripción especializado. La lógica programable puede reproducir
desde funciones tan sencillas como las llevadas a cabo por una puerta lógica o un sistema
combinacional hasta complejos sistemas en un chip.

Internamente se componen principalmente de cables, puertas lógicas, biestables, y puertos


de entrada y salida. Todo ello sin conectar, como una plantilla en blanco, hasta que se les
carga un bitstream -un archivo generado a partir de la descripción del circuito-. Un símil que
nos parece muy fácil de entender, es que las FPGAs son el equivalente a las impresoras 3D
para los circuitos digitales. A diferencia eso sí de las impresoras, es posible reprogramar una
FPGA tantas veces como se necesite, es decir, siguiendo con la analogía, el material
imprimible nunca se acaba.

“Las FPGAs son el equivalente a las impresoras 3D para los circuitos digitales”

COMPOSICION INTERNA
El proceso de diseño de un circuito digital utilizando una matriz lógica programable puede
descomponerse en dos etapas básicas:
1. Dividir el circuito en bloques básicos, asignándolos a los bloque configurables del
dispositivo.
2. Conectar los bloques de lógica mediante los conmutadores necesarios.

Los elementos básicos constituyentes de una FPGA como las de Xilinx se pueden ver en la
figura 2 y son los siguientes:
1. Bloques lógicos, cuya estructura y contenido se denomina arquitectura. Hay muchos tipos
de arquitecturas, que varían principalmente en complejidad (desde una simple puerta hasta
módulos más complejos o estructuras tipo PLD). Suelen incluir biestables para facilitar la
implementaci´ondecircuitossecuenciales.Otrosm´odulosdeimportanciasonlosbloques de
Entrada/Salida
2. Recursos de interconexión, cuya estructura y contenido se denomina arquitectura de
rutado.
3. Memoria RAM, que se carga durante el RESET para configurar bloques y conectarlos.
Por supuesto, no todas las FPGA son iguales. Dependiendo del fabricante nos podemos
encontrar con diferentes soluciones. Las FPGAs que existen en la actualidad en el mercado
se pueden clasificar como pertenecientes a cuatro grandes familias, dependiendo de la
estructura que adoptan los bloques lógicos que tengan definidos. Las cuatro estructuras se
pueden ver en la figura3, sin que aparezcan en la misma los bloques de entrada/salida.
1. Matriz simétrica, como son las de XILINX
2. Basada en canales, ACTEL
3. Mar de puertas, ORCA
4. PLD jerárquica, ALTERA o CPLDs de XILINX.
En concreto, para explicar el funcionamiento y la estructura básica de este tipo de
dispositivos programables solo se consideraran las distintas familias de XILINX.

ARQUITECTURA DE LAS FPGA XILINX


Estructura
La FPGA que se debe realizar constara de 16 CLBs. En principio basta con este tamano, pues
el diseño ha de ser completamente regular y estructurado, caracterizando perfectamente a
nivel de modulos, lo que lo hara fácilmente ampliable. Recordamos que la meta que se
persigue es un diseno correcto, con un trazado simple y bien estructurado. Ademas de los
16 CLBs, es necesario implementar los recursos de conexión (tanto las líneas como las
matrices de interconexión) y el sistema de control que gestión el a programación de toda la
FPGA. Para facilitar la comprensión del problema, hay que ver en el diseño dos estructuras
“superpuestas”: una correspondiente a la FPGA propiamente dicha, como la ve el diseñador
final; otra estructura constituye el entramado necesario para realizar la programación de la
FPGA. Esta ´ ultima parte es transparente para el usuario. Es importante destacar que la
programación de la FPGA no es crıtica en cuanto a prestaciones, porque se hace una única
vez y no es determinante. Solo ha de ser correcta. Sin embargo, se interesa optimizar el
funcionamiento de la FPGA una vez programada para la implementación final.
Bloques lógicos
La arquitectura del CLB de la XC2000 se presentó en la figura 5, siendo sus componentes
principales:
Una LUT de 4 entradas y 2 salidas
Un biestable.
Seis multiplexores, cada uno con sus correspondientes elementos de memoria.
La LUT que vamos a implementar ha de ser capaz de implementar dos funciones de 4
entradas independientes
En Xilinx, el biestable del CLB dispone de una entrada de “reloj” o enable que se puede
excitar con tres líneas: La entrada de reloj clk. La entrada de propósito general C. La función
combinacional G (salida de la LUT).
En cuanto al tipo de biestable, el que se encuentra realmente en el CLB de Xilinx es
configurable, de forma que se puede programar como latch D sensible al nivel o biestable
D sensible al flanco. Para nuestros propósitos sería suficiente implementar uno de los dos
tipos de biestable, sin que sea programable. Con esto el número de multiplexores del CLB
que nos hacen falta es menor.
Estructura del LUT
Hasta ahora, se ha presentado el CLB de la XC2000 desde el punto de vista de un usuario
final. Dado que ahora se va a implementar siguiendo una metodología full-custom, es
necesario conocer más detalles. En la figura 9 se ve el conjunto de entradas y salidas que
tiene realmente la LUT. Como se puede observar, en el símbolo aparecen dos entradas
nuevas, las relacionadas con la programación de la LUT: Las líneas de datos Din, sirven para
introducir en la LUT los datos de programación. La línea de programación Prog, su valor será
diferente en función del modo en que se esté (programación/funcionamiento normal).
Como ya se ha explicado previamente, la forma inmediata de implementar una LUT es
utilizar una memoria RAM estática. Por ejemplo, considera la tabla de verdad de la función
f = ab + c’ que aparece en la figura 10. Si esta función lógica se implementa con una LUT de
tres entradas, será necesaria una RAM de 23 = 8 posiciones, y almacenaremos 1 en la
posición 000, 0 en la posición 001, y as´ ı sucesivamente.

La equivalencia de terminales entre la LUT y la memoria son los siguientes. Las líneas de
entrada corresponden al bus de direcciones; las líneas de datos equivalen a bus de datos de
entrada; las salidas (X, Y en nuestro caso) corresponden a bus de datos de salida; y la senal
de programacion será la línea de lectura/escritura, R/W’ de la memoria. Dependiendo del
tipo de implementación de la memoria se puede necesitar alguna entrada m´ as (por
ejemplo, se puede utilizar alguna señal de reloj para temporizar el funcionamiento de la
memoria).
IMPLEMENTACION DE LAS MEMORIAS CMOS
Una memoria CMOS3 integra los siguientes componentes basicos:
La celula de memoria. Puede ser estatica o dinamica dependiendo de la forma de
almacenamiento del dato. Las células estáticas son más grandes que las dinámicas, pero
tienen la ventaja de no necesitar refresco. La forma más eficiente de distribuir las células es
colocarlas en una matriz cuadrada, como se muestra en la figura 11.

El decodificador de filas, que permite seleccionar la fila de la matriz de células de memoria


a la que se quiere acceder (tanto para lectura como para escritura). Para ello se utilizaran
parte de las líneas de dirección. El decodificador de columnas, que permite seleccionar las
células de la palabra que se va a leer o escribir entre los datos de la fila proporcionada por
el decodificador de filas. Circuito de escritura de las células adecuadas (las de la palabra
deseada). Circuito de lectura de la fila adecuada (sense amplifier). Circuito de control de
línea de bit, que acondiciona esta línea para que sean factibles las operaciones de lectura y
escritura. La forma de distribuir las células en la matriz se describe a continuación. Hay que
intentar hacer una matriz lo más cuadrada posible. Siguiendo la terminología de la figura
11, supongamos que tenemos una memoria con 2k palabras (por lo tanto con k líneas de
dirección) y cada palabra tiene b bits. En total tendremos 2k × b células. Todas estas células
se ordenan en una matriz de dimensiones n × m, donde m = 2k−l y n = 2l × b, siendo l una
parte de las líneas de dirección necesaria para hacer la selección de las columnas. Hay que
intentar que n y m sean lo más parecido posible para tener forma cuadrada.
En la figura 12 aparece representada la relación existente entre todos los elementos
constituyentes de la memoria y su disposición en las operaciones de lectura y escritura.

INTERCONEXION
La arquitectura de rutado de la familia XC2000 utiliza tres tipos de recursos de
interconexión: conexiones directas, conexiones de propósito general y líneas de largo
recorrido. Toda esta estructura se puede simplificar para hacerla mas fácil
de implementar. En esta sección hacemos una propuesta de cómo se pueden realizar.
Comenzando por las conexiones de propósito general, sabemos que se basan en la unión
de segmentos de pista entre CLBs. Para simplificar el rutado vamos a considerar que son 4
líneas tanto en sentido horizontal como en vertical. Necesitaremos dos células especiales
para realizarlas: La matriz de interconexión, que permite el cruce de horizontales y
verticales. No tiene por qué posibilitar la conexión de todas las líneas con todas. Se
implementara utilizando 4 switch de 2x2. Módulo de conexión de las entradas y salidas del
CLB a los segmentos de pista de las conexiones de propósito general. Un ejemplo de cómo
se puede hacer estas conexiones se ve en la figura 13. Como se ve, hay que facilitar el acceso
a las entradas del CLB y la salida del mismo. No tiene por qué ser el acceso solo a las líneas
verticales; esto depender´ a fundamentalmente del trazado que se realice del CLB.
Siguiendo esta propuesta, las conexiones directas que vamos a implementar son las
descritas en el manual de Xilinx:

 La salida X se puede conectar a las entradas A o B del CLB inferior o a las entradas C
o D del CLB superior.
 La salida Y se puede conectar a la entrada B del CLB situado a la derecha.

Evidentemente esto es para los CLBs internos de la FPGA. Los que estén en la periferia
se podrán conectar directamente a los pads de E/S. Por supuesto, las líneas de E/S del CLB
no tienen por qué tener la orientación mostrada en la figura, cada proyecto se realizara con
la orientación que cada grupo estime mejor. En cuanto a las líneas de largo recorrido, se
deja a voluntad del diseñador implementar las que son programables. En caso de
considerarlas, se tendría que elegir que entradas y salidas del CLB tendrán acceso a las
mismas. En la figura 13 se ha presentado como ejemplo dos líneas de largo recorrido y
algunas entradas accediendo a las mismas. Hablamos de líneas programables
porque hay 2 líneas de largo recorrido que en nuestro caso NO serán programables y si son
obligatorias: las líneas que llevan las dos fases del reloj, que como se sabe, se deben rutar
con especial cuidado.
CONTROL DE PROGRAMACION
Esta parte de la FPGA debe ser una extensión del circuito de programacion de una LUT. Ha
de ser un circuito único que configure forma secuencial toda la FPGA. Aunque el la familia
XC2000 hay varias formas de programar la FPGA, nosotros nos centraremos en el modo más
sencillo: el denominado modo Serial/Slave. En este caso los datos llegan en serie por un pin
de entrada de datos de forma síncrona: un reloj (CCLK) valida los datos de la
entrada serie (DIN). Se deja a alumno definir el formato de los datos de entrada cuando se
está en configuración. El control de la FPGA se puede hacer desde un microprocesador,
resultando el esquema de conexión m´ as sencillo el que aparece en la figura 14.
Resulta evidente que hay que utilizar los recursos de interconexión para realizar la
programacion, por lo que ser´ a necesario configurar primero las interconexiones para
realizar la programacion de los CLBs. Para programar las LUTs, se sugiere como forma
sencilla de implementación comenzar configurando todas las líneas para que lleven a, b c y
d a todos los CLBs de la FPGA. Luego se utilizarian unas “líneas de selección de CLB” que
vayan habilitando cada CLB mientras se hace la programacion. Son necesarios unos
decodificadores globales que sirvan para llevar el dato a cada fila/columna de CLBs. Esto se
puede ver como el acceso en escritura a una memoria. Si se realiza la escritura por filas o
columnas, harían falta unos registros de desplazamiento globales. Todos los elementos de
memoria se deben enlazar siguiendo una filosofía ”scan-path”.

HDL

Un lenguaje de descripción de hardware (HDL, hardware description language) es un


lenguaje de programación especializado que se utiliza para definir la estructura, diseño y
operación de circuitos electrónicos, y más comúnmente, de circuitos electrónicos digitales,
como el convertidor analógico-digital o cualquier antena satelital. Así, los lenguajes de
descripción de hardware hacen posible una descripción formal de un circuito electrónico, y
posibilitan su análisis automático y su simulación.

Los lenguajes de descripción de hardware se parecen mucho a otros lenguajes de


programación de ordenadores tales como el C o Java: básicamente consisten en una
descripción textual con expresiones, declaraciones y estructuras de control. Sin embargo,
una importante diferencia entre los HDL y otros lenguajes de programación está en que el
HDL incluye explícitamente la noción de tiempo.

 ORIGENES

Debido a la creciente complejidad de los circuitos electrónicos digitales desde la década de


1970, los diseñadores de circuitos necesitaban descripciones de alto nivel de la lógica digital
que no estuviesen atadas a una determinada tecnología electrónica, tales como la CMOS o
la BJT. Así, los HDL fueron creados para hacer posible el diseño de circuitos con un alto nivel
de abstracción, y con la posibilidad de incluir en los modelos características propias de los
circuitos electrónicos, tales como los flujos de datos y su variación en el tiempo.

 ESTRUCTURAS DE LOS HDL

Los HDL utilizan expresiones estándar basadas en texto que reflejan la estructura de los
circuitos electrónicos, si se viera dentro de una tarjeta, se podrían observar más de un
millón de compuertas a disposición del programador. Al igual que los lenguajes de
programación concurrentes, la sintaxis y semántica de los HDL incluyen notaciones
específicas para la concurrencia. Sin embargo, al contrario de lo que ocurre con la mayoría
de los lenguajes de programación, los HDL incluyen también una notación específica para
el tiempo, debido a que este es una característica fundamental en los circuitos electrónicos
reales. Los lenguajes cuyo único propósito es expresar la conectividad entre una jerarquía
de bloques son más bien clasificados como "lenguajes de listas de conexiones" (o lenguajes
"netlist"), tales como los que se usan en los programas de diseño asistido por ordenador
(CAD). Los HDL son algo más rico que estos lenguajes de listas de conexiones, ya que no sólo
permiten definir la estructura de un circuito, sino también su comportamiento.

Así, los HDL pueden ser usados para escribir especificaciones "ejecutables" de hardware. Es
decir, un programa escrito en HDL hace posible que el diseñador de hardware pueda
modelar y simular un componente electrónico antes de que este sea construido
físicamente. Es esta posibilidad de "ejecución" de componentes lo que hace que a veces los
HDL se vean como lenguajes de programación convencionales, cuando en realidad se
debería clasificarlos más precisamente como lenguajes de modelado.

En la práctica existen distintos tipos de simuladores capaces de trabajar tanto con eventos
discretos (digitales) como continuos (analógicos), existiendo lenguajes HDL específicos para
cada caso.

Pero desde el punto de vista práctico, una gran ventaja de los HDL está en que, utilizando
un programa llamado "sintetizador" es posible inferir, a partir de la expresión textual del
programa, el conjunto de operaciones lógicas y el circuito equivalente necesarios para
realizar la función del programa. Esto permite saltar desde el ámbito de la simulación
software al de la implementación real del hardware sobre circuitos lógicos reales tales como
los ASIC o las FPGA.

VERILOG

Verilog es un lenguaje de descripción de hardware (HDL, del Inglés Hardware Description


Language) usado para modelar sistemas electrónicos. El lenguaje, algunas veces llamado
Verilog HDL, soporta el diseño, prueba e implementación de circuitos analógicos, digitales y
de señal mixta a diferentes niveles de abstracción.

Los diseñadores de Verilog querían un lenguaje con una sintaxis similar a la del lenguaje de
programación C, de tal manera que le resultara familiar a los ingenieros y así fuera
rápidamente aceptada. El lenguaje tiene un preprocesador como C, y la mayoría
de palabras reservadas de control como "if", "while", etc, son similares. El mecanismo de
formateo en las rutinas de impresión y en los operadores del lenguaje (y su precedencia)
son también similares.

A diferencia del lenguaje C, Verilog usa Begin/End en lugar de llaves para definir un bloque
de código. Por otro lado la definición de constantes en Verilog requiere la longitud de bits
con su base. Verilog no tiene estructuras, apuntadores o funciones recursivas. Finalmente
el concepto de tiempo, muy importante en un HDL, no se encuentra en C.
El lenguaje difiere de los lenguajes de programación convencionales, en que la ejecución de
las sentencias no es estrictamente lineal. Un diseño en Verilog consiste de una jerarquía de
módulos. Los módulos son definidos con conjuntos de puertos de entrada, salida y
bidireccionales. Internamente un módulo contiene una lista de cables y registros. Las
sentencias concurrentes y secuenciales definen el comportamiento del módulo,
describiendo las relaciones entre los puertos, cables y registros. Las sentencias secuenciales
son colocadas dentro de un bloque begin/end y ejecutadas en orden secuencial, pero todas
las sentencias concurrentes y todos los bloques begin/end son ejecutadas en paralelo en el
diseño. Un módulo puede contener una o más instancias de otro módulo para definir un
sub-comportamiento.

Un subconjunto de sentencias en el lenguaje es sintetizable. Si los módulos en un diseño


contienen sólo sentencias sintetizables, se puede usar software para convertir o sintetizar
el diseño en una lista de nodos que describe los componentes básicos y los conectores que
deben implementarse en hardware. La lista de nodos puede entonces ser transformada en
una forma describiendo las celdas estándar de un circuito integrado, por ejemplo ASIC, o
una cadena de bits para un dispositivo de lógica programable (PLD) como puede ser
una FPGA o un CPLD.

 ORIGEN

Verilog fue inventado por Phil Moorby en 1985 mientras trabajaba en Automated
Integrated Design Systems, más tarde renombrada Gateway Design Automation. El objetivo
de Verilog era ser un lenguaje de modelado de hardware. Gateway Design Automation fue
comprada por Cadence Design Systems en 1990. Cadence ahora tiene todos los derechos
sobre los simuladores lógicos de Verilog y Verilog-XL hechos por Gateway.

 ESTANDAR ABIERTO

Con el incremento en el éxito de VHDL, Cadence decidió hacer el lenguaje abierto y


disponible para estandarización. Cadence transfirió Verilog al dominio público a través
de Open Verilog International, actualmente conocida como Accellera. Verilog fue después
enviado a la IEEE que lo convirtió en el estándar IEEE 1364-1995, habitualmente referido
como Verilog 95. A partir del 2001, se considera que dicho estándar es obsoleto, por lo que
se ha adoptado como una convención el uso de Verilolz. Esta variante, que ha sido ajustada
para poder cumplir con las normas de la TFA y por lo mismo de las principales compañías
que trabajan con dispositivos de esta naturaleza, se considera algo más dinámica dado que
la plataforma de desarrollo implementa el sistema gráfico Omega-Mu-Gamma, que facilita
el la implementación de archivos de tipo esquemático.

Extensiones a Verilog 95 fueron enviadas a la IEEE para cubrir las deficiencias que los
usuarios habían encontrado en el estándar original de Verilog. Estas extensiones se
volvieron el estándar IEEE 1364-2001 conocido como Verilog 2001.

VHDL

VHDL significa very-high-speed integrated circuits hardware description


language o lenguaje de descripción de hardware de circuitos integrados de muy alta
velocidad.

VHDL es un lenguaje de especificación definido por el IEEE (Institute of Electrical and


Electronics Engineers) (ANSI/IEEE 1076-1993) utilizado para describir circuitos digitales y
para la automatización de diseño electrónico . VHDL es acrónimo proveniente de la
combinación de dos acrónimos: VHSIC (Very High Speed Integrated Circuit)
y HDL (Hardware Description Language). Aunque puede ser usado de forma general para
describir cualquier circuito digital se usa principalmente para programar PLD (Programable
Logic Device - Dispositivo Lógico Programable), FPGA (Field Programmable Gate
Array), ASIC y similares.

Originalmente, el lenguaje VHDL fue desarrollado por el departamento de defensa de los


Estados Unidos a inicios de los años 80 basado en el lenguaje de programación ADA con el
fin de simular circuitos eléctricos digitales. Posteriormente se desarrollaron herramientas
de síntesis e implementación en hardware a partir de los archivos VHD.

 FORMAS DE DESCRIBIR UN CIRCUITO


Dentro del VHDL hay varias formas con las que se puede diseñar el mismo circuito y es tarea
del diseñador elegir la más apropiada.

 Funcional o Comportamental: Se describe la forma en que se comporta el circuito


digital, se tiene en cuenta solo las características del circuito respecto al
comportamiento de las entradas y las salidas. Esta es la forma que más se parece a
los lenguajes de software ya que la descripción puede ser secuencial, además de
combinar características concurrentes. Estas sentencias secuenciales se encuentran
dentro de los llamados procesos en VHDL. Los procesos son ejecutados en paralelo
entre sí, y en paralelo con asignaciones concurrentes de señales y con las instancias a
otros componentes.

 Flujo de datos: Se describen asignaciones concurrentes (en paralelo) de señales.

 Estructural: Se describe el circuito con instancias de componentes. Estas instancias


forman un diseño de jerarquía superior, al conectar los puertos de estas instancias con
las señales internas del circuito, o con puertos del circuito de jerarquía superior. Es la
recomendada cuando el diseño digital se vuelve complejo o está conformado por
múltiples bloques de hardware.

 Mixta: combinación de todas o algunas de las anteriores.

En VHDL también existen formas metódicas para el diseño de máquinas de estados, filtros
digitales, bancos de pruebas etc.

 Secuencia de diseño

El flujo de diseño de un sistema podría ser:

 División del diseño principal en módulos separados. La modularidad es uno de los


conceptos principales de todo diseño. Normalmente se diferencia entre dos
metodologías de diseño: top-down y bottom-up. La metodología top-down consiste
en que un diseño complejo se divide en diseños más sencillos que se puedan diseñar
(o describir) más fácilmente. La metodología bottom-up consiste en construir un
diseño complejo a partir de módulos, ya diseñados, más simples. En la práctica, un
diseño usa generalmente ambas metodologías.
 Entrada de diseños, pueden usarse diversos métodos tal como se vio anteriormente.
 Simulación funcional, es decir, comprobaremos que lo escrito en el punto anterior
realmente funciona como queremos, si no lo hace tendremos que modificarlo. En
este tipo de simulación se comprueba que el código VHDL o Verilog (u otro tipo de
lenguaje HDL) ejecuta correctamente lo que se pretende.
 Síntesis. En este paso se adapta el diseño anterior (que sabemos que funciona) a un
hardware en concreto, ya sea una FPGA o un ASIC. Hay sentencias del lenguaje que
no son sintetizables, como por ejemplo divisiones o exponenciaciones con números
no constantes. El hecho de que no todas las expresiones en VHDL sean sintetizables
es que el VHDL es un lenguaje genérico para modelado de sistemas (no sólo para
diseño de circuitos digitales), por lo que hay expresiones que no pueden ser
transformadas a circuitos digitales. Durante la síntesis se tiene en cuenta la
estructura interna del dispositivo, y se definen restricciones, como la asignación de
pines. El sintetizador optimiza las expresiones lógicas con objeto de que ocupen
menor área, o bien son eliminadas las expresiones lógicas que no son usadas por el
circuito.
 Simulación post-síntesis. En este tipo de simulación se comprueba que el
sintetizador ha realizado correctamente la síntesis del circuito, al transformar el
código HDL en bloques lógicos conectados entre sí. Este paso es necesario ya que, a
veces, los sintetizadores producen resultados de síntesis incorrectos, o bien realiza
simplificaciones del circuito al optimizarlo.
 Ubicación y enrutamiento. El proceso de ubicación consiste en situar los bloques
digitales obtenidos en la síntesis de forma óptima, de forma que aquellos bloques
que se encuentran muy interconectados entre sí se sitúen próximamente. El proceso
de enrutamiento consiste en interconectar adecuadamente los bloques entre sí,
intentando minimizar retardos de propagación para maximizar la frecuencia máxima
de funcionamiento del dispositivo.
 Anotación final. Una vez ha sido completado el proceso de ubicación y
enrutamiento, se extraen los retardos de los bloques y sus interconexiones, con
objeto de poder realizar una simulación temporal (también llamada simulación post-
layout). Estos retardos son anotados en un fichero SDF (Standard Delay Format) que
asocia a cada bloque o interconexión un retardo mínimo/típico/máximo.
 Simulación temporal. A pesar de la simulación anterior puede que el diseño no
funcione cuando se programa, una de las causas puede ser por los retardos internos
del chip. Con esta simulación se puede comprobar, y si hay errores se tiene que
volver a uno de los anteriores pasos.
 Programación en el dispositivo. Se implementa el diseño en el dispositivo final y se
comprueba el resultado.

 Procedimiento de diseño

El primer paso del diseño consiste en la construcción del diagrama en bloque del sistema.
En diseños complejos como en software los programas son generalmente jerárquicos y
VHDL ofrece un buen marco de trabajo para definir los módulos que integran el sistema y
sus interfaces, dejando los detalles para pasos posteriores.

El segundo paso es la elaboración del código en VHDL para cada módulo, para sus interfaces
y sus detalles internos. Como el VHDL es un lenguaje basado en texto, se puede utilizar
cualquier editor para esta tarea, aunque el entorno de los programas de VHDL incluye su
propio editor de texto. Después de que se ha escrito algún código se hace necesario
compilarlo. El compilador de VHDL analiza este código y determina los errores de sintaxis y
chequea la compatibilidad entre módulos. Crea toda la información necesaria para la
simulación. El próximo paso es la simulación, la cual le permite establecer los estímulos a
cada módulo y observar su respuesta. El VHDL da la posibilidad de crear bancos de prueba
que automáticamente aplica entradas y compara las salidas con las respuestas deseadas.
La simulación es un paso dentro del proceso de verificación. El propósito de la simulación
es verificar que el circuito trabaja como se desea, es decir es más que comparar entradas y
salidas. En proyectos complejos se hace necesario invertir un gran tiempo en generar
pruebas que permitan evaluar el circuito en un amplio rango de operaciones de trabajo.
Encontrar errores en este paso del diseño es mejor que al final, en donde hay que repetir
entonces una gran cantidad de pasos del diseño. Hay dos dimensiones a verificar:

 Su comportamiento funcional, en donde se estudia su comportamiento lógico


independiente de consideraciones de tiempo, como las demoras en las compuertas.
 Su verificación en el tiempo, en donde se incluyen las demoras de las compuertas y
otras consideraciones de tiempo, como los tiempos de establecimiento (set-up time)
y los tiempos de mantenimiento (hold time).

Después de la verificación se está listo para entrar en la fase final del diseño. La naturaleza
y herramientas en esta fase dependen de la tecnología, pero hay tres pasos básicos. El
primero es la síntesis, que convierte la descripción en VHDL en un conjunto de componentes
que pueden ser realizados en la tecnología seleccionada. Por ejemplo, con PLD se generan
las ecuaciones en suma de productos. En ASIC genera una lista de compuertas y un netlist
que especifica cómo estas compuertas son interconectadas. El diseñador puede ayudar a la
herramienta de síntesis especificando requerimientos a la tecnología empleada, como el
máximo número de niveles lógicos o la capacidad de salida que se requiere. En el siguiente
paso de ajuste (fiting) los componentes se ajustan a la capacidad del dispositivo que se
utiliza. Para PLD esto significa que acopla las ecuaciones obtenidas con los elementos AND
– OR que dispone el circuito. Para el caso de ASIC se dibujarían las compuertas y se definiría
como conectarlas. En el último paso se realiza la verificación temporal, ya que a esta altura
es que se pueden calcular los elementos parásitos, como las capacidades de las conexiones.
Como en cualquier otro proceso creativo, puede ser que ocasionalmente se avance dos
pasos hacia delante y uno hacia atrás (o peor).
4. CONCLUSIONES
 Se logró dar a conocer cuál es la composición interna de un FPGA paso a paso y como
estos componentes permiten su funcionamiento.
 Se enuncio algunos lenguajes de programación que utilizan los FPGAS.
 Se dio una clara explicación de cómo se utilizan estos lenguajes de programación.
5. BIBLIOGRAFIA
https://es.wikipedia.org/wiki/Circuito_digital
https://es.wikipedia.org/wiki/Field-programmable_gate_array
https://planetachatbot.com/qu%C3%A9-es-una-fpga-y-por-qu%C3%A9-jugar%C3%A1n-
un-papel-clave-en-el-futuro-e76667dbce3e
https://www.researchgate.net/figure/Figura-2-Estructura-interna-de-una-
FPGA_fig1_268253760

Вам также может понравиться

  • Catalogo V-Slot
    Catalogo V-Slot
    Документ16 страниц
    Catalogo V-Slot
    John Delgado Anchicoque
    Оценок пока нет
  • Labo 1 - Caracteristicas de Conmutacion Del Diodo y Del Transistor de Potencia
    Labo 1 - Caracteristicas de Conmutacion Del Diodo y Del Transistor de Potencia
    Документ7 страниц
    Labo 1 - Caracteristicas de Conmutacion Del Diodo y Del Transistor de Potencia
    Alba Rebeca Velasquez Fernandez
    Оценок пока нет
  • Carta de Permiso
    Carta de Permiso
    Документ1 страница
    Carta de Permiso
    Alba Rebeca Velasquez Fernandez
    Оценок пока нет
  • Procedimiento Lectura Termografica Tablero Electrico
    Procedimiento Lectura Termografica Tablero Electrico
    Документ12 страниц
    Procedimiento Lectura Termografica Tablero Electrico
    Christian del Hoyo
    Оценок пока нет
  • Muestreo Por Atributos
    Muestreo Por Atributos
    Документ24 страницы
    Muestreo Por Atributos
    Alba Rebeca Velasquez Fernandez
    Оценок пока нет
  • Labo 1 - Caracteristicas de Conmutacion Del Diodo y Del Transistor de Potencia
    Labo 1 - Caracteristicas de Conmutacion Del Diodo y Del Transistor de Potencia
    Документ7 страниц
    Labo 1 - Caracteristicas de Conmutacion Del Diodo y Del Transistor de Potencia
    Alba Rebeca Velasquez Fernandez
    Оценок пока нет
  • Medici Ones
    Medici Ones
    Документ22 страницы
    Medici Ones
    Alba Rebeca Velasquez Fernandez
    Оценок пока нет
  • Central Eólica
    Central Eólica
    Документ14 страниц
    Central Eólica
    Alba Rebeca Velasquez Fernandez
    Оценок пока нет
  • Hola
    Hola
    Документ1 страница
    Hola
    Alba Rebeca Velasquez Fernandez
    Оценок пока нет
  • Fpga A2 2004
    Fpga A2 2004
    Документ8 страниц
    Fpga A2 2004
    Cayo B. Leal
    Оценок пока нет
  • FPGAs
    FPGAs
    Документ19 страниц
    FPGAs
    Alba Rebeca Velasquez Fernandez
    Оценок пока нет
  • Cualquier Archivo
    Cualquier Archivo
    Документ1 страница
    Cualquier Archivo
    Alba Rebeca Velasquez Fernandez
    Оценок пока нет
  • Taller N°1
    Taller N°1
    Документ4 страницы
    Taller N°1
    Brando Hernandez
    Оценок пока нет
  • SDR 2e PDF
    SDR 2e PDF
    Документ15 страниц
    SDR 2e PDF
    Daniel
    Оценок пока нет
  • Instalar DNS Con Bind9
    Instalar DNS Con Bind9
    Документ6 страниц
    Instalar DNS Con Bind9
    Sara Padilla
    Оценок пока нет
  • Tarea 5 Uasd Virtual
    Tarea 5 Uasd Virtual
    Документ29 страниц
    Tarea 5 Uasd Virtual
    elcoqueticoclasico
    Оценок пока нет
  • Ataques Redes Datos IPv 6
    Ataques Redes Datos IPv 6
    Документ13 страниц
    Ataques Redes Datos IPv 6
    Joel Paucar
    Оценок пока нет
  • Programacion en Java
    Programacion en Java
    Документ639 страниц
    Programacion en Java
    jose-alamo-7352
    75% (4)
  • Ipv 4
    Ipv 4
    Документ7 страниц
    Ipv 4
    Saray
    Оценок пока нет
  • Normas IEEE
    Normas IEEE
    Документ3 страницы
    Normas IEEE
    Galo
    Оценок пока нет
  • ANOTACIONES
    ANOTACIONES
    Документ9 страниц
    ANOTACIONES
    Asia Lisbeth Del Jesús Casilla
    Оценок пока нет
  • Sistemas Operativos Practica Win7
    Sistemas Operativos Practica Win7
    Документ5 страниц
    Sistemas Operativos Practica Win7
    Mari Cabadilla
    Оценок пока нет
  • Tarea 8
    Tarea 8
    Документ6 страниц
    Tarea 8
    heidy
    Оценок пока нет
  • Envenenamiento Tablas ARP
    Envenenamiento Tablas ARP
    Документ23 страницы
    Envenenamiento Tablas ARP
    Boris Jacksom
    Оценок пока нет
  • Manual de Usuario Inside
    Manual de Usuario Inside
    Документ81 страница
    Manual de Usuario Inside
    nenus1
    Оценок пока нет
  • Configurar DHCP
    Configurar DHCP
    Документ5 страниц
    Configurar DHCP
    ed77777777
    Оценок пока нет
  • Ejercicio 2 para Timer0 Pic16f84
    Ejercicio 2 para Timer0 Pic16f84
    Документ2 страницы
    Ejercicio 2 para Timer0 Pic16f84
    IJGU
    Оценок пока нет
  • PCQ
    PCQ
    Документ2 страницы
    PCQ
    Percy Bernuy
    Оценок пока нет
  • Arc SDE
    Arc SDE
    Документ3 страницы
    Arc SDE
    Jean Asencios
    Оценок пока нет
  • Convertir A AVI (U Otros Formatos) Sin Perder Calidad - Taringa!
    Convertir A AVI (U Otros Formatos) Sin Perder Calidad - Taringa!
    Документ4 страницы
    Convertir A AVI (U Otros Formatos) Sin Perder Calidad - Taringa!
    angel6459
    Оценок пока нет
  • Articulo IEEE Riesgos Amenzas y Vulnerabilidades de Los Sistemas de Informacion Geografica
    Articulo IEEE Riesgos Amenzas y Vulnerabilidades de Los Sistemas de Informacion Geografica
    Документ8 страниц
    Articulo IEEE Riesgos Amenzas y Vulnerabilidades de Los Sistemas de Informacion Geografica
    ZULY GALLARDO
    Оценок пока нет
  • Dhis2 User Manual Es
    Dhis2 User Manual Es
    Документ220 страниц
    Dhis2 User Manual Es
    Los Rog
    Оценок пока нет
  • Léame de Adobe Premiere Pro CS5.5
    Léame de Adobe Premiere Pro CS5.5
    Документ9 страниц
    Léame de Adobe Premiere Pro CS5.5
    Silviu Mertic
    Оценок пока нет
  • Satelites Matlab
    Satelites Matlab
    Документ2 страницы
    Satelites Matlab
    Grecia Shina Lovón Chislla
    Оценок пока нет
  • Ccancce Raqui
    Ccancce Raqui
    Документ7 страниц
    Ccancce Raqui
    Marsell Cuya Dianderas
    Оценок пока нет
  • Tarea 7
    Tarea 7
    Документ3 страницы
    Tarea 7
    KelvinAlonso
    Оценок пока нет
  • Trabajo Con Normas de Icontec
    Trabajo Con Normas de Icontec
    Документ16 страниц
    Trabajo Con Normas de Icontec
    ancaromago
    100% (1)
  • Mblock
    Mblock
    Документ10 страниц
    Mblock
    An Liz
    Оценок пока нет
  • 00tutorial de Instalación Rockwell
    00tutorial de Instalación Rockwell
    Документ16 страниц
    00tutorial de Instalación Rockwell
    Kenny Allyorimi Avila Corrales
    Оценок пока нет
  • Conexion Ethernet Por UDP Entre SIEMENS
    Conexion Ethernet Por UDP Entre SIEMENS
    Документ6 страниц
    Conexion Ethernet Por UDP Entre SIEMENS
    Daniel Ayala Quintero
    Оценок пока нет
  • Trabajo de Investigacion
    Trabajo de Investigacion
    Документ5 страниц
    Trabajo de Investigacion
    Anyelys Torres
    Оценок пока нет
  • WEB 2.0 - Outlook
    WEB 2.0 - Outlook
    Документ6 страниц
    WEB 2.0 - Outlook
    Liseth Osorio Gutierrez
    Оценок пока нет