Red de Respuestas Legales - Directorio de abogados - ¿Cuántos lenguajes de descripción de hardware existen?

¿Cuántos lenguajes de descripción de hardware existen?

1. HDL no es un lenguaje de diseño de hardware. En el pasado, me he encontrado con muchos principiantes de VHDL o Verilog HDL que hacen preguntas similares

como cómo implementar la división y la apertura de raíz. No., cómo escribir declaraciones de bucle, etc.

En este foro es frecuente ver a algunos internautas haciendo este tipo de preguntas. Respecto a estas cuestiones, lo primero que hay que dejar claro es que VHDL y Veriglog no son lenguajes desarrollados para el diseño de hardware, sino que actualmente son utilizados por nosotros para diseñar hardware.

HDL es la abreviatura de Lenguaje de descripción de hardware y su nombre oficial en chino es "Lenguaje de descripción de hardware". En otras palabras,

HDL no es un "lenguaje de diseño de hardware". No mires la diferencia de una sola palabra, es esta palabra la que determina que la mayoría de los diseños de circuitos deben seguir el modelo RTL para escribir código, y no pueden simplemente escribir código como quieras

Sintaxis para HDL código.

2. El origen de HDL La razón por la que es un "lenguaje de descripción de hardware" debe comenzar con el origen de HDL. VHDL comenzó a desarrollarse en 1980 bajo la dirección del Departamento de Defensa de EE. UU., se completó en 1983 y se convirtió en un estándar IEEE en 1987. Este lenguaje se desarrolló originalmente a partir de la necesidad del Departamento de Defensa de EE. UU. de comprar equipos electrónicos. La adquisición de equipos militares estadounidenses a empresas privadas a menudo enfrenta el siguiente riesgo: si una determinada arma está equipada con una gran cantidad de tropas, pero el proveedor de una de las piezas quiebra unos años después, entonces surgirán grandes problemas en el reproducción, reparación y mantenimiento de dichas armas. La estructura interna de los equipos electrónicos, especialmente los circuitos integrados, es relativamente compleja. Si se produce la situación mencionada anteriormente, será muy difícil encontrar otras empresas que produzcan sustitutos. Por lo tanto, el Departamento de Defensa de EE. UU. espera que los proveedores puedan dejar información sobre sus productos de alguna forma para garantizar que, si quiebran, otros fabricantes puedan producir sustitutos rápidamente. Obviamente, los documentos de diseño originales no se pueden entregar, ya que esto implicaría secretos comerciales y cuestiones de propiedad intelectual en Estados Unidos. Entonces, el Departamento de Defensa de EE. UU. ideó un método de compromiso: el lenguaje para describir el hardware, que es VHDL. A través de VHDL, los proveedores deben describir el comportamiento de los chips de circuito integrado que producen: por ejemplo, qué tipo de señal emitirá después de agregar a qué hora, etc. De esta forma, si es necesario que otros fabricantes produzcan sustitutos, sólo necesitan seguir el documento VHDL y diseñar un chip con el mismo comportamiento. Dichos sustitutos equivalen a ser diseñados independientemente por nuevos fabricantes sin comprender la estructura del producto original, por lo que es poco probable que impliquen una infracción intelectual. Verilog HDL también se formó en una época similar y fue desarrollado por Gateway Design Automation alrededor de 1983. Su arquitectura

es similar a VHDL, pero se utiliza principalmente para simulación de hardware. Quizás las empresas privadas presten más atención a la practicidad y Verilog es mucho más simple que VHDL.

Se puede observar que ninguno de los dos lenguajes más populares utilizados para el diseño de circuitos fue desarrollado para diseñar hardware (sin mencionar que no existía un lenguaje actual en los años 80

<). p> ¿Qué pasa con esos potentes programas EDA)? Por lo tanto, cuando se formuló originalmente el estándar del lenguaje HDL, no se consideró cómo se podrían implementar estos códigos en el hardware. En otras palabras, algún código puede ser sencillo de escribir pero muy complejo o casi imposible de implementar.

3. Sintetizabilidad del código HDL Ahora volvamos a la pregunta original. ¿Por qué los códigos HDL como la división y el bucle siempre salen mal?

? Como se puede ver en la sección anterior, cualquier código que cumpla con los estándares de sintaxis HDL es una descripción del comportamiento del hardware, pero no es necesariamente información de diseño que pueda asignarse directamente a un circuito. La descripción del comportamiento puede basarse en diferentes niveles, como el nivel del sistema, el nivel del algoritmo, el nivel de transferencia de registros (RTL), el nivel de la puerta, etc.

En términos de las capacidades integrales de la mayoría del software EDA actual, solo se puede garantizar la síntesis de descripciones de comportamiento RTL o de nivel inferior. Lo que muchos principiantes intentan hacer es dejar que el software sintetice descripciones de comportamiento del hardware a nivel de algoritmo o más abstractas. Por ejemplo, si desea implementar la operación de dividir dos variables, si escribe C = A/B en el código, encontrará que solo algún software de simulación puede ejecutar correctamente esta oración en el código de simulación anterior, pero casi ninguno. El software se puede sintetizar en hardware. No culpes al software

por ser demasiado estúpido. Imagínense, ¿cómo haríamos la división si la escribiéramos nosotros mismos? De una posición alta a una posición baja, pruebe con la división, el resto y el desplazamiento. Pruebe

La división y el resto requieren un restador, y los resultados intermedios del cociente y el resto deben almacenarse en registros y esta operación obviamente no se puede completar en un ciclo de reloj

y requiere; una máquina de estados para controlar el tiempo. Un C=A/B simple es demasiado abstracto en comparación con todos estos y, de hecho, es demasiado difícil de implementar para el software EDA que solo puede aceptar RTL o descripciones de nivel inferior

. Y si el código es similar a (Verilog) siempre @(posedge clk) c<=A/B; esto requiere que la división se complete con un retraso de reloj, lo cual es aún más imposible de lograr. (Nota: algunos software compatibles con FPGA proporcionan módulos de operación de multiplicación y división, pero solo admiten llamadas directas y no admiten la síntesis de declaraciones en la forma C = A/B en módulos de división). Otro ejemplo es, un problema común para muchos principiantes.

es intentar hacer que HDL realice operaciones de bucle, que es similar a (Verilog): for (i=0; iparity = parity xor data

[i] ; Algún software de síntesis con funciones relativamente simples se negará por completo a sintetizar declaraciones de bucle; mientras que algunos programas con funciones más potentes solo pueden sintetizar cuando la longitud de la palabra es una variable, ningún software puede sintetizarla. Esto se debe al tamaño del hardware. ser limitado y fijo

Cuando el software integral encuentra una declaración de bucle, siempre se expandirá en varias declaraciones de ejecución secuencial y luego se sintetizará en un circuito. una constante, el número de declaraciones expandidas se determina y se puede sintetizar y si es una variable, el número de declaraciones expandidas

No estoy seguro, el número de circuitos de hardware correspondientes no se puede determinar y no se puede; Algunas personas pueden decir que los bucles variables se pueden implementar usando contadores

Pero esta situación es la misma que la operación de división anterior. Se utiliza hardware adicional para almacenar resultados intermedios y realizar el control de tiempo. >

Las declaraciones de bucle como la anterior describen esto de manera demasiado abstracta y no pueden ser aceptadas por el software.

4. ¿Se puede sintetizar el código que escribes de forma simple? frase: Las computadoras nunca son tan inteligentes como usted. Para ser específicos, la capacidad del software EDA para sintetizar código HDL suele ser peor que la de los humanos. Si no puede imaginar un método de implementación de hardware más intuitivo, entonces el software EDA definitivamente tampoco funcionará. Por ejemplo, los sumadores y multiplexores son circuitos familiares para todos. p>path, por lo que operaciones como A+B-C, (A>B)?C:D definitivamente se pueden sintetizar

*****. ************* *********

Operaciones más complejas como división, extracción de raíces, logaritmos, etc. deben implementarse mediante ciertos algoritmos, y no existe un método de implementación intuitivo y sencillo.

Se puede juzgar que esas fórmulas de cálculo no se pueden sintetizar y se deben escribir códigos más específicos de acuerdo con sus algoritmos para lograrlo.

******************. *************

Además, descripciones de comportamiento que no pueden ser compatibles con el hardware. no se puede sintetizar (por ejemplo, si desea implementar un toque retardado dual como la memoria DDR en FPGA

Por lógica, el código es fácil de escribir, pero no se puede implementar, pero tales estándares de juicio sí lo son). muy subjetivo y vago, y debe juzgarse según la propia experiencia del diseñador al encontrarse con situaciones específicas.

Si desea un estándar relativamente objetivo, en términos generales: en la descripción de nivel RTL

todas las operaciones lógicas, las operaciones de suma y resta y sus combinaciones de orden finito son básicamente sintetizables; de lo contrario, existe la posibilidad de que no ser sintetizado

. Por supuesto, estos estándares todavía tienen fallas, sin mencionar que la tecnología EDA también está en constante desarrollo. Códigos que no se pudieron sintetizar en el pasado pueden ser factibles en el futuro, y los códigos que no son compatibles con cierto software pueden ser reemplazados por otro. software. Por ejemplo, un número fijo de bucles, una operación de multiplicación con un parámetro constante

, etc. Algunos software EDA admiten su síntesis, pero otros no. Por lo tanto, el juicio correcto aún requiere la acumulación de experiencia a través de la práctica.

Cuando puedas juzgar con mayor precisión la sintetizabilidad del código, tu dominio del HDL estará completo.