¿Se deben enseñar los idiomas HDL antes que los lenguajes de software? [cerrado]

-2

Soy un estudiante de Ingeniería Informática y aprendí los lenguajes de programación secuencial básicos (C / assembly / Java) mucho antes de que incluso me presentaran a los HDL. Por lo tanto, toda mi lógica de programación se basó en la codificación secuencial con un flujo de ejecución muy específico.

Una vez que nos presentamos a los HDL, yo y muchos de mis colegas tuvimos dificultades con respecto a la forma en que un circuito puede comportarse. Teníamos una comprensión muy clara de la lógica combinacional, pero sintetizar un circuito en un lenguaje tan similar a los lenguajes secuenciales "habituales" que nos enseñaron por primera vez fue algo difícil.

¿No sería mejor enseñar HDL antes de los lenguajes de programación de software a cursos "controlados por hardware"?

    
pregunta gabrieljcs

3 respuestas

5

En mi humilde opinión, "no". Primero, aunque el problema secuencial vs. concurrente requiere cierto tiempo para acostumbrarse, el concepto de instruir con precisión a una máquina requiere aún más, y los lenguajes secuenciales son una introducción más fácil y accesible a eso, incluso a pesar de los lenguajes en sí, solo mire el costo, la capacidad, la flexibilidad, el tiempo de construcción y el tamaño de mercado de las herramientas.

Una vez que llegue más allá de las etapas lógicas combinatorias básicas, la mayoría de los diseños HDL son secuencias de operaciones paralelas, ya sean máquinas de estado, tuberías o procesadores de programas almacenados por derecho propio. Además, la mayoría de los diseños prácticos de HDL también requerirán una pequeña cantidad de software secuencial para ejercerlos o utilizarlos.

Finalmente, prácticamente hablando en el mundo actual de los microcontroladores baratos, a menos que esté diseñando una funcionalidad ASIC especial, casi siempre usará un programa secuencial como su opción default , y recurrirá a describir la lógica personalizada solo donde una máquina programada secuencialmente es sustancialmente subóptima para la tarea, la mayoría de las veces, cuando necesita hacer algo relativamente simple muy rápidamente o en paralelo masivo.

    
respondido por el Chris Stratton
2

He escrito un montón de código C (y código ASM) que fue impulsado por eventos.

Normalmente, desde temporizador, watchdog e interrupciones de E / S. Con muchos programadores para iniciar funciones periódicas de software.

En mi experiencia, la mayoría de las escuelas no enseñan el tipo de pensamiento necesario para manejar la programación dirigida por eventos.

Hay lenguajes concurrentes, que a menudo se ejecutan en PLC, ASIC, etc., que son continuos, concurrentes, etc. En su mayoría, después de aprender esos lenguajes, un programador debe estar pensando en esos lenguajes para obtener el máximo provecho de ellos.

Luego están los I.A. lenguajes como Lisp y Prolog que son completamente diferentes de los lenguajes secuenciales o de eventos.

I.E. Cada idioma tiene sus puntos fuertes y débiles. Si un programador quiere (o necesita) usar un lenguaje específico, entonces ellos necesitan aprender ese lenguaje, por lo que piensan en problemas de programación en los términos de ese lenguaje.

La mayoría de los programadores nunca programarán FPGA, ASIC o PLC, sino que realizarán la programación de aplicaciones para empresas (COBOL, C, JAVA, ForTran, etc.) o diseño web (HTML, XML, javascript, json, SQL, etc.). .

SO, IMO: los idiomas 'secuenciales' son los mejores para aprender primero, ya que son los más fáciles de entender, por lo que se conocen los conceptos básicos antes de aprender los idiomas más esotéricos.

Y luego están los lenguajes como C ++ y C # y J # y muchos más que pueden codificarse para cualquiera de los entornos.

Pero primero, los conceptos subyacentes deben ser entendidos.

Conceptos que van desde los conceptos de memoria y registro, a la historia de la programación, a la máquina de Turing, a las cosas 'antiguas' que fueron las precursoras de la actualidad, como ASCII, tarjetas y lectores de tarjetas perforadas de 80/96 columnas y papel. cinta y cinta magnética con cambio de nivel y programación de bajo nivel de dispositivos de E / S, etc., etc. etc.

    
respondido por el user3629249
1

Dado que he visto a varios veteranos de HDL que más adelante en su carrera decidieron aprender C, y desde allí produjeron un código completamente horrible, creo que es una muy mala idea comenzar con HDL como su primer lenguaje de programación.

No tanto por el flujo de programas secuencial en función de los eventos, sino porque los lenguajes de alto nivel son mucho más complejos y también tienen requisitos más rígidos de legibilidad. No puede escribir código de lenguaje de alto nivel como usted escribe HDL, necesita aplicar alguna forma de diseño de programa , un concepto que está ausente en su mayoría en HDL.

Es un hecho que los microcontroladores son mucho más utilizados que los ASIC. E incluso cuando se usan ASIC, a menudo tienen microcontroladores / microprocesadores en su interior. Por lo tanto, el enfoque principal cuando se enseña ingeniería debe ser la programación de microcontroladores.

Y al observar muchos ejemplos de programas de microcontroladores de metal desnudo, por ejemplo, publicados en este sitio, donde todo es una pared de código dentro de main() , con algunas funciones extrañas, apenas pensadas, existe una necesidad desesperada de EE la escuela se centrará más en el diseño de programas, en lugar de temas de interés periférico como HDL o lógica digital.

    
respondido por el Lundin

Lea otras preguntas en las etiquetas