104 votos

¿VHDL o Verilog?

VHDL y Verilog son los HDL del día. ¿Cuáles son las ventajas de uno u otro para alguien que no tiene ninguna experiencia con los HDL?

2 votos

Parecen ser igual de eficientes, elige el que prefieras. A mí me parece que el VHDL es el que mejor me va.

2 votos

¿Cómo puedo dar a estos moderadores "voto negativo"? La retórica de las personas con experiencia anterior es más valiosa que la información contenida en los libros. Los libros no llevan el concepto de tiempo.

77voto

Martin Thompson Puntos 6509

No puedo decirte cuál aprender, pero aquí hay algunos puntos de contraste (de un usuario muy centrado en VHDL, ¡pero he tratado de ser lo más justo posible!), que pueden ayudarte a hacer una elección basada en tus propias preferencias en términos de estilo de desarrollo:

Y tenga en cuenta la famosa frase que dice "prefiero cualquiera de los dos que no esté usando en ese momento" (lo siento, no recuerdo quién la escribió, ¿posiblemente Janick Bergeron?)

VHDL

  • fuertemente tipificado
  • más verboso
  • muy determinista
  • sintaxis no similar a la de C (y mentalidad)

Hay muchos errores de compilación al principio, pero luego la mayoría de las veces funciona como uno espera. Esto puede conducir a una curva de aprendizaje muy empinada (junto con la sintaxis desconocida)

Verilog

  • de tipo débil
  • más concisa
  • sólo es determinista si se siguen cuidadosamente algunas reglas
  • sintaxis más parecida a la de C (y mentalidad)

Los errores se detectan más tarde en la simulación: la curva de aprendizaje para "tener ganas de hacer algo" es más superficial, pero se prolonga más (si esa es la metáfora correcta )

También a favor de Verilog está el hecho de que la verificación de gama alta se inclina cada vez más hacia SystemVerilog, que es una gran extensión de Verilog. Pero las herramientas de gama alta también pueden combinar el código de síntesis VHDL con el código de verificación SystemVerilog.


Para otro enfoque totalmente distinto: MyHDL - se obtiene toda la potencia de Python como lenguaje de verificación con un conjunto de extensiones de síntesis a partir de las cuales se puede generar VHDL o Verilog.

2 votos

Conozco Verilog pero no estoy familiarizado con VHDL: ¿qué quieres decir con que VHDL es más determinista que Verilog?

0 votos

@cic A veces no se puede predecir la simulación del código Verilog. Esto no es un error en el simulador. Es una característica del estándar Verilog.

47voto

Aprendí ambas cosas la misma semana. VHDL es como ADA/Pascal y Verilog es como C. VHDL es más verboso y más doloroso para conseguir una compilación, pero una vez que consigues una compilación tus posibilidades de éxito son mejores. Al menos eso es lo que yo he comprobado. Verilog, al igual que C, se contenta con dejar que te dispares en el pie. Algunos sectores, como el aeroespacial y el gubernamental, se inclinan por VHDL y otros por Verilog. El problema que encuentro con ambos es la capacidad del banco de pruebas, y cuando se trata de aprender y tratar de llegar de la simulación al silicio/FPGA escribir código sólo sintetizable es otro nivel de educación.

Hay un lenguaje que me gusta mucho llamado CDL . Es estrictamente sintetizable, escribes tus bancos de pruebas de otras maneras, genera Verilog sintetizable que puedes llevar a otras herramientas. Por desgracia, el CDL Me faltan los documentos, espero sacar algunos ejemplos para mostrar lo fácil que es de usar que Verilog o VHDL, pero no lo tengo hecho. Viene con su propio entorno de simulación/prueba. Con CDL y GTKWave puedes hacer una cantidad considerable de trabajo.

Otra herramienta llamada Verilator , es bastante rígido para mantener su Verilog limpio. Es un simulador gratuito de Verilog con una forma muy fácil de adjuntar al sim o crear bancos de prueba en C/C++. Puedes usar Verilog también, no te limita ahí. Hay Icarus Verilog también, que es más grande y más conocido, pero yo recomendaría Verilator si quieres aprender Verilog. Para VHDL hay GHDL mi experiencia con él no fue tan buena como Verilator pero al menos hay una herramienta gratuita para intentar mojarse los pies. Si tienes experiencia en programación de software, es probable que aprendas y disfrutes de Verilog más rápido que de VHDL.

Definitivamente, estoy de acuerdo con León, prueba las dos cosas. fpga4fun y otras páginas web tienen buena información y algunas de esas páginas te darán los equivalentes de Verilog y VHDL para el tema que están discutiendo. Yo encuentro que páginas como esas son las más útiles para comparar los dos lenguajes. Si el uso de un HDL es algo que quieres hacer en tu carrera, recomiendo tener al menos algunas capacidades con ambos, tal vez realmente bueno con uno pero no ser completamente incapaz de usar el otro.

1 votos

Muy buenos consejos. He editado tu respuesta como referencia para mí y otros. +1

25voto

Se han librado muchas guerras santas por esto. Una en particular desventaja de Verilog es su comportamiento no determinista. http://www.sigasi.com/content/verilogs-major-flaw

0 votos

Sí, eso se ve mal, pero no estoy seguro: ¿es un defecto del lenguaje o de este sintetizador en particular?

5 votos

Es una cuestión de lenguaje. Diferentes sintetizadores eligen su propio comportamiento de forma impredecible. Ejecuta el mismo código en un simulador Mentor o en un simulador Cadence y puede que obtengas resultados diferentes.

0 votos

Acabo de empezar a aprender verilog y parece que VHDL es el camino a seguir...

24voto

Andy McC Puntos 61

Ambos tienen ventajas y desventajas. VHDL es más académico, verboso y complejo. Hay que escribir más código, pero el rigor significa que es más probable que funcione. Verilog es más sencillo para el diseño digital típico, pero facilita la creación de errores complicados. VHDL es más común en las universidades. Verilog es más común en las grandes empresas de semiconductores.

Normalmente, la elección de uno u otro depende de las herramientas que se utilicen. Algunas de las herramientas de FPGA más populares funcionan mejor con VHDL. Algunas herramientas populares para ASIC son mejores con Verilog. Por lo tanto, cuál es mejor depende de lo que quieras hacer con él.

Digamos que quieres construir pequeños proyectos utilizando las FPGAs de Altera que son populares en las escuelas de EE. Las herramientas gratuitas soportan ambos HDLs. Pero es posible que la comunidad de usuarios utilice mayoritariamente VHDL. Habrá más código de ejemplo, módulos reutilizables, etc. si optas por ese lenguaje.

Por el contrario, si tiene la intención de trabajar en una gran empresa que realice trabajos serios de diseño de chips, casi todas ellas utilizan Verilog en la actualidad. Las herramientas de síntesis, simulación y verificación más potentes están optimizadas para Verilog. Y últimamente, SystemVerilog, extensiones de Verilog para soportar el diseño y la verificación de sistemas de alto nivel.

Más debates aquí y enlaces útiles aquí:

http://www.eetimes.com/electronics-blogs/programmable-logic-designline-blog/4032239/Verilog-versus-VHDL-which-is-best-

Para un principiante/aficionado, el mejor consejo es que decida con qué fichas quiere jugar y vea qué ejemplos le proporciona el vendedor. Utiliza eso. Una vez que seas un diseñador digital experimentado, aprender el otro lenguaje sólo te llevará unos días.

4 votos

Gracias. La última frase es importante. ¿Existen herramientas que conviertan una en otra?

1 votos

Hay algo de historia del gobierno de los estados unidos en la que no me voy a meter, pero si miras modelsim, cuando toma verilog, lo convierte a vhdl y luego lo simula. No lo hace al revés, así que al menos de verilog a vhdl puedes ver alguna conversión con esa herramienta. hay otras herramientas por ahí que convierten específicamente de una manera u otra y tienen versiones de demostración.

3 votos

Algunas de las herramientas comerciales (síntesis, análisis estático) leerán en un lenguaje y emitirán en el otro. El resultado es como utilizar un compilador para convertir Ada en lenguaje ensamblador, y luego un descompilador para extraer C. No te gustará el resultado.

20voto

Francesco Conti Puntos 111

Respuesta corta : utilizar SystemVerilog, pero aprender también VHDL . Evite Verilog-2001 si puede.

Respuesta muy larga Por el momento, asumo que por Verilog te refieres a Verilog-2001, que es probablemente lo que también asumen la mayoría de las otras respuestas. La mejor sugerencia sería probablemente aprender ambos, pero no usar ninguno (más sobre esto al final de la respuesta). Las principales diferencias se pueden resumir en lo siguiente:

  • Verilog-2001 es concisa mientras que VHDL es (muy, muy, muy) verborrea
  • Verilog-2001 admite construcciones de muy bajo nivel que no son compatibles con VHDL (pero no tendrá que utilizarlas para el típico diseño de nivel de transferencia de registros (RTL)
  • VHDL es más fuertemente tipificado lo que suele facilitar la detección temprana de errores
  • VHDL es mucho más expresivo que Verilog
  • Verilog-2001 tiene un diseño más C-like sintaxis, mientras que VHDL es más Ada-like
  • Verilog-2001 puede tener algunos conceptos confusos para los principiantes (por ejemplo wire vs reg )

Dicho esto, los conceptos más importantes son compartidos por las dos lenguas, aunque con nombres diferentes (por ejemplo always vs process ) y en cualquier caso la dificultad de aprender un HDL está más relacionada con los conceptos que hay detrás (como la concurrencia de todos los procesos, las convenciones de HW, etc.) que con el lenguaje en sí. Teniendo en cuenta las diferencias, si la elección es entre Verilog 2001 y VHDL yo personalmente dirigiría a cualquier principiante a VHDL.

Sin embargo, como he dicho, mi sugerencia es, en realidad, no utilizar ni VHDL ni Verilog-2001 si se puede elegir. Al contrario de lo que mucha gente supone, SystemVerilog no es un lenguaje de alto nivel útil sólo para el diseño o la verificación a nivel de sistema y tiene poco que compartir con los lenguajes que se pueden introducir en una herramienta de síntesis de alto nivel como SystemC.

En cambio, SystemVerilog es una actualización completa del lenguaje Verilog (basado en Verilog-2005, véase http://en.wikipedia.org/wiki/SystemVerilog ) que tiene un subconjunto totalmente sintetizable que coincide con el concisión de Verilog con mayor expresividad que tanto Verilog-2001 como VHDL, proporcionando en mi opinión lo mejor de ambos mundos.

Ejemplos de construcciones/expresiones muy significativas disponibles en SystemVerilog que no están disponibles en Verilog-2001, VHDL o ambos incluyen:

  • always_ff , always_latch , always_comb que ayudan al diseñador a distinguir inmediatamente entre los bloques que implementan diferentes tipos de lógica, y - para always_comb y always_latch - inferir automáticamente las señales que deben ir en la lista de sensibilidad (una fuente de infinitos errores en VHDL y Verilog, especialmente para los principiantes)
  • logic tipos que sustituyen al confuso wire y reg tipos de Verilog-2001
  • tipos empaquetados que permiten construir fácilmente buses multidimensionales (por ejemplo logic [N-1:0][M-1:0][P-1:0] ), mientras que Verilog-2001 sólo soporta buses bidimensionales y VHDL obliga al diseñador a definir nuevos tipos para construir estructuras similares
  • construcciones de alto nivel como struct (similar a VHDL record ) e incluso de nivel superior interface que puede utilizarse muy eficazmente para modelar estructuras regulares (como los puertos de un autobús)

He probado todas estas diferencias "en mi piel" mientras trabajaba en un sistema multinúcleo bastante complejo con fines de investigación. Ahora es soportado por muchas herramientas, y sé con seguridad (por usarlas casi a diario) que es soportado por las herramientas de Synopsys (tanto para flujos de síntesis ASIC como FPGA), Xilinx Vivado (para síntesis FPGA), y herramientas de simulación como MentorGraphics Modelsim, Cadence NCsim y Synopsys VCS.

Para ser totalmente completos, hay otros dos tipos significativos de lenguajes en la caja de herramientas del diseñador de hardware (aunque la calidad de estas herramientas puede variar mucho):

  • Generación de HDL como MyHDL (basado en Python) y Rocket (basado en Scala). El concepto es el siguiente: describes tu diseño en un lenguaje de alto nivel, pero utilizando conceptos muy parecidos a los del HDL (por ejemplo, bloques concurrentes, temporización explícita) y luego generas el HDL convencional (normalmente Verilog-2001). Sinceramente, no me parecen súper útiles, ya que el paso de abstracción de los HDL es pequeño y SystemVerilog ya proporciona muchos de los conceptos de alto nivel, con la ventaja de que se introduce directamente en el flujo de síntesis sin pasos intermedios.
  • Síntesis de alto nivel herramientas, como Vivado HLS, LegUp, Calypto Catapult y muchas otras. Éstas toman una descripción de muy alto nivel, a menudo en C, C++ o SystemC y normalmente sin temporizar, y generan una implementación del mejor esfuerzo en Verilog (normalmente ilegible). Son bastante buenos para generar algunos objetos (por ejemplo, aceleradores HW para funciones como la convolución, FFTs, etc.), pero generalmente no son de uso general. Por ejemplo, es imposible diseñar un núcleo de procesador en la mayoría de las herramientas HLS - la única que conozco es BlueSpec, que es realmente un híbrido entre HLS y la generación de HDL.

0 votos

Así es más o menos como aprendí. Primero aprendí VHDL y lo codifiqué durante 3 años. Pasé 3 meses codificando verilog después de eso y (muy rápidamente) decidí que SystemVerilog era el camino a seguir. Ahora codifico casi exclusivamente SV, pero confío mucho en la comprensión y las técnicas de codificación que aprendí cuando usaba VHDL.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X