FPGA : Tu billete al mundo de la programación Hardware.

Table of contents
- 1.Introducción a las FPGA , ¿qué son las FPGA?
- 4.Importancia de los FPGA en Áreas como la Inteligencia Artificial
- 5.Lenguajes de descripción de hardware (HDL): Verilog y VHDL.
- 6.Recursos para profundizar en su aprendizaje.
- No te olvides de suscribirte al newsletter si quieres estar al tanto de mis nuevos articulos :)

Introducción a las FPGA , ¿qué son las FPGA?
Arquitectura y Programación de las FPGA.
Diferencias entre las FPGA y los microcontroladores.
Importancia de los FPGA en Áreas como la Inteligencia Artificial
Lenguajes de descripción de hardware (HDL)Verilog y VHDL:
Recursos para profundizar en su aprendizaje.
1.Introducción a las FPGA , ¿qué son las FPGA?
Antes de todo, lo primero es lo primero..**¿**que demonios significan esas siglas de FPGA? "Field-Programmable Gate Arrays" (Arreglo o Matrices de Puertas Programables en Campo en spanish), su nombre a pesar de asustarnos tanto indica que son en palabras muy muy simples bloques logicos programables.
El kit de la cuestion y su gran auge y poder radica principalmente en dos aspectos:
1. Sus millones de transistores.
2. Su capacidad de modificarse despues de haber sido fabricados.Es decir, dicho de otra manera, es un chip en blanco donde tú puedes «escribir».
A diferencia de las CPU, que tienen un hardware fijo, los FPGA pueden procesar grandes cantidades de datos en paralelo, lo que proporciona mejoras significativas en el rendimiento para funciones altamente paralelizables. Su increíble versatilidad te permite usarlas como mini-computadoras de las cuales tú eres el arquitecto y puedes disenar y decorar a tu gusto.
2.Arquitectura y Programación de las FPGA.
La arquitectura de la FPGA es logica y estructural, lo que hace que se puedan personalizar al gusto del programador o cliente final y asi poder realizar las tareas requeridas. La mayoría suelen tener en común estos componentes clave:
-Matriz de Lógica Programable (PLC - Programmable Logic Array).
-Bloques de Memoria (RAM/ROM).
-Interconexiones Programables.
-Entradas/Salidas (I/O).
-Bloques de Control y Enrutamiento.
En artículos futuros del blog entraremos más en detalle sobre estos componentes.
Para programar un FPGA lo podemos hacer desde nuestro sistema operativo favorito, como GNU/Linux, Windows y MacOS, aunque ciertamente existen más entornos de desarollo para Windows. Normalmente, las mismas compañías que fabrican el FPGA suelen darnos un IDE con el que trabajar y donde encontrar todas las herramientas que necesitas en un mismo paquete de software.
Obviamente necesitarás el chip o placa FPGA y el cable o programador necesario con el que podrás conectar el FPGA a tu PC para pasar el código escrito al FPGA y así que quede programado. Es algo muy parecido a lo que hacemos con los microcontroladores, grabando el programa en la memoria programable del microcontrolador.
Solo que en el caso del FPGA lo que tenemos es una matriz o array de componentes elementales como celdas de memoria, compuertas AND, OR, NOT, Flip-flops, y otros elementos o bloques básicos de electrónica digital que podemos usar. Con el programa escrito lo que vamos a hacer es imponer la forma en que esos bloques esenciales se van a agrupar para formar el cirucito que queremos, como por ejemplo una ALU.
Es decir, si programamos un modulo UART en nuestro IDE, los bloques necesarios para implementar este sumador se van a enlazar de la forma correcta dentro del FPGA para que el chip funcione como un UART.
Tambien en la programacion de las FPGA podemos usar kits universitarios como el que yo he estado usando:
En este kit por ejemplo vemos que el programador esta ya incluido y nos facilita mucho las cosas,muchas veces los programadores no queremos estar preocupandonos de si el cable funciona y demas .. y kits como este nos facilitan toso mucho. Vemos tambien los perifericos que incluye como una matriz de numeros, pantallas, DAC , sensores de temperaturas, botones y un largo etc..
3.Diferencias entre una las FPGA y los microcontroladores.
3 DIFERENCIAS CLAVE:
Flexibilidad y Programación: Las FPGA son altamente programables y permiten al usuario diseñar circuitos lógicos personalizados utilizando lenguajes de descripción de hardware (HDL) como VHDL o Verilog. Pero sin embargo los microcontroladores tienen un conjunto de instrucciones fijo y se programan en lenguajes de alto nivel como los son C del que tenemos un articulo en el este blog o ensamblador. Son bastante menos flexibles en términos de diseño de hardware, pero son más fáciles de programar para tareas específicas.
Rendimientos : En las FPGA nos encontramos con que nos dan un rendimiento excepcional en aplicaciones que requieren un procesamiento masivamente realizado en paralelo, como el procesamiento de señales en tiempo real o el calculo de diferentes algoritmos. Los microcontroladores son adecuados para tareas de control en tiempo real sencillas y aplicaciones simples. Tienen un rendimiento más modesto en comparación con las FPGA y no son ideales para tareas intensivas en cálculos.
Costo : Las FPGA son mas caras que los microcontroladores y dependiendo de la capacidad o caracteristicas pueden llegar a los cientos de euros. En los microcontroladores sin embargo nos encontramos lo contrario podemos ver placas de desarrollo de menos de 10 euros.
4.Importancia de los FPGA en Áreas como la Inteligencia Artificial
Los FPGA tienen un papel muy importanteen el campo de la Inteligencia Artificial (IA) por a su flexibilidad, capacidad de procesar en paralelo y su facil adaptabilidad .
Cuando implementamos los algoritmos de Inteligencia Artifical, como lo son las redes neuronales nos encontramos con la problematica de que necesitan una cantidad inmesas de calculos, debido a la versatilidad de nuestras FPGA podemos programarlas para que nos aceleren estos calculos,inmediatamente nos damos cuenta de lo valioso que puede ser esto en aplicaciones de tiempo real.
Otro punto importante es Eficiencia Energética. Las FPGA son conocidas por su eficiencia energética, ya que permiten una optimización precisa de los recursos de hardware. En aplicaciones de IA, donde la energía es un recurso importante, los FPGA pueden llevar a cabo tareas de procesamiento intensivo de datos con un consumo de energía más bajo en comparación con las CPU o microcontroladores.
5.Lenguajes de descripción de hardware (HDL): Verilog y VHDL.
El Lenguaje de Descripción de Hardware (HDL) describe la forma estructural de un circuito digital. Estos lenguajes pueden simular circuitos digitales, lo que permite a los diseñadores analizar las respuestas del circuito antes de su fabricación. Además, tanto Verilog como VHDL se utilizan para formular circuitos digitales con el fin de producir sistemas basados en ASIC o FPGA. Los mas usados son VERILOG y VHDL y nos centraremos en ellos.
Verilog: se desarrolló inicialmente a finales de la década de 1980 por Gateway Design Automation como un lenguaje propietario para simular y verificar circuitos digitales. Fue uno de los primeros lenguajes de descripción de hardware desarrollados entre 1983 y 1984. Su sintaxis esta basada en el lenguaje de programacion C.
Modulo Verilog implementando 2-input AND gate:
module and_gate ( input wire a, input wire b, output wire y ); assign y = a & b; endmodule
VHDL, que significa Lenguaje de Descripción de Hardware para Circuitos Integrados de Muy Alta Velocidad (VHSIC), se desarrolló a principios de la década de 1980 por el Departamento de Defensa de los Estados Unidos (DoD) como parte del programa VHSIC. El objetivo principal del programa era crear un lenguaje estandarizado para el diseño y la verificación de sistemas digitales, especialmente para aplicaciones militares. VHDL se diseñó para ser un lenguaje potente, flexible y portable que pudiera representar con precisión sistemas digitales complejos a varios niveles de abstracción.
VHDL implementando 2-input AND gate:
entity and_gate is port ( a : in bit; b : in bit; y : out bit ); end entity and_gate; architecture behavior of and_gate is begin y <= a and b; end architecture behavior;
6.Recursos para profundizar en su aprendizaje.
Una imagen vale mas que mil palabras :
Aunque la programación requiera una gran base de conocimientos fundamentales, como lo son la electrónica digital y el conocimiento interno de los circuitos y su funcionamiento, también deberemos adentrarnos en el aprendizaje de los lenguajes de descripción de hardware y el uso de las herramientas de desarrollo de estos. No debe intimidarnos ni muchisimo menos ya que el dominio de estos conocimientos puede brindarnos innumerables oportunidades laborales y, por tanto, económicas. Cada día, la necesidad de programadores y expertos en esta área crece, ya que se están llevando a cabo miles de proyectos. No se concibe un auge en los avances en la programación digital sin el desarrollo de las FPGA.
Tambien me gustaria recomendarles un último libro: FPGA Programming for Beginners: Bring your ideas to life by creating hardware designs and electronic circuits with System Verilog
No te olvides de suscribirte al newsletter si quieres estar al tanto de mis nuevos articulos :)
Subscribe to my newsletter
Read articles from Hakim Epea Silochi directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Hakim Epea Silochi
Hakim Epea Silochi
Thank you for visiting my profile! Here is a short summary of me: Mi nombre es mi nombre es Hakim E.Silochi actualmente estudiante de Ingeniería Electrónica de la Información en mi último año en la Nanjing University of Information Science and Technology(NUIST) ,en China. Además, simultáneamente estoy cursando un máster en Ciberseguridad y Ciberdefensa, enfocándome en ampliar mis conocimientos en esta área crucial. Mi pasión por la tecnología se refleja especialmente en los sistemas embebidos, donde encuentro fascinación en cada detalle. Asimismo, la seguridad de la información es un campo que me motiva constantemente, buscando contribuir al fortalecimiento de este aspecto crucial en la era digital. Estoy abierto a oportunidades de colaboración y dispuesto a aportar mi experiencia y conocimientos. Pueden ponerse en contacto conmigo a través de : E-mail: hakimepeasilochi@gmail.com LinkedIn: Hakim Epea Silochi