VHDL frente a Verilog [cerrado]

VHDL y Verilog son algunos de los HDL que se utilizan en la actualidad. ¿Cuáles son las ventajas y desventajas de usar Verilog o VHDL sobre el otro?

Parecen ser igualmente eficientes, elige el que prefieras. Encuentro que VHDL se adapta mejor a mí.
¿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.

Respuestas (11)

No puedo decirle cuál aprender, pero aquí hay algunos puntos contrastantes (de un usuario muy centrado en VHDL, ¡pero he tratado de ser lo más justo posible!), que pueden ayudarlo a tomar una decisión según sus propias preferencias. en términos de estilo de desarrollo:

Y tenga en cuenta la famosa cita que dice "Prefiero cualquiera de los dos que no estoy usando actualmente" (lo siento, no recuerdo quién escribió esto, ¿posiblemente Janick Bergeron?)

VHDL

  • fuertemente tipado
  • más detallado
  • muy determinista
  • sintaxis no similar a C (y mentalidad)

Muchos errores de compilación al principio, pero luego la mayoría funciona como esperas. Esto puede conducir a una curva de aprendizaje de sentimientos muy empinada (junto con la sintaxis desconocida)

Verilog

  • tipificado débilmente
  • mas conciso
  • solo determinista si sigues algunas reglas cuidadosamente
  • más sintaxis tipo C (y mentalidad)

Los errores se encuentran más tarde en la simulación: la curva de aprendizaje para "tener ganas de hacer algo" es menos profunda, pero dura más (¿si esa es la metáfora correcta?)

También a favor de Verilog está que la verificación de alto nivel 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 completamente diferente: MyHDL : obtiene todo el poder de Python como lenguaje de verificación con un conjunto de extensiones de síntesis a partir de las cuales puede generar VHDL o Verilog.

O Cocotb : todo el poder de Python como lenguaje de verificación, con su código sintetizable aún escrito en cualquier HDL que haya decidido aprender (es decir, VHDL o Verilog).

SystemC también es una buena opción para un HDL. SystemC admite el diseño de nivel de sistema y nivel de transferencia de registro (RTL). Solo necesita un compilador de C++ para simularlo. Las herramientas de síntesis de alto nivel luego convertirán el código SystemC a Verilog o VHDL para la síntesis lógica.

Conozco Verilog pero no estoy familiarizado con VHDL: ¿qué quiere decir con que VHDL es más determinista que Verilog?
@cic A veces, la simulación del código Verilog no se puede predecir. Esto no es un error en el simulador. Es una característica del estándar Verilog.

Aprendí ambos la misma semana. VHDL es como ADA/Pascal y Verilog es como C. VHDL es más detallado y más difícil de compilar, pero una vez que obtienes una compilación, tus posibilidades de éxito son mejores. Al menos eso es lo que encontré. Verilog, como C, se contenta con dejar que te dispares en el pie. Algunas industrias como la aeroespacial/gubernamental se inclinan hacia VHDL, otras se inclinan hacia Verilog. El problema que encuentro con ambos es la capacidad del banco de pruebas, y cuando trato de aprender y pasar de la simulación al silicio/FPGA, escribir solo código sintetizable es otro nivel de educación.

Hay un lenguaje que me gusta mucho llamado CDL . Es estrictamente sintetizable, escribe sus bancos de prueba de otras maneras, genera Verilog sintetizable que puede llevar a otras herramientas. Desafortunadamente, faltan los documentos de CDL , espero obtener algunas muestras en el mundo para mostrar cuánto más fácil es usar que Verilog o VHDL, pero simplemente no lo haga. 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ígida para mantener limpio su Verilog. Es un simulador de Verilog gratuito con una manera muy fácil de adjuntar al sim o crear bancos de prueba en C/C++. También puede usar Verilog, no lo limita allí. También está Icarus Verilog , que es más grande y más conocido, pero recomendaría Verilator si quieres aprender Verilog. Para VHDL existe GHDL , mi experiencia con él no fue tan buena como con Verilator , pero al menos hay una herramienta gratuita para tratar de mojarse los pies. Si tiene experiencia en programación de software, es probable que aprenda y disfrute Verilog más rápido que VHDL.

Definitivamente estoy de acuerdo con Leon, prueba ambos. fpga4fun y otras páginas web tienen buena información y algunas de esas páginas le darán los equivalentes de Verilog y VHDL para el tema que están discutiendo. Encuentro páginas como esas las más útiles para comparar los dos idiomas. Si usar un HDL es algo que desea hacer en su carrera, le recomiendo tener al menos algunas capacidades con ambos, tal vez muy bueno con uno, pero no sea completamente incapaz de usar el otro.

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

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

Sí, se ve mal, pero no estoy seguro: ¿es una falla en el lenguaje o en este sintetizador en particular?
Es un tema de idioma. Diferentes sintetizadores eligen su propio comportamiento de forma impredecible. Ejecute el mismo código en un simulador Mentor o en un simulador Cadence y puede obtener resultados diferentes.
Acabo de empezar a aprender verilog y parece que VHDL es el camino a seguir...

Ambos tienen ventajas y desventajas. VHDL es más académico, detallado y complejo. Tienes que escribir más código, pero el rigor significa que es más probable que funcione. Verilog es más simple 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.

Por lo general, la elección de uno u otro depende de las herramientas que esté utilizando. Algunas de las herramientas FPGA populares funcionan mejor con VHDL. Algunas herramientas ASIC populares funcionan mejor con Verilog. Entonces, cuál es mejor depende de lo que quieras hacer con él.

Supongamos que desea construir pequeños proyectos utilizando los FPGA de Altera que son populares en las escuelas de EE. Las herramientas gratuitas admiten ambos HDL. Pero es posible que la comunidad de usuarios utilice principalmente VHDL. Habrá más código de ejemplo, módulos reutilizables, etc. si opta por ese idioma.

Por el contrario, si tiene la intención de trabajar en una gran empresa haciendo un trabajo serio de diseño de chips, casi todos usan Verilog en estos días. Las herramientas de verificación, simulación y síntesis de alta resistencia están optimizadas para Verilog. Y últimamente, SystemVerilog: extensiones de Verilog para admitir el diseño y la verificación de sistemas de alto nivel.

Más discusión 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 decidir con qué fichas quiere jugar y ver qué ejemplos proporciona el proveedor. Usa eso. Una vez que sea un diseñador digital experimentado, aprender el otro idioma solo le llevará unos días.

Gracias. La última frase es importante. ¿Existen herramientas que conviertan una en la otra?
hay un poco de historia del gobierno de EE. UU. en la que no entraré, pero si miras modelsim, cuando toma verilog, se convierte a vhdl y luego simula eso. No lo hace al revés, por lo que al menos verilog to vhdl puede ver alguna conversión con esa herramienta. existen otras herramientas que convierten específicamente de una forma u otra y tienen versiones de demostración.
Algunas de las herramientas comerciales (síntesis, análisis estático) leerán en un idioma y producirán en el otro. El resultado es como usar un compilador para convertir Ada en lenguaje ensamblador y luego un descompilador para extraer C. No te gustará el resultado.

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

Respuesta muy larga : por el momento, supongo que por Verilog te refieres a Verilog-2001, que es probablemente lo que asumen la mayoría de las otras respuestas. La mejor sugerencia probablemente sería 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 conciso , mientras que VHDL es (muy, muy, muy) detallado
  • Verilog-2001 admite construcciones de muy bajo nivel que no son compatibles con VHDL (pero no tendrá que usarlas para el diseño típico de nivel de transferencia de registros (RTL)
  • VHDL tiene un tipo más fuerte , lo que generalmente hace que sea mucho más fácil detectar errores temprano
  • VHDL es mucho más expresivo que Verilog
  • Verilog-2001 tiene una sintaxis más parecida a C, mientras que VHDL es más parecida a Ada
  • Verilog-2001 puede tener algunos conceptos confusos para los principiantes (por ejemplo, wirevs reg)

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

Sin embargo, como dije, mi sugerencia es no usar ni VHDL ni Verilog-2001 si tiene el poder de elegir. Al contrario de lo que muchas personas suponen, SystemVerilog no es un lenguaje de alto nivel útil solo para el diseño o la verificación a nivel de sistema y tiene poco que compartir con los lenguajes que pueden incorporarse a 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, consulte http://en.wikipedia.org/wiki/SystemVerilog ) que tiene un subconjunto totalmente sintetizable que coincide con la concisión de Verilog con mayor expresividad que ambos . Verilog-2001 y VHDL, que en mi opinión ofrecen 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_combbloques que ayudan al diseñador a distinguir inmediatamente entre bloques que implementan diferentes tipos de lógica, y - para always_comby always_latch- inferir automáticamente las señales que deberían ir en la lista de sensibilidad (una fuente de errores infinitos en VHDL y Verilog, ¡especialmente para principiantes!)
  • logictipos que sustituyen a los confusos wirey regtipos de Verilog-2001
  • tipos empaquetados que permiten construir fácilmente buses multidimensionales (p. ej logic [N-1:0][M-1:0][P-1:0].), mientras que Verilog-2001 solo admite 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 interfaceque se pueden usar de manera muy efectiva para modelar estructuras regulares (como los puertos de un autobús)

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

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

  • Lenguajes de generación HDL como MyHDL (basado en Python) y Rocket (basado en Scala). El concepto aquí es: usted describe su diseño en un lenguaje de nivel superior pero aún usa conceptos muy HDL-ish (por ejemplo, bloques concurrentes, tiempo explícito) y luego genera HDL convencional (generalmente Verilog-2001). Honestamente, no los encuentro súper útiles ya que el paso de abstracción de HDL es pequeño y SystemVerilog ya proporciona muchos de los conceptos de nivel superior, con la ventaja de que se alimenta directamente al flujo de síntesis sin pasos intermedios.
  • Herramientas de síntesis de alto nivel , como Vivado HLS, LegUp, Calypto Catapult y muchas otras. Estos toman una descripción de muy alto nivel, a menudo en C, C ++ o SystemC y generalmente sin tiempo, y generan una implementación de mejor esfuerzo en Verilog (generalmente ilegible). Son bastante buenos para generar algunos objetos (por ejemplo, aceleradores HW para funciones como convolución, FFT, etc.), pero generalmente no son de propósito 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 en realidad es un híbrido entre la generación HLS y HDL.
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 en gran medida en las técnicas de comprensión y codificación que aprendí al usar VHDL.

Mi carrera durante los últimos 13 años fue 80% ASIC y 20% FPGA.

Se utilizó VHDL durante los primeros 3,5 años y el resto fue Verilog. No encontré difícil cambiar a Verilog, y por razones de ubicación (Silicon Valley) y velocidad, hoy solo codifico en Verilog.

Además, hago muchas interfaces asíncronas, pestillos y diseños semipersonalizados de nivel de puerta para el rendimiento, por lo que VHDL tiene muy poco uso en mi vida ahora. En cambio, encontré SystemVerilog y SystemC mucho más útiles para recoger y usar en grandes proyectos de ingeniería.

En un momento, herramientas como Verilator (¡gratis! y rápido) me ahorraron muchos fondos muy necesarios para simulaciones críticas. GHDL está disponible para VHDL. Y es posible que nunca lo necesite si siempre nada en una piscina rica o si no hace más de 1 millón de diseños de puertas.

Sin embargo, VHDL es mejor para los principiantes antes de que desarrollen principios sólidos de diseño de HW. Mis comunicaciones con la gente de EDA aquí sugieren que han hecho pequeños desarrollos de VHDL durante los últimos 10 años, y hoy en día hay un gran impulso detrás de HLS. Así que no habrá muchos desarrolladores de herramientas VHDL...

¿FreeHDL para simulación VHDL? Qucs como interfaz.

Opté por VHDL, principalmente porque conozco muy bien C y descubrí que tratar de escribir verilog tendía a hacer que escribiera como si estuviera apuntando a una CPU sin describir el hardware.

Muy molesto escribir una página de código y darte cuenta de que lo que escribiste era efectivamente un programa secuencial, no un diseño de hardware, sí, sintetizaría, pero el resultado fue feo y lento.

VHDL era lo suficientemente diferente como para que me resultara mucho más fácil pensar en términos de diseño lógico y no de flujo de control.

Al final del día, el idioma rara vez es la parte difícil, la habilidad está en el diseño del sistema, no en escribir.

Saludos, Dan.

El año pasado la universidad en la que he estudiado promovió dos cursos abiertos para principiantes. Ambos cubrieron el mismo contenido pero uno usando VHDL y el otro Verilog.

Por supuesto, les he preguntado a ambos profesores las diferencias entre VHDL y Verilog. Ambos no pudieron elegir al mejor.

Así que tuve que hacer los dos cursos para ver cuál podría ser mejor para mí. Mi primera impresión fue que VHDL es más parecido a Pascal y Verilog es más parecido a C.

Después de esto, decidí hacer solo VHDL porque, en ese momento, estaba trabajando con Delphi.

Pero nunca trabajé con FPGA después del curso. Así que esto es lo mejor que puedo ayudarte.

Uso VHDL casi en su totalidad. Mi experiencia es que VHDL es más común en Europa, Verilog en los EE. UU., pero VHDL también ha progresado constantemente en los EE. UU. La tipificación fuerte de VHDL no me molesta porque lo uso como un lenguaje de diseño de hardware anticuado como se usa en lógica programable pequeña, como PALASM o AHDL de Altera.

El gran problema para la mayoría de las personas que usan VHDL son los tipos fuertes. Quieren hacer asignaciones entre std_logic_vector (que considero una colección de cables en el objetivo) e "int", (que considero un número almacenado en la computadora que está compilando el diseño). La conversión de tipo más molesta con la que generalmente me encuentro es entre bit_vector (que considero una descripción de una colección de cables en la computadora que compila el diseño) y std_logic_vector. De hecho, lo que me arrastró a stackexchange en este momento fue buscar una conversión de char (una variable de caracteres almacenada en la computadora de compilación) a int.

En el pasado, el conflicto más famoso entre VHDL y Verilog fue el concurso de diseño organizado por la revista ASIC & EDA. Google "Resultados inesperados de un concurso de diseño de hardware: ¿Verilog ganó y VHDL perdió? -- ¡Sea usted el juez!", por ejemplo: http://www.ee.ed.ac.uk/~gerard/Teach/Verilog/manual /Ejemplo/lrgeEx2/cooley.html

El concurso consistía en implementar un registro de 9 bits bastante complicado. Tenía conteo ascendente/descendente, así como algunas otras cosas. Los resultados fueron que 8 de los 9 diseñadores de Verilog tenían el código ejecutándose después de 90 minutos. Cero de los 5 chicos de VHDL tenían algo funcionando.

No uso VHDL como cualquier otra persona. Por la forma en que lo uso, los tipos no se interponen en mi camino muy a menudo. Habría implementado el proyecto anterior de la misma manera que hago todo lo demás, completamente en std_logic y std_logic_vector, usando (en el pasado) la biblioteca sin firmar de IEEE. En cambio, me imagino que los diseñadores de VHDL hicieron su trabajo con int y se perdieron en la conversión de tipos.

Hay dos lugares en los que puede perderse en la conversión de tipos: (a) su diseño y (b) su banco de pruebas. Para mí, es más fácil escribir el banco de pruebas (casi) completamente en std_logic para que el banco de pruebas en sí sea (casi) sintetizable. Por "casi" quiero decir que definiré el reloj con una asignación retrasada que no se puede sintetizar. Pero aparte de eso (y comentarios), no puedes distinguir mis bancos de prueba de la lógica sintetizada.

De todos modos, antes de que te decidas por un primer idioma para aprender (casi todo el mundo tiene una preferencia, pero casi todo el mundo usa ambos), te aconsejo que busques ese concurso y leas los comentarios.

Uno de los problemas que he observado con VHDL es que, dado que es un lenguaje muy detallado, parece haber una tendencia (en la mente de los diseñadores) a creer que no requiere comentarios. No es cierto, por supuesto, debe escribir los comentarios antes del código.

Creo que es una afirmación interesante que la fuerte tipificación de VHDL es el mayor problema. Para mí, la tipificación fuerte es una característica central que me permite elevar el nivel de abstracción. En el diseño de hardware, tiene la opción de describir una estructura que implementa un comportamiento o describir un comportamiento que implementa una estructura. La historia ha demostrado que la abstracción es la clave para el éxito en el diseño de grandes sistemas, y los sistemas digitales no son una excepción. Por lo tanto, creo que se pierde mucho al limitarse a un subconjunto muy reducido de características del idioma.
Cierto, pero no me especializo en "diseño de sistemas grandes", me especializo en cosas pequeñas que deben ser extremadamente eficientes. Hay una serie de razones por las que la eficiencia a veces se vuelve primordial en el diseño electrónico. A veces, un gran sistema está hecho de muchos de estos pequeños sistemas y este tipo de diseño brinda una eficiencia mucho mayor.

Pesaré mis dos centavos: yo mismo soy un gran usuario de VHDL, pero Verilog ciertamente puede hacer el trabajo igual de bien. Siempre puede envolver uno en otro (aunque con un costo de tiempo y tipeo).

Lo que descubrí es que VHDL sin formato carece de muchas funciones útiles. (O o AND: me viene a la mente un std_logic_vector completo). Por lo tanto, construir usted mismo una caja de herramientas de funciones sintetizables y depuradas contribuye en gran medida a aumentar su productividad cuando usa VHDL.

¿Quizás alguien podría hacer referencia a una buena biblioteca de código abierto que ofrezca todas estas funciones "buenas para tener"?

Estoy bastante seguro de que la reducción AND/OR está incluida en VHDL 2008 junto con algunas otras actualizaciones útiles.

Las respuestas anteriores cubren bastante los contrastes entre los dos idiomas, y este artículo también cubre los puntos bastante bien: http://www.bitweenie.com/listings/verilog-vs-vhdl/

También me gustaría hacer un par de puntos más que no se han mencionado.

Recomendaría aprender VHDL primero por un par de razones. La escritura fuerte ayuda a que el compilador detecte algunos errores fáciles de principiantes. También escuché que VHDL es más difícil de captar después de usar Verilog primero.

Honestamente, no puedes equivocarte con ninguno de los dos idiomas; y si trabajas en esta industria por mucho tiempo, eventualmente aprenderás ambos idiomas de todos modos.