Esta página es la primera de una serie de cinco sobre cómo convertirse en diseñador profesional de FPGA. Empiezo con una visión general y algunos consejos sobre cómo dar los primeros pasos.
Introducción
Esta serie de páginas es para ti, que quieres aprender diseño de FPGA —y en particular si tu intención es convertirlo en tu profesión—, pero te encuentras perdido en el océano de información que hay ahí fuera. Tantos tutoriales, artículos de blog, cursos en vídeo e hilos de foro. Y a estas alturas, buena parte de ese material lo genera la IA. Es difícil distinguir lo que ha escrito alguien que conoce el camino de lo que no son más que palabras vacías con apariencia profesional.
Si estás en ese punto en el que todo lo que te dicen que tienes que aprender te supera, desde luego no eres el único. La lista de cosas que hay que dominar es realmente larga, y es difícil distinguir lo que de verdad importa de lo que solo es ruido.
No estoy aquí para decirte lo que tienes que hacer ni para darte un plan de estudios que debas seguir al pie de la letra. Lo que quiero es explicarte el propósito y la importancia de cada habilidad, para que puedas decidir por tu cuenta qué priorizar y cuándo. Ya es bastante difícil de por sí. Si puedes ahorrarte trabajo innecesario y alcanzar tu objetivo, mucho mejor.
Pero si tu único propósito es pasar una entrevista de trabajo, me temo que no puedo ayudarte mucho. Las entrevistas de trabajo son animales impredecibles. Cada entrevistador tiene su propia forma de evaluar a un candidato y, muy a menudo, lo que busca es a alguien que le recuerde a sí mismo. Al fin y al cabo, todos pensamos que somos el más listo de la sala, ¿no? Y puede que el enfoque ingenuo funcione: si vales, encontrarás trabajo.
¿Para qué se usan las FPGA?
Antes de entrar en materia con las habilidades, merece la pena detenerse un momento en qué es realmente esta profesión. ¿Qué se construye con FPGA, cómo y por qué?
Esta es la situación. Alguien necesita una placa de circuito impreso para un producto nuevo. La mayoría de los componentes de esa placa se pueden comprar en el mercado: memorias, fuentes de alimentación, conectores, etc. Pero en algún punto intermedio de toda la actividad, hay una función que ningún componente del mundo hace, al menos no exactamente como el producto la necesita. Así que decides diseñar tu propio chip. Eso es un ASIC, y es realmente, realmente caro. El ciclo de producción puede costar más que una casa y, si encuentras un error después, lo único que puedes hacer es publicar un informe de erratas. Y sacar una nueva versión pasado un tiempo, si hay justificación financiera para ello.
La alternativa a este ciclo de diseño caro y arriesgado es la FPGA. Un chip de este tipo es como un kit de electrónica sobre una pieza de silicio: contiene muchos bloques pequeños e interconexiones que no están conectados de una forma concreta. En su lugar, hay una gran cantidad de datos que contiene información sobre cómo debería comportarse la FPGA. A estos datos se les llama flujo de bits (bitstream). La información del flujo de bits configura cada pequeño bloque dentro de la FPGA y también determina cómo se conectan las interconexiones internas.
Una vez cargado el flujo de bits (bitstream) en la FPGA, tenemos algo similar a un ASIC: un chip que se comporta como si hubiéramos fabricado el silicio para nuestros propios fines. Salvo que es más lento, consume más energía y el componente en sí cuesta más que un ASIC producido en serie.
El flujo de bits (bitstream) no debe confundirse con el software. Se parecen en el sentido de que, si algo va mal, a menudo es posible corregir una línea de código y recompilar. Pero la FPGA no es un procesador. No "ejecuta" nada. Piensa en la FPGA como una enorme matriz de pequeñas máquinas lógicas, y el flujo de bits (bitstream) le dice a cada una de esas pequeñas máquinas qué debe hacer.
Resumiendo este punto: la FPGA es el ladrillo que falta en un proyecto de electrónica. Se usa donde te gustaría tener un ASIC, pero prefieres pagar más por cada componente y obtener un rendimiento menor, a fin de reducir los riesgos y costes de desarrollo. Los cuales siguen siendo altos, pero menos.
El trabajo principal del diseñador de FPGA consiste en las tareas de diseño que dan como resultado un flujo de bits (bitstream). Esto es comparable a un diseñador de software que escribe código y acaba con un binario de software ejecutable. Pero el papel del diseñador de FPGA no termina ahí ni mucho menos, ya que la FPGA forma parte de un proyecto de electrónica. De eso hablaré más adelante.
Si el proyecto requiere un procesador embebido, esa parte suele formar parte de la FPGA también. En algunos proyectos, se opta por tener el procesador como componente separado. En cualquier caso, el procesador puede realizar tareas sencillas o comportarse como un ordenador completo que ejecuta Linux u otro sistema operativo.
Ahora bien: hubo un tiempo en que se hablaba mucho de usar FPGA como coprocesadores y aceleradores hardware en centros de datos. También se hablaba de FPGA para IA. Y todavía hay empresas que tocan esa trompeta. Creo que eso siempre fue una patraña y, a estas alturas, está bastante claro que las GPU son superiores en ese terreno, sobre todo para cualquier cosa relacionada con la IA. Así que no caigas en esa trampa. La FPGA se usa como el ladrillo importante que falta en un proyecto de electrónica, a veces de un tipo muy sofisticado, pero rara vez se usa para otra cosa.
¿Por qué es difícil?
Pongámoslo así: si me veo escribiendo cinco páginas sobre lo que hace falta para ser un buen diseñador de FPGA, es que probablemente hay bastante que contar.
A los diseñadores de FPGA se les paga bien porque es una profesión complicada, y el motivo es que combina tres habilidades a la vez.
La primera habilidad es la electrónica. Al fin y al cabo, estás desarrollando algo que va montado en una PCB y tiene que comunicarse con los demás componentes de esa PCB. El proyecto incluye pines, tensiones, conectores, osciladores de reloj y un largo etcétera. La lógica que creas se comunica con componentes reales, en una placa real, con tensiones reales y temperaturas reales.
La segunda habilidad es el "software". Lo que escribes y con lo que trabajas son archivos que se parecen mucho a software: archivos Verilog, archivos de restricciones, scripts de compilación (scripts). Pero trabajar con este tipo de "software" es mucho más complicado, por motivos que comentaré más adelante. El compilador, por así decirlo, no está de tu lado como lo estaría un compilador de software, y las herramientas de depuración tampoco.
La tercera habilidad son los conocimientos relacionados con la aplicación. Como diseñador de FPGA, a menudo tienes que formarte por tu cuenta en temas avanzados relacionados con el proyecto (o que ya conoces por experiencia previa o por tus estudios). Procesado de señal, protocolos de red, protocolos de interfaz con ordenadores, estándares de codificación de datos para monitores de ordenador y una larga lista de otras disciplinas relacionadas con el producto que estás desarrollando. Siempre hay un protocolo de comunicación nuevo, un conjunto nuevo de normativas de seguridad o un componente nuevo con sus extraños requisitos de interfaz que aprender.
Pero el gran reto de ser diseñador de FPGA es este: el tema principal de especialización del proyecto suele estar muy relacionado con el propio diseño de la FPGA. Eso significa que puede que tengas que convertirte en experto en las principales tecnologías que aplica tu empresa. Ejemplos típicos son los filtros digitales como FIR e IIR, la FFT, la decimación y la interpolación; el procesado de audio y vídeo; la radio inalámbrica y la radio definida por software; el radar; la imagen médica; las redes y el procesado de paquetes; Ethernet; PCIe y USB; estándares de vídeo como HDMI, DisplayPort, SDI y MIPI, con todas sus complicaciones de sincronización de vídeo y espacio de color; y los sistemas de control. Y desde luego no acaba ahí.
No necesitas saber todo esto para llegar a ser diseñador de FPGA. Pero acabarás aprendiendo unas cuantas de estas cosas sobre la marcha. Así que, si la idea de estar aprendiendo tecnologías nuevas todo el tiempo te parece una pesadilla, yo te preguntaría: eh, ¿estás seguro de que quieres meterte en el mundo de las FPGA?
¿Tengo que ser un mago de la electrónica?
Aquí va una buena noticia, quizá: la lógica de un proyecto con FPGA puede dividirse a grandes rasgos en dos tipos, y uno de ellos no requiere ningún conocimiento de electrónica.
El primer tipo es la lógica de interfaz. Es la lógica que se comunica con componentes externos o con núcleos IP (IP cores), ya sean hard o soft. Pensemos en chips que capturan o generan señales de vídeo o de radio, chips de RAM, etcétera. Este tipo de lógica interactúa con esos componentes, y esa interfaz es donde la FPGA se encuentra con el mundo físico. Para implementar lógica de este tipo hay que entender cosas como los niveles de tensión, los presupuestos de temporización y la fluctuación temporal (jitter).
El segundo tipo es la lógica de procesado. Aquí es donde ocurren los cálculos propiamente dichos: mejora de imágenes de vídeo, filtros digitales, organización o análisis sintáctico de flujos de datos según un protocolo de red, etcétera. Este tipo de lógica suele funcionar de una de estas dos maneras. O bien lee datos de FIFOs y escribe datos en FIFOs u otros elementos de memoria, en cuyo caso podemos llamarlo proyecto de "lógica pura". O bien es síncrona con el flujo de datos, como un filtro digital que recibe muestras de una señal de radio y genera una muestra de salida por cada muestra de entrada que llega, con un retardo de segmentación (pipeline). Este último tipo suele ser más difícil de implementar, porque cada etapa tiene que seguir el ritmo del flujo.
La idea es que implementar lógica de procesado no requiere ningún conocimiento de electrónica. Da igual que sea lo que yo llamo "lógica pura" o que sea síncrona con un flujo de datos externo: todo ocurre dentro de la FPGA y el mundo exterior es irrelevante para el diseño lógico. Por eso es el camino (path) más fácil para entrar en el mundo de las FPGA. Sin embargo, hay una pega: no siempre hay mucha lógica de este tipo en un proyecto. Además, en una empresa pequeña se esperará de ti que hagas un poco de todo. No hay escapatoria.
No existe el "proyecto típico"
Si buscas descripciones de cómo se desarrolla un proyecto con FPGA, encontrarás un montón de diagramas bonitos. Tómatelos con cautela. La realidad es más desordenada, y he aquí por qué.
En primer lugar, la PCB a menudo se desarrolla antes de que esté claro qué va a hacer exactamente. Eso suena descabellado y, a veces, lo es, pero también es consecuencia de la belleza de las FPGA: la flexibilidad. Mientras el hardware no encierre esa flexibilidad bajo llave, puedes decidir más adelante qué debe hacer la placa.
En segundo lugar, las funciones del proyecto de FPGA casi siempre se desarrollan de forma gradual. Primero, una funcionalidad mínima, y luego se van añadiendo funciones con el tiempo. En parte porque los jefes suelen querer ver algo que funcione y en parte porque los requisitos tienden a cambiar continuamente. No es raro que se modifique la PCB a la par que el proyecto, para dar soporte a nuevos requisitos funcionales y para resolver errores de hardware.
En tercer lugar, es más habitual continuar un proyecto existente que empezar desde cero. Incluso los proyectos que parecen completamente nuevos suelen partir de un diseño de FPGA existente y una PCB existente, que se adaptan a los nuevos requisitos. Si esto le suena a alguien que haya trabajado en desarrollo de software, no es casualidad.
Así que puede que te encuentres con charlas sobre el "flujo típico de un proyecto de FPGA": especificación, arquitectura, RTL, simulación, síntesis, implementación, cierre de tiempos (timing closure), flujo de bits (bitstream), puesta en marcha (bring-up), verificación. O algo parecido. No quiero decir que sea una patraña absoluta, así que lo diré de esta forma: nunca he estado en un proyecto que funcionara así. Algunas de esas etapas se mezclan entre sí, otras se saltan por completo y, normalmente, todas ocurren al mismo tiempo. Lo propio de trabajar con FPGA es acostumbrarse a que todo pase en paralelo.
La conclusión es esta: en una empresa hay muchas probabilidades de que empieces añadiendo funciones a un proyecto existente. Y si ese proyecto está bien estructurado (ejem, rara vez lo está), no necesitas saberlo todo desde el primer día.
¿Cómo empiezo?
Aprender diseño de FPGA es una combinación de adquirir conocimientos teóricos y ganar soltura práctica. Tú decides si prefieres empezar trasteando con la electrónica, aprender primero la teoría o ir haciendo un poco de cada cosa durante todo el proceso. Los tres enfoques funcionan.
Sin embargo, hay algo de lo que me gustaría advertirte: ten cuidado con aprender de aficionados a las FPGA. Puede ser contraproducente, en serio. La principal dificultad de la profesión de diseñador de FPGA es conseguir un diseño fiable. A los aficionados, por lo general, eso no les importa, porque no están construyendo un producto que tenga que funcionar sobre el terreno durante diez años. Así que a menudo ofrecen un camino rápido y corto, saltándose los pequeños detalles cruciales que son necesarios para un diseño de FPGA profesional. Aprender de ellos te hará coger muy malas costumbres.
¿Cómo puedes distinguir a un aficionado de alguien de quien quieres aprender? Es difícil saber qué es correcto y qué no antes de tener los conocimientos uno mismo. Pero puedes intuirlo si quien escribe tiene la actitud meticulosa adecuada hacia el diseño de FPGA. Describo el tipo de personalidad adecuado en la última parte de esta serie.
Dicho esto, esta es mi propuesta para que te pongas manos a la obra.
Internet está lleno de proyectos de ejemplo. Normalmente lo más fácil es empezar con un proyecto de FPGA adaptado a tu placa concreta. Estos proyectos suelen existir como parte del paquete, precisamente para animarte a comprar tal o cual hardware.
Empieza con un sencillo proyecto de parpadeo de un LED. No porque los LEDs parpadeantes sean interesantes, sino porque te lleva por el primer ciclo completo de implementación y programación del flujo de bits (bitstream). Instalarás las herramientas, verás generarse un flujo de bits y verás que ocurre algo en la placa. Eso ya es un hito en sí mismo.
Después, prueba otros proyectos de ejemplo. Recuerda que el valor de un proyecto así está en lo que tú saques en claro de él y, más importante aún, en tu capacidad de hacer cambios significativos en el proyecto y ver qué pasa. Un proyecto que no puedes modificar es un proyecto del que no has aprendido nada.
A este respecto, cuidado con los proyectos de demostración del fabricante que vienen con una larga ristra de instrucciones: haz clic aquí, haz clic allá y, al final, la placa hace algo impresionante. Si no has entendido nada por el camino y el proyecto es demasiado complicado para que lo comprendas y lo modifiques, ese proyecto no vale absolutamente nada para ti. Es una demo, no un ejemplo de diseño.
La última etapa, y la más difícil, es ponerte a prueba con proyectos que decidas tú mismo. Puedes inspirarte de sobra en proyectos que ya existen en Internet, pero lo realmente importante es que lo hagas todo por tu cuenta. A diferencia de la mayoría de los proyectos publicados, la idea de tu proyecto puede ser inútil y absurda. Haz un juego tonto con LEDs y botones, convierte la placa en un instrumento musical (genera señales de salida tipo analógico con PWM), haz que los LEDs se atenúen y parpadeen con patrones distintos, lo que se te ocurra. Estos proyectos no suelen publicarse, porque, ¿quién quiere dedicar tiempo a una idea absurda con un resultado sin sentido? Bueno, da igual que el resultado sea inútil cuando lo haces para practicar tus habilidades. Lo importante es que funcione correctamente y que lo hayas conseguido usando las técnicas correctas. Desde LEDs y botones, ve subiendo a cosas más complicadas.
Los vídeos cortos sobre FPGA pueden ser útiles, sobre todo los que muestran cómo hacer cosas concretas con el hardware. Los vídeos largos suelen ser una forma menos eficiente de aprender, porque tienden a ser demasiado palabreros y dispersos.
Y lo más importante: controla tú el proceso de aprendizaje. Decide qué habilidad quieres adquirir y busca los recursos que te ayuden a adquirirla. No te dejes llevar de la nariz por una serie de tutoriales, vídeos o lo que sea.
¿Qué placa debería comprar?
Depende de por qué camino (path) quieras empezar: la "lógica de procesado" o un tipo de experimentos más orientados a la electrónica. Comentaré cada posibilidad más abajo, pero empezaré con un par de consejos que sirven en ambos casos.
Ante todo, elige una placa barata. Considérala la primera, no la última. Los principios son los mismos para todas las placas, incluso para las sencillas, con FPGA pequeñas, pocas celdas lógicas y un rendimiento no demasiado impresionante. Los proyectos vistosos que puedes hacer con placas más caras suelen tener muy poco valor educativo. Al principio necesitas asentar las bases, y prácticamente cualquier FPGA sirve para eso. Cuando sientas que se te ha quedado pequeña tu primera placa, sabrás mucho mejor cómo elegir la siguiente.
En segundo lugar, elige una placa con una FPGA de AMD. Puede que otras placas sean más baratas y técnicamente mejores, pero AMD domina el mercado de las FPGA, así que la experiencia con sus FPGA y con su suite de herramientas de desarrollo (Vivado) es lo que más probablemente te ayude en el futuro.
Además, otros fabricantes de FPGA se esfuerzan por que la transición desde AMD a sus propias FPGA sea lo más suave posible, en particular ofreciendo herramientas de desarrollo similares a Vivado. Así que, aunque acabes trabajando con FPGA de otro fabricante, seguirás partiendo de una buena base. No digo en absoluto que las FPGA de AMD sean la mejor opción para todas las aplicaciones, pero AMD es el mejor punto de partida para aprender, incluso si más adelante te vas a pasar a otro fabricante.
De las distintas familias de FPGA que ofrece AMD, te sugiero sin dudarlo Artix-7 o Spartan-7. Si quieres experimentar con un procesador ARM dentro de la FPGA, te sugiero la familia Zynq-7000. La gama más barata de estos dispositivos son, de hecho, FPGA Artix-7 con un procesador ARM añadido. Así que, si consigues uno de estos, puedes usarlo como un Artix-7, o puedes optar por trabajar también con el procesador ARM. Un Zynq-7000 son dos en uno.
Artix-7, Spartan-7 y Zynq-7000 son familias de FPGA bastante antiguas. Sin embargo, las diferencias entre ellas y las FPGA más recientes del mercado se reducen al rendimiento (en particular, las frecuencias de reloj) y a un montón de bloques lógicos especializados que no tienen ninguna importancia para quien empieza con FPGA. Si eres capaz de llevar a cabo un proyecto correctamente usando todas las características de una Artix-7 (o una Spartan-7), tienes prácticamente todo cubierto. No hace falta meterse en Ultrascale, Ultrascale+ y Versal.
Otra ventaja de Artix-7, Spartan-7 y Zynq-7000: cuando trabajas con estas FPGA, puedes usar Vivado (para Windows o Linux) totalmente gratis para generar flujos de bits (bitstreams) a partir de Verilog, programar la FPGA y simular tu diseño. Además, con estos dispositivos tienes disponibles gratis una amplia gama de bloques IP, y lo mismo ocurre con el kit de desarrollo de software. Así que puedes llegar muy lejos con Vivado sin pagar por el software. De hecho, prácticamente todos los fabricantes de FPGA permiten el uso gratuito de sus herramientas de desarrollo para sus familias de FPGA más sencillas.
Si quieres elegir una placa con una familia de FPGA más reciente y "pesada", asegúrate de comprobar si necesitas una licencia de pago para ejecutar Vivado sobre esa FPGA.
Equipo para aprender FPGA "de verdad"
Si quieres meterte en el mundo de las FPGA de verdad, necesitas montarte un pequeño laboratorio de electrónica. No es nada del otro mundo, y la mayoría de las cosas que tendrás que comprar son baratas y se encuentran en cualquier tienda de electrónica para makers: resistencias pequeñas, cables Dupont, etcétera. También deberías asegurarte de tener un multímetro digital sencillo. Hasta el más simple servirá. Un equipo básico de soldadura también puede ser buena idea.
La parte cara que te sugiero comprar es un osciloscopio sencillo. Este instrumento de medida muestra la tensión en función del tiempo. Esto te permite ver las señales en los pines físicos de entrada y salida de la FPGA. También puedes ver señales electrónicas analógicas, por ejemplo la tensión que alimenta un altavoz.
Un osciloscopio es importante, porque deberías aprender a usar este instrumento para comprobar y depurar tu diseño. La opción cómoda es un osciloscopio autónomo. Pero también existen los "osciloscopios USB", que conectas a un ordenador y con los que ves las señales mediante un programa que se ejecuta en el ordenador. Da igual. Las dos opciones funcionan. Tampoco necesitas funciones sofisticadas.
Pero asegúrate de que el ancho de banda analógico del osciloscopio sea el adecuado. El ancho de banda analógico es el límite de la velocidad a la que puede cambiar la señal que estás observando. Ten en cuenta que no es la frecuencia de muestreo del osciloscopio, a la que a veces también se llama "ancho de banda" de forma abreviada, posiblemente para confundir a los compradores. Cuando una señal digital cambia a una velocidad cercana al ancho de banda analógico, se muestra con flancos suaves en la pantalla, aunque en realidad la transición sea brusca y rápida. Las señales digitales más rápidas que eso puede que no se distingan en absoluto.
Así que, si quieres empezar barato, ve a por un ancho de banda analógico de 10 MHz. Esto significa que tu diseño lógico no debería funcionar con una frecuencia de reloj superior a 10 MHz, porque de lo contrario las señales de salida podrían no verse bien en la pantalla del osciloscopio. En realidad, sería mejor mantenerse por debajo de 5 MHz. Son frecuencias muy bajas para una FPGA, pero no hay ningún problema con eso si el objetivo es dar los primeros pasos. El único problema es que podrías salirte con la tuya con un diseño lógico muy mal hecho que solo funcione a frecuencias bajas. Así que, si vas por este camino (path), asegúrate de intentar subir el reloj a 100-200 MHz y verificar que se cumplen las restricciones de temporización (timing constraints), solo para confirmar que tu diseño no está limitado a frecuencias de reloj muy bajas.
Si encuentras un osciloscopio con un ancho de banda analógico de 50-100 MHz sin una gran diferencia de precio, te sugiero que lo hagas. Yo no me compraría un osciloscopio con menos de 100 MHz de ancho de banda analógico para mi propio uso.
Otra cosa de la que conviene asegurarse es de que el osciloscopio tenga al menos dos canales de entrada, para que puedas ver dos formas de onda a la vez. Sorprendentemente, dos formas de onda suelen ser suficientes en la mayoría de las situaciones prácticas. Mi osciloscopio tiene cuatro canales de entrada y a veces uso tres, rara vez los cuatro.
Y una última cosa sobre los osciloscopios: asegúrate de comprar también sondas, normalmente junto con el osciloscopio. Esto quizá sea menos crucial cuando trabajas a 10 MHz, pero cuanto mayor sea la frecuencia, más importante es usar sondas.
Y bien... ¿qué hay de la placa de FPGA?
Con el equipo de laboratorio ya listo, ahora puedes elegir qué placa de FPGA comprar. La respuesta es bastante sencilla: elige una barata con una FPGA de AMD. Lo más probable es que eso signifique una placa basada en Artix-7 o Spartan-7. O en Zynq-7000, si quieres tener las ventajas que menciono en la sección siguiente. Ahora me centraré en el enfoque de FPGA más orientado a la electrónica.
Lo más importante que debes comprobar es si la placa tiene una interfaz USB para programar la FPGA. Para explicarlo, diré unas palabras sobre JTAG.
Para escribir el flujo de bits (bitstream) en la FPGA, esta dispone de varios pines destinados a tareas de laboratorio, conocidos como JTAG. Esta interfaz también resulta útil para otros trucos (en particular, ILA), pero su propósito más importante es enviar el flujo de bits desde el ordenador a la FPGA. Antaño existía una pequeña caja aparte (a la que a menudo se llamaba "cable JTAG" o "programador JTAG") que se conectaba al ordenador por USB. El otro lado de esa caja consistía en una serie de cables que se conectaban a un conector de pines de la placa de FPGA.
Hoy en día, muchas placas de desarrollo con FPGA incluyen esta funcionalidad. Eso significa que no necesitas ese "programador JTAG", sino que puedes conectar la placa de FPGA directamente al ordenador que ejecuta Vivado y configurar la FPGA con el flujo de bits de tu diseño. Fácil y cómodo.
Las placas de FPGA más sencillas y baratas no tienen esta función y requieren que compres el programador JTAG por separado. El programador JTAG oficial es bastante caro, y los no oficiales pueden funcionar de forma fiable o no. Así que, para una primera placa, creo que merece la pena pagar un poco más para evitar el problema por completo. Al menos hasta que te hayas acostumbrado al flujo de trabajo. O elige una placa Zynq, que en su lugar puede leer su flujo de bits desde una tarjeta microSD.
Basta de JTAG. Pasemos ahora a las características propias de la placa.
La placa debería tener E/S que se puedan conectar a algo que merezca la pena. En el proceso de aprendizaje, resulta muy beneficioso conectar la placa a otro pequeño dispositivo electrónico, quizá una placa de desarrollo de algún componente analógico o algo por el estilo. El mejor proyecto de aprendizaje es aquel en el que desarrollas algo tú mismo. Por eso prefiero las placas que tienen conectores de pines de propósito general que se pueden conectar a cualquier cosa con cables Dupont.
Normalmente prefiero las placas con muchos LEDs y pulsadores para tener algo de interacción directa. Para los primeros proyectos, un display de 7 segmentos también está bien.
Las placas suelen incorporar algunos componentes periféricos propios. Plantéate si puedes hacer un pequeño proyecto con ellos o si sería demasiado complicado. Por ejemplo, muchas placas de FPGA tienen una salida HDMI. Esto permite generar una señal de salida que va directamente a un monitor de ordenador normal. Lo más probable es que uses un bloque lógico ya hecho para traducir los píxeles a la señal de vídeo, porque esto es realmente complicado. Así que la salida HDMI, por sí sola, no te ayudará a aprender mucho. En cambio, sí puedes aprender bastante creando patrones de vídeo en la salida de vídeo. ¿Quizá una visualización de texto sencilla? ¿Arte de vídeo? ¿Fractales? ¿Mostrar una imagen de 100x100 píxeles en un área de 768x768 píxeles de la pantalla, con la interpolación lineal correcta? Haz eso bien y estarás empezando a destacar.
Entonces, ¿qué placa deberías elegir? Intenta pensar en qué quieres hacer con la placa y qué equipo tienes. Después, elige una placa que no cueste demasiado. Y, una vez más, considera esta placa la primera, pero no la última.
Placas con un Zynq-7000
Para quienes no quieran meterse de lleno en la electrónica desde el principio, existe la posibilidad de hacer cosas interesantes con una FPGA de todos modos. El truco está en hacer que la lógica interactúe con un procesador en lugar de con señales físicas, así que no hace falta tratar con la electrónica a nivel físico. La idea es trabajar con una FPGA que tenga un procesador embebido. Por ejemplo, Zynq-7000.
Pero ¿cómo puede el procesador embebido facilitar el punto de partida? Puede hacerlo, si no te metes de lleno en los asuntos relacionados con el procesador y su interacción con el tejido lógico (logic fabric), es decir, la "parte FPGA", conocida como "PL". En su lugar, usa un kit ya hecho para esa parte que te permita interactuar con la lógica de forma sencilla. Si quieres profundizar en los detalles de la parte del procesador, ya habrá tiempo de sobra para eso más adelante.
La forma más fácil de conseguirlo es empezar con Xillinux. Se trata de un paquete que permite preparar fácilmente una tarjeta microSD para que tu placa se convierta en un pequeño ordenador que ejecuta Linux. Puedes conectar un teclado, un ratón y un monitor de ordenador a la placa, y tendrás un sencillo escritorio gráfico con la posibilidad de abrir ventanas de terminal, además de editores gráficos. Puedes compilar programas en C directamente en el procesador de la placa con gcc y Makefiles, y también ejecutar scripts en el procesador.
Sin embargo, lo realmente importante de Xillinux es que también permite la comunicación con la "parte FPGA" (la lógica que escribes en Verilog) mediante una interfaz sencilla. Basándose en Xillybus, el lado del software usa simples operaciones de E/S de archivos para enviar y recibir datos, y el lado de la lógica usa FIFOs estándar para el mismo propósito. Lo importante de esta forma de intercambiar datos es que no se trata de un truco artificial con fines didácticos: los FIFO son la forma habitual de intercambiar datos en un proyecto con FPGA.
Así que, si te interesa diseñar "lógica de procesado" (lógica que recibe datos como entrada, los procesa y genera datos de salida), lo harás bien desde el principio: en los proyectos de FPGA "reales", la lógica de este tipo suele recibir los datos que va a procesar a través de un FIFO y envía sus resultados a otro FIFO. En un proyecto de FPGA "real", normalmente hay otros componentes lógicos al otro lado de esos FIFO. Cuando trabajas con Xillybus, en su lugar hay software ejecutándose en el procesador. O simplemente un comando de shell sencillo para copiar datos a o desde archivos directamente a los FIFO de la FPGA.
En resumen, trabajar con Xillinux y Xillybus te da un comienzo fluido, permitiéndote centrarte en tus primeras piezas de lógica y probarlas fácilmente con una interfaz similar a la de un ordenador. Además, este entorno facilita controlar la lógica directamente desde el procesador, con programas de ordenador o scripts sencillos. Y, lo más importante, todo el conjunto resulta bastante natural para un proyecto que no implica interactuar con el mundo exterior.
Para usar Xillinux, hay dos placas de desarrollo especialmente relevantes: Smart Zynq y Z-Turn Lite. Son placas de bajo coste que cuentan con kits ya preparados para instalar Xillinux. También hay algunas páginas en este sitio web que muestran cosas que se pueden hacer con la placa Smart Zynq.
Quienes no estén acostumbrados a trabajar con Linux pueden encontrar difícil usar el sistema Linux que se ejecuta en el procesador Zynq-7000 para interactuar con la "parte FPGA" a través de Xillybus. También puede resultar intimidante usar esta distribución de Linux relativamente sencilla para desarrollar y ejecutar software.
Si prefieres un ordenador "de verdad" con Linux o Windows, la misma configuración sencilla basada en Xillybus se puede aplicar usando una placa de FPGA con interfaz PCIe. Estas placas son más caras, pero se pueden conectar a un ordenador que ejecute Linux o Windows e intercambiar datos con la FPGA exactamente de la misma forma. En este caso, Artix-7 es sin duda suficientemente buena, pero puedes consultar la página de descargas de Xillybus para ver una lista de las familias de FPGA compatibles.
Hablando de Artix-7, insisto en que los dispositivos Zynq-7000 más baratos no son más que FPGA Artix-7 con un procesador ARM incorporado. Así que es posible ignorar el procesador y usar una placa Zynq igual que una placa Artix-7 normal.
Una diferencia es que una FPGA Zynq-7000 también tiene la capacidad de obtener su flujo de bits (bitstream) desde una tarjeta microSD. Por lo tanto, todo lo que se necesita para actualizar el flujo de bits es un adaptador de microSD a USB, en caso de que no tengas ya esa función en tu ordenador o portátil. En realidad, también puedes obtener el flujo de bits a través de la red Ethernet con TFTP usando U-Boot, pero eso requiere montar un servidor, así que no es la forma más sencilla.
Las FPGA Zynq-7000 también tienen una interfaz JTAG, igual que cualquier otra FPGA, pero se usa poco y, en ocasiones, ni siquiera está conectada a pines de la placa.
Ha sido mucha información, así que, en resumen:
- Una placa Zynq-7000 es una buena elección si no quieres mancharte las manos con la electrónica o si además quieres probar un procesador embebido en la FPGA.
- Plantéate una placa basada en PCIe (con Artix-7) si quieres que la FPGA se comunique con un ordenador de verdad, y no con el procesador embebido.
- Una placa normal de Artix-7 / Spartan-7 es lo tuyo si solo quieres una experiencia electrónica terrenal y práctica.
FPGA e IA (LLM)
Por último, hablemos del elefante en la habitación. La IA.
La IA aprende principalmente de material abierto que hay en Internet, y la gran mayoría de ese material lo escriben aficionados o la propia IA. Por eso, la calidad de las sugerencias de la IA en este campo es bastante inferior a, por ejemplo, sus respuestas relacionadas con el software. Las cuales tampoco es que sean siempre fenomenales, pero esa es otra discusión.
Entonces, ¿acabará la IA con la profesión del diseño de FPGA? Nadie sabe qué depara el futuro. Pero pensemos en lo que aprendimos con la llegada de los ordenadores y los robots en los años 80. Hay algunos patrones que merece la pena destacar.
Los ordenadores y los robots sustituyeron tareas tontas y repetitivas. Sí, mucha gente perdió su empleo, pero era la gente que realizaba esas tareas. Los humanos que desempeñaban un trabajo inteligente se mantuvieron en sus puestos y se volvieron incluso más eficaces y mejor pagados.
Al mismo tiempo, el uso que se hace de las máquinas es con diferencia mucho más limitado de lo que sería posible en teoría. En las fábricas, hay personas que realizan trabajo manual que podría haberse sustituido por robots, y esto es cierto incluso en la fabricación de automóviles. Pero también lo es en la construcción, la carpintería, las panaderías, etcétera. Mi explicación de por qué ocurre esto es la siguiente: hay escasez de personas lo bastante listas para usar robots y ordenadores, y abundancia de quienes pueden aprender una tarea con sus propias manos.
La adopción de la IA basada en LLM probablemente seguirá el mismo camino. Las tareas repetitivas y tontas serán sustituidas por la IA, pero las tareas inteligentes las harán los humanos usando la IA como herramienta.
Así que la conclusión para ti, como futuro diseñador de FPGA, es sencilla: asegúrate de aprender la profesión a fondo. Saber Verilog no es suficiente. Ser diseñador de FPGA nunca ha consistido solo en escribir Verilog. La IA también puede escribir Verilog, si recibe instrucciones muy concretas. El diseño de FPGA consiste, sobre todo, en tomar las decisiones acertadas que dan lugar a esas instrucciones. Convertir eso en código es la parte más fácil.
Lo que la IA no puede sustituir, al menos por ahora, es la comprensión profunda y el buen criterio. Y aunque algún día llegue a ser posible sustituir el criterio humano por una máquina, eso será lo último que se sustituya. Si la IA se adopta igual que se han adoptado las tecnologías anteriores, el criterio humano seguirá estando en manos de humanos.
Y una cosa más: aunque la IA escriba el código Verilog, las restricciones de temporización (timing constraints) y se encargue de todas las demás tareas, siempre será necesario un humano que verifique que lo hecho es correcto y que es el camino adecuado a seguir. Los LLM, al ser una especie de simulador de la actividad cerebral, también tienen una tendencia humana a cometer errores. Esto exige un humano competente y con buen criterio, tanto para guiar a la IA como para comprobar que lo que produce es adecuado. Eso significa que el diseñador del futuro tendrá que ser aún más profesional que el ingeniero de hoy. A los ingenieros mediocres los puede sustituir la IA, pero eso solo funciona si un ingeniero excelente la controla. Y como ese tipo de ingenieros es difícil de encontrar, bien podría ocurrir que la IA no se use a gran escala en este sector, exactamente igual que todavía hay personas haciendo trabajo manual en la industria tradicional.
En resumidas cuentas: elijas lo que elijas aprender, hazlo a fondo y con profundidad, o un día un LLM te dará una patada en el trasero. Puede que ese día ya haya llegado.
Aquí termina la primera página de esta serie. La página siguiente trata de los conocimientos teóricos que considero importantes y explica también por qué creo que merece la pena aprenderlos.