1 Fpga
1 Fpga
1 Fpga
ASIC
Circuito Integrado para aplicaciones específicas (o ASIC, por sus siglas en inglés Application-
Specific Integrated Circuit) es un circuito integrado hecho a la medida para un uso en particular, en
vez de ser concebido para propósitos de uso general. Se usan para una función específica. Por
ejemplo, un chip diseñado únicamente para ser usado en un teléfono móvil es un ASIC. Por otro
lado, los circuitos integrados de la serie 74XX son circuitos lógicos (combinacionales o secuenciales)
que se pueden utilizar para una multiplicidad de aplicaciones. En un lugar intermedio entre los ASIC
y los productos de propósito general están los productos estándar para aplicaciones específicas, o
ASSP por sus siglas en inglés.
Con los avances en la miniaturización y en las herramientas de diseño, la complejidad máxima, y por
ende la funcionalidad, un ASIC ha crecido desde 5.000 puertas lógicas a más de 100 millones. Los
ASIC modernos a menudo incluyen procesadores de 32-bit, bloques de memoria
RAM, ROM, EEPROM y Flash, así como otros tipos de módulos. Este tipo de ASIC frecuentemente
es llamado sistema en chip, o SoC, por sus siglas en inglés. Los diseñadores de ASIC digitales
usan lenguajes descriptores de hardware (HDL), tales como Verilog o VHDL, para describir la
funcionalidad de estos dispositivos.
Las FPGA (Field Programmable Gate Arrays, matriz de puertas programables) son la versión
moderna de los prototipos con puertas lógicas de la serie 7400 contienen bloques de lógica
programable e interconexiones programables que permiten a un modelo de FPGA ser usada en
muchas aplicaciones distintas. Para los diseños más pequeños o con volúmenes de producción más
bajos, las FPGA pueden tener un costo menor que un diseño equivalente basado en ASIC, debido a
que el costo fijo (el costo para preparar una línea de producción para que fabrique un ASIC en
particular), es muy alto, especialmente en las tecnologías más densas, más de un millón de dólares
para una tecnología de 90nm o menor.
FPGA
( Field Programmable Gate Array) es un dispositivo semiconductor que contiene bloques de lógica
cuya interconexión y funcionalidad puede ser configurada 'in situ' 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 se utilizan en aplicaciones similares a los ASICs sin embargo son más lentas, tienen un
mayor consumo de potencia y no pueden abarcar sistemas tan complejos como ellos. A pesar de
esto, las FPGAs tienen las ventajas de ser reprogramables (lo que añade una enorme flexibilidad al
flujo de diseño), sus costes de desarrollo y adquisición son mucho menores para pequeñas
cantidades de dispositivos y el tiempo de desarrollo es también menor.
Ciertos fabricantes cuentan con FPGAs que sólo se pueden programar una vez, por lo que sus
ventajas e inconvenientes se encuentran a medio camino entre los ASICs y las FPGAs
reprogramables.
Históricamente las FPGA surgen como una evolución de los conceptos desarrollados en las PAL y
los CPLD.
Las FPGAs fueron inventadas en el año 1984 por Ross Freeman y Bernard Vonderschmitt, co-
fundadores de Xilinx, y surgen como una evolución de los CPLDs.
CPLD
Tanto los CPLDs como las FPGAs contienen un gran número de elementos lógicos programables. Si
medimos la densidad de los elementos lógicos programables en puertas lógicas equivalentes
(número de puertas NAND equivalentes que podríamos programar en un dispositivo) podríamos
decir que en un CPLD hallaríamos del orden de decenas de miles de puertas lógicas equivalentes y
en una FPGA del orden de cientos de miles hasta millones de ellas.
Aparte de las diferencias en densidad entre ambos tipos de dispositivos, la diferencia fundamental
entre las FPGAs y los CPLDs es su arquitectura. La arquitectura de los CPLDs es más rígida y
consiste en una o más sumas de productos programables cuyos resultados van a parar a un número
reducido de biestables síncronos (también denominados flip-flops). La arquitectura de las FPGAs,
por otro lado, se basa en un gran número de pequeños bloques utilizados para reproducir sencillas
operaciones lógicas, que cuentan a su vez con biestables síncronos. La enorme libertad disponible
en la interconexion de dichos bloques confiere a las FPGAs una gran flexibilidad.
Otra diferencia importante entre FPGAs y CPLDs es que en la mayoría de las FPGAs se pueden
encontrar funciones de alto nivel (como sumadores y multiplicadores) embebidas en la propia matriz
de interconexiones, así como bloques de memoria.
Historia
Las FPGA son el resultado de la convergencia de dos tecnologías diferentes, los dispositivos lógicos
programables PLDs y los circuitos integrados de aplicación específica ASIC. La historia de
los PLDs comenzó con los primeros dispositivos PROM (Programmable Read-Only Memory) y se les
añadió versatilidad con los PAL (Programmable Array Logic) que permitieron un mayor número de
entradas y la inclusión de registros. Esos dispositivos han continuado creciendo en tamaño y
potencia. Mientras, los ASIC siempre han sido potentes dispositivos, pero su uso ha requerido
tradicionalmente una considerable inversión tanto de tiempo como de dinero. Intentos de reducir esta
carga han provenido de la modularización de los elementos de los circuitos, como los ASIC basados
en celdas, y de la estandarización de las máscaras. El paso final era combinar las dos estrategias
con un mecanismo de interconexión que pudiese programarse utilizando fusibles, antifusibles o
celdas RAM, como los innovadores dispositivos Xilinx de mediados de los 80. Los circuitos
resultantes son similares en capacidad y aplicaciones a los PLDs más grandes. Además de en
computación reconfigurable, las FPGAs se utilizan en controladores, codificadores/decodificadores y
en el prototipado de circuitos VLSI y microprocesadores a medida.
El primer fabricante de estos dispositivos fue Xilinx [2] y los dispositivos de Xilinx se mantienen como
uno de los más populares en compañías y grupos de investigación. Otros vendedores en este
mercado son Atmel, Altera, AMD y Motorola.
Características
Una jerarquía de interconexiones programables permite a los bloques lógicos de un FPGA ser
interconectados según la necesidad del diseñador del sistema, algo parecido a un breadboard (es
una placa de uso genérico reutilizable o semi permanente) programable. Estos bloques lógicos e
interconexiones pueden ser programados después del proceso de manufactura por el
usuario/diseñador, así que el FPGA puede desempeñar cualquier función lógica necesaria.
Una tendencia reciente ha sido combinar los bloques lógicos e interconexiones de los FPGA con
microprocesadores y periféricos relacionados para formar un «Sistema programable en un chip».
Ejemplo de tales tecnologías híbridas pueden ser encontradas en los dispositivos Virtex-II PRO y
Virtex-4 de Xilinx, los cuales incluyen uno o más procesadores PowerPC embebidos junto con la
lógica del FPGA. El FPSLIC de Atmel es otro dispositivo similar, el cual usa un procesador AVR en
combinación con la arquitectura lógica programable de Atmel. Otra alternativa es hacer uso de
núcleos de procesadores implementados haciendo uso de la lógica del FPGA. Esos núcleos incluyen
los procesadores MicroBlaze y PicoBlaze de Xlinx, Nios y Nios II de Altera, y los procesadores
de código abierto LatticeMicro32 y LatticeMicro8.
Muchos FPGA modernos soportan la reconfiguración parcial del sistema, permitiendo que una parte
del diseño sea reprogramada, mientras las demás partes siguen funcionando. Este es el principio de
la idea de la «computación reconfigurable», o los «sistemas reconfigurables».
Programación
La tarea del programador es definir la función lógica que realizará cada uno de los CLB, seleccionar
el modo de trabajo de cada IOB e interconectarlos.
El diseñador cuenta con la ayuda de entornos de desarrollo especializados en el diseño de sistemas
a implementarse en un FPGA. Un diseño puede ser capturado ya sea como esquemático, o
haciendo uso de un lenguaje de programación especial. Estos lenguajes de programación especiales
son conocidos como HDL o Hardware Description Language (lenguajes de descripción de hardware).
Los HDLs más utilizados son:
VHDL
Verilog
ABEL
En un intento de reducir la complejidad y el tiempo de desarrollo en fases de prototipaje rápido, y
para validar un diseño en HDL, existen varias propuestas y niveles de abstracción del diseño. Entre
otras, National Instruments LabVIEW FPGA propone un acercamiento de programación gráfica de
alto nivel.
Aplicaciones
Cualquier circuito de aplicación específica puede ser implementado en un FPGA, siempre y cuando
esta disponga de los recursos necesarios. Las aplicaciones donde más comúnmente se utilizan los
FPGA incluyen a los DSP (procesamiento digital de señales), radio definido por software, sistemas
aeroespaciales y de defensa, prototipos de ASICs, sistemas de imágenes para medicina, sistemas
de visión para computadoras, reconocimiento de voz, bioinformática, emulación de hardware de
computadora, entre otras. Cabe notar que su uso en otras áreas es cada vez mayor, sobre todo en
aquellas aplicaciones que requieren un alto grado de paralelismo.
Existe código fuente disponible (bajo licencia GNU GPL)1 de sistemas
como microprocesadores, microcontroladores, filtros, módulos de comunicaciones y memorias, entre
otros. Estos códigos se llaman cores.
Enlaces externos
Altium Designer - Utilidad de diseño de Altera, Xilinx, Actel, y otras familias FPGA/CPLD
Quartus - Utilidad de diseño para los dispositivos Altera
ISE - Utilidad de diseño para los dispositivos Xilinx
ispLEVER - Paquete de aplicaciones para los dispositivos Lattice
LogicSim - Herramienta de simulación FPGA
ModelSim - Simulador de diferentes lenguajes de programación hardware HDL/Verilog
Synplify - Herramienta de síntesis FPGA
ALGO DE HISTORIA
DISPOSITIVOS PLD
SISTEMA DE MEMORIA
Lecture_HS.pdf :
NOTA:
LUT Una LUT, que significa LookUp Table, en términos generales es básicamente una tabla que
determina cuál es el resultado para cualquier entrada (s) dada
En otras palabras, cualquier comportamiento que se obtiene al interconectar cualquier número de
puertas (como AND, NOR, etc.), sin rutas de retroalimentación (para asegurar que no tenga estado),
puede implementarse mediante una LUT.
La forma en que los FPGA normalmente implementan la lógica combinatoria es con los LUT, y
cuando el FPGA se configura, simplemente llena los valores de salida de la tabla, que se denominan
"LUT-Mask", y está compuesto físicamente de bits SRAM. Por lo tanto, la misma LUT física puede
implementar Y = AB y Y = AB ', pero la LUT-Mask es diferente, ya que la tabla de verdad es
diferente.
También puedes crear tus propias tablas de búsqueda. Por ejemplo, podría construir una tabla para
una función matemática compleja, que funcionaría mucho más rápido que en realidad calcular el
valor siguiendo un algoritmo. Esta tabla se almacenaría en RAM o ROM.
Esto nos lleva a ver las LUT simplemente como memoria, donde las entradas son la dirección y las
salidas correspondientes son los datos almacenados en la dirección dada.
LUT (Look-Up Table) is a small asynchronous SRAM that is used to implement combinational logic, while
FF (Flip-Flop) is a single-bit memory cell used to hold state.
LUTs are usually read-only and their content can only be changed during FPGA configuration. But in
Xilinx FPGAs afaik usually half of LUTs can actually be written to, so they can be used to implement many
small RAMs (so-called "distributed RAM"). Flip-flops can be written to and in fact, it is their main purpose.
Flip-flop value can be accessed directly and can be routed to any place you want, while reading LUT
content requires an address, so you can only access a single stored bit at a time. Because of this LUTs
can store more than flip-flops.
Una LUT de dos entradas (tabla de búsqueda) se puede representar genéricamente de esta manera:
MODELO NEXYS 2 (Disponible en el laboratorio de la UAN Neiva)
Familias de dispositivos
CPLDs
Quartus II
Quartus II Edición Web
SOPC Builder
DSP Builder
MAX+PLUS II
MAX+PLUS II BASELINE
FPGA en el mundo de Arduino:
Por Steve Leibson
Colaboración de Editores de Digi-Key de América del Norte
2019-05-01
Los arreglos programables de puertas en campo (FPGA) proporcionan una manera de resolver
problemas de diseño integrado en tiempo real con hardware cuando el firmware que se ejecute en un
microcontrolador o microprocesador sea demasiado lento. También permiten la flexibilidad periférica.
Sin embargo, el uso de FPGA ha significado aprender nuevos lenguajes de programación
(generalmente Verilog o VHDL), aprender un flujo de desarrollo completamente nuevo para generar
flujos de bits de FPGA y posiblemente gastar una cantidad significativa de dinero en una placa de
desarrollo de FPGA.
Debido a estos obstáculos, muchos ingenieros de diseño están reacios a utilizar los FPGA,
aunque sean una herramienta muy útil en la caja de herramientas de diseño. Para superar esta
reticencia, algunos proveedores están trabajando arduamente para acortar la curva de
aprendizaje de FPGA. Por ejemplo, Arduino introdujo la placa de desarrollo de FPGA
Arduino ABX00022 MKR Vidor 4000 (consulte, "Aplicar FPGA rápida y fácilmente con Arduino MKR
Vidor 4000"). El Arduino MKR Vidor 4000 agrega una manera de programar el FPGA que se integra
perfectamente con el muy popular entorno completo de desarrollo integrado (IDE) de Arduino al
mismo tiempo que obtiene un rendimiento de nivel FPGA mediante el uso de extensiones de
biblioteca especiales de Arduino.
Ahora, existe una nueva alternativa a las ofertas anteriores, incluida la placa Arduino MKR
Vidor 4000. Alorium Technology ha desarrollado una forma algo diferente de agregar el rendimiento
de FPGA al mundo del desarrollo integrado de Arduino. El enfoque de Alorium proporciona tanto
bloques IP preconfigurados para la aceleración E/S, así como bloques IP de diseño personalizado.
Este artículo analizará brevemente las formas tradicionales de usar los FPGA. Luego, analizará en
profundidad los módulos de FPGA de AloriumXLR8R22M08V5U0DI y
Snō SNOR20M16V3 compatibles con Arduino. El artículo mostrará cómo Alorium ha agregado su
propio giro al utilizar los FPGA en el continuo de Arduino tanto para utilizar una IP preconfigurada
como para crear una IP personalizada, y cómo los diseñadores pueden comenzar a aplicar los
módulos de FPGA.
A medida que los usuarios de Arduino han continuado impulsando la arquitectura original de Arduino
en aplicaciones más complejas, se han encontrado con problemas de rendimiento. Parte del
problema de rendimiento ha sido la arquitectura simple de 8-bit del microcontrolador Arduino original.
Otra parte del problema es la forma en que el sistema de software de Arduino implementa muchos
periféricos en tiempo real que utilizan software cuando el microcontrolador integrado de Arduino no
tiene un bloque de hardware equivalente.
Una forma de abordar este problema de rendimiento es mediante el uso de microcontroladores más
potentes, pero todavía hay mucho que el software puede hacer en un entorno de tiempo real.
Algunos periféricos de alta velocidad en tiempo real simplemente deben implementarse en el
hardware. También es posible especificar microcontroladores con más periféricos de hardware, pero
la combinación correcta de periféricos varía de un proyecto a otro.
Al poner el hardware programable a disposición del diseñador integrado, los FPGA pueden satisfacer
la necesidad de una combinación de periféricos que varíe de un proyecto a otro. Una forma de
agregar la funcionalidad de FPGA a una placa de microcontrolador integrada es simplemente
agregar un FPGA a un diseño existente. Ese es el enfoque que Arduino adoptó cuando diseñó
la placa Arduino MKR Vidor 4000. La placa combina el microcontrolador de baja
potencia ATSAMD21G18A-AUT SAMD21 de Microchip Technology basada en Arm® Cortex®-
M0+ 32-bit con FPGA Intel Cyclone 10 10CL016YU484C6G.
Puertos I2C
Puertos de interfaz periférica serial (SPI)
Transmisores Receptores Asíncronos Universales (UART)
Controladores de modulación por ancho de pulsos (PWM) de alta frecuencia
Temporizadores de alta velocidad
Codificadores en cuadratura de alta velocidad
Controlador LED inteligente RGB direccionable Neopixel de Adafruit Industries