Академический Документы
Профессиональный Документы
Культура Документы
1. INTRODUCCION
"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.
“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.
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.
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
ORIGENES
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
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.
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
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
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
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:
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