La próxima generación de desarrolladores de lógica programable

Érase una vez, antes de la era de la síntesis lógica, un ingeniero al que se le pedía que diseñara un sistema que fuera pura lógica. Esto fue cuando teníamos radar pero no microcontroladores, y procesamiento de señal digital pero no procesadores de señal digital listos para usar. No obstante, teníamos un radar procesado digitalmente.

En aquel entonces, se esperaba que un ingeniero recién graduado supiera cómo diseñar un hardware analógico y digital y cómo desarrollar un software. Me temo que el tiempo del ingeniero ecléctico y con experiencia está pasando y me preocupa el futuro del diseño lógico. Hay un adagio que dice que cuando un carpintero solamente tiene un martillo, cada problema parece un clavo. ¿Hemos llegado a ese punto donde cada problema parece un problema de software?

Si busca en Internet utilizando las palabras "aplicaciones de FPGA", encontrará una lista de aplicaciones a la vanguardia de la ingeniería eléctrica. Existen aplicaciones que van desde la inteligencia artificial y el reconocimiento de voz hasta las comunicaciones y el procesamiento de imágenes. El problema con estas aplicaciones es que no son simples; no son para principiantes. La curva de aprendizaje para dominar la implementación de estas aplicaciones es empinada e incluye varios temas no triviales.

Uno debe aprender sobre los dispositivos lógicos programables, sus entornos completos de desarrollo integrados (IDE; y cada fabricante tiene el suyo), nuevos paradigmas de programación (es decir, lenguajes de descripción de hardware, o HDL, su acomodación de concurrencia y el concepto de tiempo), y comprender la aplicación en sí. Estos son obstáculos prácticamente insuperables, excepto por expertos. Lo cual no es un buen augurio para inspirar a la próxima generación de diseñadores lógicos que deseen mejorar sus habilidades lógicas programables. El primer paso es demasiado alto. Creo que esto impide que las personas ingresen al campo y, por lo tanto, disminuye la cantidad de personas que eventualmente se convertirán en fanáticas de la lógica programable del mañana. Hay muchas historias en Internet de personas que expresan su frustración con el estado actual del diseño lógico programable y hay varias comunidades de código abierto que intentan resolver esto. Muchas personas sienten que la salvación vendrá a través de la metaprogramación, una técnica de programación en la que un programa trata a otro programa como sus datos.

Las empresas de lógica programable están en apuros. Por un lado, sus inversores requieren que desarrollen chips cada vez más capaces y caros y, por otro lado, hay relativamente menos personas capaces de usarlos. Su solución es convertir a los desarrolladores de software en diseñadores de hardware y lo están haciendo con nuevas herramientas.

Los compiladores de síntesis de alto nivel (HLS) llevan la abstracción del diseño a un nivel aún más alto y esto nos lleva aún más lejos de las raíces del diseño lógico. Es bastante notable que podamos producir diseños sofisticados de hardware a partir de descripciones puramente de software, pero al hacerlo se pierde el atractivo visceral que el diseño lógico puede tener en las personas. No me encontrará discutiendo que una persona puede "optimizar" una computadora, pero afirmo que era más fácil diseñar circuitos simples en el pasado. El problema es que los circuitos simples son más difíciles de diseñar hoy que en el pasado.

Recuerdo mi gran deleite al ver que mi diseño lógico hecho a mano funcionaba en forma de circuito. Fue mi inteligencia la que minimizó la cantidad de dispositivos requeridos. Cuando aprendí lógica programable a principios de la década de 1990, estaba aún más encantado de poder aplicar mi conocimiento de diseño de circuitos para implementar mi lógica en un solo dispositivo de 128 elementos lógicos y fue mi intelecto el que eligió cada uno de esos elementos lógicos. No dependía del intelecto de algún desarrollador de algoritmos desconocido.

Mientras que el diseño lógico estaba evolucionando, también lo hizo el diseño de software. Se ha convertido en gran medida en un mundo de programación orientada a objetos (OOP) y las bibliotecas de patrones de diseño comúnmente encontrados están bien documentadas y fácilmente disponibles en las bibliotecas de códigos. Mi libro de patrones de diseño es el texto popular de Erich Gamma, et. al., Design Patterns, Elements of Reusable Object-Oriented Software. Me parece interesante que el diseño de hardware haya comenzado como orientado a objetos, pero su desarrollo se estancó con la introducción de los HDL. Aunque los HDL permiten la reutilización del diseño, las bibliotecas de diseño contienen la funcionalidad más fundamental. Busque la "Lista de circuitos integrados de la serie 7400" en Internet y podrá encontrar algunos de los primeros patrones de diseño de hardware. Me pareció interesante que Meilir Page-Jones, en su libro Fundamentals of Object-Oriented Design in UML, haga referencia a los circuitos integrados como ejemplos de buen diseño de objetos: alta cohesión y bajo acoplamiento. Pero en la búsqueda de dispositivos lógicos programables cada vez más complejos, hemos perdido nuestras raíces en un diseño lógico simple y directo. Las metodologías de diseño actuales dependen de un algoritmo informático para implementar nuestra lógica. Creo que este enfoque crea una barrera para los principiantes de lógica programable.

Puede preguntar: "¿Cuántas líneas de código había en el primer juego de Pong que conectamos en la parte posterior de nuestros televisores?". La respuesta es cero. Fue puramente hardware (ver Figura 1), ¡no incluía software! No creo que haya muchos ingenieros recién graduados que puedan diseñar Pong sin usar software. Dirían: "¿Por qué debería?". Mi respuesta sería: “Por perspectiva y porque deben saber que se puede hacer. Es más simple de lo que piensan”.

Figura 1: Esquema de Pong (Imagen: Encontrado a través del blog Adafruit, orígenes desconocidos)

IEEE publicó una lista de lenguajes de programación amados y odiados por los ingenieros a principios de 2019. Decía que a los ingenieros les encanta Python. Yo lo creo. Fui juez en un concurso de diseño de Texas Instruments hace varios años y supe que nueve de los diez equipos universitarios utilizaban Python para sus proyectos. El lenguaje de descripción de hardware VHSIC (VHDL) y Verilog no estaban en las listas de los amados u odiados. Tal vez los editores de IEEE no consideran estos lenguajes de programación de HDL pero, lo más probable, apuesto a que ninguno de los encuestados ni siquiera consideró los HDL. Si es cierto, esto habla de cómo pocos ingenieros tienen en mente estos lenguajes o el diseño lógico, lo cual es un mal presagio para el campo del diseño lógico.

Entonces, ¿qué se debe hacer? ¿Cómo creamos la mentalidad necesaria en los nuevos ingenieros para ver un problema y considerar su solución en un software o un hardware? Después de todo, la mayoría de los problemas se pueden resolver de cualquier manera. Tengo una idea.

Creo que la plataforma Arduino hizo que muchos jóvenes se interesaran en software. Están ingresando a las escuelas para convertirse en ingenieros e ingenieros informáticos. ¿Cómo hizo esto? Arduino redujo la curva de aprendizaje para desarrollar un software. Hizo que el desarrollo del software fuera menos desalentador.

Al definir una placa, se pudo eliminar la configuración de los archivos de comando del enlazador, los nombres de las señales se convirtieron en estándar y su entorno completo de desarrollo integrado (IDE) ocultó los detalles de la compilación. Una de las bellezas de Python es que requiere un formato estricto, por ejemplo, las sangrías deben ser uniformes. Esto elimina las elecciones arbitrarias de bajo valor con el efecto de simplificar todo el proceso de desarrollo, lo que a su vez hace que los desarrolladores sean más productivos. Necesitamos el equivalente para la lógica programable y correspondería a la industria de la lógica programable colaborar en un estándar.

Estos son algunos de los atributos que defiendo para ese estándar. Del mismo modo que Arduino no tiene una capacidad inherente y sólida para modificar su arquitectura subyacente, como acomodar interrupciones anidadas, supongamos que los problemas lógicos que se resolverán en esta plataforma son lo suficientemente simples como para que los dispositivos lógicos programables de hoy en día puedan cumplir con todas las restricciones de tiempo. El equivalente de Arduino, la placa de dispositivo lógico programable (PLDB), debe tener un reloj lo suficientemente lento como para que funcione cualquier diseño de 1,000 elementos lógicos. Esto significa que la plataforma solo requiere verificación funcional.

Como todos aman Python, propongo que la PLDB sea compatible con Python y se base en un marco como nMigen o MyHDL (ver Figura 2), o incluso Yosys con su RTLIL. Esto permitiría a los principiantes simular sus diseños lógicos con un lenguaje interpretado, producir tablas de verdad y acceder a cualquier otra biblioteca de Python disponible para ellos. Hablando de la biblioteca de Python, el uso de Python también permite a la comunidad usar el índice de paquetes de Python (PyPI) para distribuir bloques de hardware reutilizables que ayudan a abordar la falta de patrones de diseño sólidos y compartidos. nMigen, como Python, admite la metaprogramación, por lo que, aunque este marco admitirá diseños simples, la plataforma es escalable para admitir diseños complejos.

Figura 2: Marco basado en Python (Fuentes de imagen: MyHDL.org y m-labs.hk)

La interfaz de una PC central a una PLDB debe ser USB junto con un microcontrolador integrado en la PLDB con una API, para que la PC central la use para conocer la configuración de la PLDB y, de esta manera, pueda configurar automáticamente el entorno Python para el desarrollo lógico programable. El resultado de esta configuración será ocultar los detalles de síntesis, lugar y ruta y programación mientras se facilita la simulación funcional en la PC y la ejecución en el hardware real.

Para aquellos lectores que piensen que ya no hay problemas lógicos simples que resolver, les muestro algunas estadísticas sobre las ventas de microcontroladores de Digi-Key. La Figura 3 muestra el desglose de las clases de microcontroladores que los clientes compran y la Figura 4 muestra cuántas unidades de cada clase se venden. En total, Digi-Key muestra más de 80,000 números de pieza de microcontroladores y almacena más de 19,000 microcontroladores listos para su envío inmediato a cualquier parte del mundo. Las figuras muestran que más ingenieros usan procesadores simples de 8 bits y que Digi-Key incluye más microcontroladores de 8 bits que cualquier otra clase de procesador. Esto me dice que hay problemas más simples que complejos.

Figura 3: Número de clientes de Digi-Key que compran cada tipo de microcontrolador (Fuente de la imagen: Digi-Key Electronics).

Figura 4: Número de unidades vendidas de cada tipo de microcontrolador de Digi-Key (Fuente de la imagen: Digi-Key Electronics).

Nuestro objetivo debe ser convertir a cualquiera, incluso a aquellos sin una educación formal en diseño lógico, en entusiastas de la lógica programable; pero tenemos que cambiar los paradigmas de desarrollo para hacerlo.

Información sobre el autor

Image of Randy Restle

Randall Restle tiene más de 40 años de experiencia en la industria de los componentes electrónicos. Ahora está semijubilado y se desmpeñó como Vicepresidente de Ingeniería de Aplicaciones de DigiKey. Su experiencia incluye la dirección de equipos de ingenieros de aplicación, técnicos y personal de gestión cualificados para desarrollar productos originales y únicos de tecnología avanzada.

Sus actividades personales incluyen el procesamiento de señales digitales, la implementación de lógica programable, mejoras en el control del movimiento y el diseño de software. Es titular de patentes en múltiples industrias y es miembro senior del IEEE. Randall tiene títulos de BSEE, MS y MBA de la Universidad de Cincinnati.

More posts by Randall Restle
 TechForum

Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.

Visit TechForum