Vengo de un fondo de programación y no me metí demasiado con el hardware o el firmware (a lo sumo un poco de electrónica y Arduino).
¿Cuál es la motivación al usar lenguajes de descripción de hardware (HDL) como Verilog y VHDL sobre los lenguajes de programación como C o algunos ensamblajes?
¿Es esta cuestión una cuestión de elección?
Leí que el hardware, cuyo firmware está escrito en un HDL, tiene una clara ventaja al ejecutar instrucciones en paralelo. Sin embargo, me sorprendió ver discusiones que expresaban dudas acerca de si escribir firmware en C o ensamblado (¿cómo es apropiado ensamblar si no necesariamente tiene una CPU?) Pero concluí que también es una opción.
Por lo tanto, tengo algunas preguntas (no dudes en explicar nada):
¿Un firmware realmente se puede escribir en HDL o en un lenguaje de programación de software, o es simplemente otra forma de realizar la misma misión? Me encantaría ver ejemplos del mundo real. ¿Qué restricciones resultan de cada opción?
Sé que un uso común del firmware sobre el software es en los aceleradores de hardware (como GPU, adaptadores de red, aceleradores SSL, etc.). Según tengo entendido, esta aceleración no siempre es necesaria, sino que solo se recomienda (por ejemplo, en el caso de SSL y la aceleración de algoritmos complejos). ¿Se puede elegir entre firmware y software en todos los casos? De lo contrario, me agradaría ver casos en los que el firmware es claro e inequívocamente apropiado.
He leído que el firmware se grabó principalmente en ROM o flash. ¿Cómo se representa allí? ¿En bits, como el software? Si es así, ¿cuál es la profunda diferencia? ¿Es la disponibilidad de circuitos adaptados en el caso del firmware?
Supongo que cometí un error aquí y allá en algunas suposiciones, por favor perdóname. ¡Gracias!