Diferencia entre HVL y HDL

El lenguaje de descripción de hardware describe nuestro circuito, pero ¿qué hace el lenguaje de verificación de hardware? ¿Cómo verifica el diseño?

Existen diferentes lenguajes de verificación que incluyen vera, e, SystemVerilog y SystemC. Básicamente, hacen uso de la programación orientada a objetos (entre otras cosas menos importantes) para escribir bancos de pruebas con un alto nivel de abstracción, lo que hace que el proceso de verificación sea más robusto y rápido.

Respuestas (2)

Se crearon lenguajes de verificación de hardware como vera, e y posteriores SystemVerilog y SystemC para hacer que el proceso de verificación sea más eficiente. La historia cuenta que, según la ley de Moore, el tamaño del diseño y, por lo tanto, su complejidad casi se duplica cada 18 meses. En los primeros días del diseño, cuando incluso los microprocesadores se dibujaban como esquemas, no se realizaba ninguna verificación antes de producir el silicio. Bueno, por supuesto, ahora usamos computadoras para verificar nuestro diseño, pero ¿cómo verificaron la primera computadora? jajaja

En aquellos días, cuando un diseño completo se dividía en bloques, diferentes personas usaban su propio cerebro para diseñar, verificar y también simplificar el diseño. Si le hubieras dicho a alguien que algún día habría una herramienta en la que simplemente escribes un texto y sintetizará y simplificará el circuito automáticamente, se reirían de ti. Lo leí en un libro real. Sin embargo, las cosas cambiaron a medida que los diseños se volvieron más complejos y la velocidad de diseño aumentó. Automatizar cualquier tarea significa eliminar la intervención humana y, por lo tanto, eliminar el potencial de error inducido por el hombre. Más complejo significa que es más probable que haya un error inducido por humanos. En ese momento, hacer todo el diseño a mano era ineficiente, la gente pasó del dibujo a mano (sí, el dibujo físico real) a los esquemas en una computadora para hacer el diseño. Más tarde vino el HDL, que proporcionó una forma mucho más eficiente de diseñar circuitos digitales e intercambiar diseños, con el tiempo las herramientas de síntesis también se volvieron bastante robustas, por lo que la necesidad de hacer un diseño esquemático, bueno, ya no existía. Ahora podemos verificar pequeños bloques como el sumador completo y el multiplexor nosotros mismos. Sin embargo, ¿qué pasa con un diseño complejo? En este punto, las personas usan HDL para la verificación. En este caso, creamos un "banco de pruebas" que aplica un estímulo predeterminado a un modelo de nuestro diseño y la salida generada se compara con la salida esperada proporcionada por el diseñador. Esto es posible ya que los circuitos digitales siguen la lógica booleana, su salida puede predecirse. Es posible escribir un programa de computadora que haga esto y esto es exactamente lo que sucede en la simulación. Con el tiempo, las herramientas de síntesis también se volvieron bastante robustas, por lo que la necesidad de hacer un diseño esquemático, bueno, ya no existía. Ahora podemos verificar pequeños bloques como el sumador completo y el multiplexor nosotros mismos. Sin embargo, ¿qué pasa con un diseño complejo? En este punto, las personas usan HDL para la verificación. En este caso, creamos un "banco de pruebas" que aplica un estímulo predeterminado a un modelo de nuestro diseño y la salida generada se compara con la salida esperada proporcionada por el diseñador. Esto es posible ya que los circuitos digitales siguen la lógica booleana, su salida puede predecirse. Es posible escribir un programa de computadora que haga esto y esto es exactamente lo que sucede en la simulación. Con el tiempo, las herramientas de síntesis también se volvieron bastante robustas, por lo que la necesidad de hacer un diseño esquemático, bueno, ya no existía. Ahora podemos verificar pequeños bloques como el sumador completo y el multiplexor nosotros mismos. Sin embargo, ¿qué pasa con un diseño complejo? En este punto, las personas usan HDL para la verificación. En este caso, creamos un "banco de pruebas" que aplica un estímulo predeterminado a un modelo de nuestro diseño y la salida generada se compara con la salida esperada proporcionada por el diseñador. Esto es posible ya que los circuitos digitales siguen la lógica booleana, su salida puede predecirse. Es posible escribir un programa de computadora que haga esto y esto es exactamente lo que sucede en la simulación. ¿Qué pasa con un diseño complejo? En este punto, las personas usan HDL para la verificación. En este caso, creamos un "banco de pruebas" que aplica un estímulo predeterminado a un modelo de nuestro diseño y la salida generada se compara con la salida esperada proporcionada por el diseñador. Esto es posible ya que los circuitos digitales siguen la lógica booleana, su salida puede predecirse. Es posible escribir un programa de computadora que haga esto y esto es exactamente lo que sucede en la simulación. ¿Qué pasa con un diseño complejo? En este punto, las personas usan HDL para la verificación. En este caso, creamos un "banco de pruebas" que aplica un estímulo predeterminado a un modelo de nuestro diseño y la salida generada se compara con la salida esperada proporcionada por el diseñador. Esto es posible ya que los circuitos digitales siguen la lógica booleana, su salida puede predecirse. Es posible escribir un programa de computadora que haga esto y esto es exactamente lo que sucede en la simulación.

Ahora a la pregunta, ¿por qué necesitamos HVL? Esto está relacionado con el dominio del software. A medida que el software se volvió más y más complejo, la gente pasó del ensamblador a los lenguajes de procedimiento como BASIC y C, entre otros. Sin embargo, escribir y mantener programas enormes seguía siendo difícil. Esto es cuando la gente desarrolló el paradigma de programación orientada a objetos. La programación orientada a objetos es sin duda un desarrollo revolucionario que ha hecho posible que los programas informáticos abstraigan un problema del mundo real a niveles sin precedentes. Hace que escribir un programa sea más eficiente y también mantenerlo y expandirlo.

La simulación es esencialmente una actividad puramente basada en software. Cuando usamos HDL para escribir un banco de pruebas, tenemos que escribir con precisión cada movimiento de señal que debe tener lugar y en el momento en que debe tener lugar. Sin embargo, si elevamos el nivel de abstracción para escribir una palabra completa (por ejemplo, un byte en el bus de datos) a la vez, escribir en el banco de pruebas será mucho más rápido y menos tedioso. Podemos elevar el nivel de abstracción aún más, por ejemplo, con el diseño de Ethernet podemos escribir un paquete completo a la vez y verificar un paquete completo a la vez en lugar de bits individuales.

Con HVL, aplican la técnica OOP en el dominio de la verificación de hardware. Lo hacen al permitir verificar un diseño en un nivel más alto de abstracción. Al mismo tiempo, contienen funciones que se adaptan especialmente a la verificación, en lugar de escribir código sintetizable.

por ejemplo, SystemVerilog proporciona 2 funciones importantes. Estas son afirmaciones concurrentes y pruebas aleatorias restringidas. Al igual que la aserción comprueba que una expresión es verdadera en un momento dado, una aserción concurrente comprueba para asegurarse de que una secuencia en la que la señal cambia es correcta. En lugar de tener que escribir cada uno de los estímulos que se deben aplicar a un diseño bajo verificación, las pruebas aleatorias restringidas aplican todos los estímulos posibles que se ajustan a las restricciones dadas por el ingeniero de verificación, con el tiempo. Esto ahorra mucho tiempo en la escritura de estímulos.

Los HVL tienden a ser algo así como un híbrido entre HDL y lenguajes de secuencias de comandos. Mientras que los HDL están destinados a ser sintetizables en un circuito, HVL está destinado a ejecutarse como software, proporcionando estímulo al hardware real o al hardware simulado (de HDL) para verificar la funcionalidad correcta del hardware.

Algunos HDL tienen una especie de HVL incorporado. Por ejemplo, VHDL tiene una serie de construcciones de lenguaje que no están diseñadas para usarse en la síntesis de hardware, pero se pueden usar en un banco de pruebas para estimular o analizar otro código en la simulación.

"Mientras que los HDL están destinados a ser sintetizables en un circuito" Para ser justos, los HDL que tenemos fueron diseñados originalmente para usarse para simulación, y la forma en que los usamos para la síntesis es una gran chapuza.
No estaré en desacuerdo con eso.