FPGA: Bienvenido a la otra dimensión…

Qué es una FPGASe acabó el verano: entre festivales, piscinas y Pokémon Go se ha pasado. Bueno, que yo no he hecho nada de eso pero es lo que la gente común suele hacer. De hecho, yo en estos días he hecho poca cosa, me he dedicado a vaguear por el mundo.

Pero eso sí, me ha dado tiempo a encontrar la luz. He visto el camino a seguir. He entrado en una realidad paralela en el mundo de la electrónica. A ese mundo lo llaman FPGA. T quiero hablarte de ello, pero de una forma introductoria… que yo aún soy un novato en esto 🙁

Las FPGA son placas, como Arduino, pero aún se trabaja a un nivel inferior. Si Raspberry Pi es un ordenador y lleva muchos procesos a la vez y luego tenemos el microcontrolador Arduino que va un poco más justo, la FPGA se olvida de intermediarios: todo lo que se hace es a nivel electrónico. Se simulan los circuitos electrónicos dentro de la placa.

Creo que no me estoy explicando, voy a ir más al grano. ¿Te acuerdas de aquello que conté de las puertas lógicas? Pues son pequeñas cajas negras, como chips que cada uno tienen en su interior una cosa. Las FPGA lo que te permiten es ahorrar en componentes pudiendo programar estas puertas lógicas. Sí sí, en las FPGAs programas hardware…. Díficil de digerir eh…

Ahora ya no tienes un código en el lenguaje del microcontrolador, sino que tienes centenares de componentes digitales que programar, que moldearás para conseguir aquello que buscas.

Verilog vs VHDL, programando FPGAs

Vale, vamos a darle duro. El tema es aprender el lenguaje de programación que utilizan este tipo de placas. Resulta que hay dos: Verilog y VHDL. Cada uno tiene su rollo. Dicen que VHDL es más rígido y te va a permitir hacer menos errores pero también dicen que Verilog es más similar a C.

Al final yo he elegido el que utilizaban las personas de mi alrededor. La razón es sencilla, siendo lo mismo… ¿Para qué complicarme en ir a contracorriente si pueden ayudarme cuando me bloquee? En tu caso, fíjate en el que te interesa para tu empresa, el que se utiliza más en tu país (No me olvido de los latinos 😉 ) o simplemente el que más te motive. Yo al final me decanté por Verilog, aunque buscando información parece que VHDL está más de moda…

Nada, que hagas lo que te dé la real gana.

Lo que sí que hay que tener en cuenta son una serie de detalles, ya que además de aprender la nomenclatura de cómo se utilizan las cosas en el lenguaje hay que entender que no es un lenguaje secuencial. Qué técnico me pongo cuando quiero… nada, quiero decir que no es un lenguaje que una orden sigue a otra como es en C. Cuando programas en Arduino primero va el setup() y luego el loop() y dentro de cada uno hay una serie de instrucciones que van una detrás de otra. Aquí no.

Aquí lo que pasa es que sí que hay instrucciones que siguen un orden pero pueden haber cosas que funcionan a la vez. Si yo he programado dos cajas AND, por ejemplo, al iniciar el programa se pondrán a funcionar las dos a la vez. Esto para los novatos es un jaleo fino fino de entender.

Además de funcionar a la vez el encenderse es una cosa inmediata, no hay esperas ni nada, es totalmente simultáneo. Eso de pensar en paralelo es una cosa que cuesta. Ya te acostumbrarás. Mientras tanto yo he encontrado estos documentos dónde puedes aprender Verilog: Tutorial en pdf, Wiki.

Vivado como modo de vida

Otro modo que hay de programar esto es el gráfico. Aunque lo de gráfico suena bien, a día de hoy sigo pegándome con el programa dichoso que consigue esto. Los hay libres pero mi placa es un poco rarita y solo acepta un programa de Xilinx llamado Vivado. Bueno pues el Vivado este es el dolor de cabeza más grande de el mundo.

En lugar de tener una filosofía Linux en el que hay pequeñas herramientas que sirven para una cosa y solo una, Vivado lo tiene todo mezclado, es un mega-programa en el que perderse es lo más normal. Y si te cuento que a veces sintetizando (luego llegamos a eso) da errores cuando es en Linux pero no en Windows por el compilador que utiliza en cada sistema operativo… ya te quedas de plástico.

La verdad es que es bastante complicado pero bueno, la base de todo es elegir al inicio el modelo de tu FPGA y empezar a añadir bloques, lo que el programa llama IP’s. Con estas IP’s hacer las conexiones de lo que quieres crear. Tal vez quieras poner solamente unas puertas lógicas (AND, OR,…) o quieras meterle memoria RAM y miles de cosas.

Claro, no ibas tu a ponerte a programar una memoria RAM, eso lo tiene el programa ya incluido. Pero vamos… es una locura. Si aun así te quedan ganas de probar te explico los pasos que debes de dar para compilar el dichosos programa. Ya sé que estos pasos iniciales los he pasado un poco rápido pero es que no es cosa de un post cutre, necesita su tiempo de digerir y yo ya estoy empachado de tantos bloques…

Una vez con esto se llegan a los tres pasos que ofrece el programa: sintetizar, implementar el diseño y generar el bitstream. El primero es como el paso inicial, se preparan los recursos que se van a conectar y tal. Es en la implementación del diseño dónde ya se hace todo, cada elemento se dispone dentro de la fpga, en cada uno de sus pines ( sí sí, hay un archivo llamado top que se encarga de decir qué pin está conectado en qué… lo que yo te decía, una locura) y se compila el hardware. En el último paso lo que se hace es generar el programa que meteremos en la fpga a través del conector JTAG. Un conector JTAG es similar a la conexión ICSP que tienes en tu arduino pero en lugar de 6 barras se utilizan 4 o 5 (lo normal son 4) todas dispuestas de manera horizontal, no en dos filas como sl ICSP de Arduino…. ¿A qué esperas para buscar el ISCP en tu Arduino? 😉

Opt In Image

En Alaska con bañador…

Y bueno, llegamos al final… ya sé ya sé, he ido más rápido que nunca… parezco hasta estresado. Pero es que es una cosa realmente complicada. Almenos de primeras. Poco a poco le estoy pillando el truco y ya hago cosas como PWMs y tal. Por mi parte, si quieres que amplíe alguna parte.. ¡deja un comentario y lo solucionamos!

Mientras tanto feliz vuelta de las vacaciones y tranquilo, aún queda tiempo para ponerse el bañador o el bikini 😉

[Total:5    Promedio:3.6/5]

Déjame un comentario que en el fondo soy buen chaval

  1. Migue

    Responder

    • Responder

      • Responder

        • Responder

  2. John

    Responder

    • Responder

  3. Erikcrane

    Responder

    • Responder

  4. Responder

    • Responder

Deja un comentario