VHDL o Verilog? [cerrado]

94

VHDL y Verilog son los HDL del día. ¿Cuáles son las ventajas para cualquiera que no tenga experiencia con HDL?

stevenvh
fuente
2
Parecen igualmente eficientes, elija el que prefiera. Me parece que VHDL me queda mejor.
Leon Heller
1
¿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.
dsgdfg

Respuestas:

70

No puedo decirte qué 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 tomar una decisión basada en tus 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)

Para empezar, hay muchos errores de compilación, pero en su mayoría funciona como se espera. Esto puede conducir a una curva de aprendizaje de sentimiento muy empinada (junto con la sintaxis desconocida)

Verilog

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

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

También a favor de Verilog es que la verificación de gama alta se inclina cada vez más hacia SystemVerilog, que es una gran extensión para 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: MyHDL : obtienes todo el poder de Python como lenguaje de verificación con un conjunto de extensiones de síntesis desde las cuales puedes 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).

Martin Thompson
fuente
2
Conozco a Verilog pero no estoy familiarizado con VHDL: ¿qué quieres decir con VHDL siendo más determinista que Verilog?
cic
44

Aprendí ambos la misma semana. VHDL es como ADA / Pascal y Verilog es como C. VHDL es más detallado y más doloroso para obtener una compilación, pero una vez que obtiene una compilación, sus posibilidades de éxito son mejores. Al menos eso es lo que encontré. Verilog, como C, está bastante contento de permitirte dispararte 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 intento aprender y tratar de pasar de la simulación a la escritura de silicio / FPGA, solo el código sintetizable es otro nivel de educación.

Hay un lenguaje que realmente me gusta llamado CDL . Es estrictamente sintetizable, escribe sus bancos de prueba de otras maneras, genera Verilog sintetizable que puede usar en otras herramientas. Desafortunadamente , faltan los documentos de CDL , espero obtener algunas muestras en el mundo para mostrar cuán más fácil es usarlo que Verilog o VHDL, pero simplemente no lo haya hecho. Viene con su propio entorno sim / test. 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 gratuito de Verilog con una forma muy fácil de conectarse al sim o crear bancos de prueba en C / C ++. También puedes usar Verilog, no te 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 hay GHDL , mi experiencia con él no fue tan buena como 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 elija 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 realmente bueno con uno, pero no sea completamente incapaz de usar el otro.

permanencia
fuente
1
Muy buenos consejos. He editado tu respuesta como una referencia para mí y para otros. +1
Daniel Grillo
23

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

Philippe
fuente
Sí, eso se ve mal, pero no estoy seguro: ¿es esto una falla en el lenguaje o en este sintetizador en particular?
stevenvh
44
Es un problema de idioma. Diferentes sintetizadores eligen su propio comportamiento de manera impredecible. Ejecute el mismo código en un simulador Mentor o un simulador de cadencia y puede obtener resultados diferentes.
Philippe
20

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 difíciles. VHDL es más común en las universidades. Verilog es más común en las grandes compañías de semiconductores.

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

Supongamos que desea construir proyectos pequeños 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 esté utilizando 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 síntesis, simulación y verificación de servicio pesado 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 quieres jugar y ver qué ejemplos ofrece el vendedor. Usa eso. Una vez que eres un diseñador digital experimentado, aprender el otro idioma solo te llevará unos días.

Andy McC
fuente
44
Gracias. La última oración es importante. ¿Hay herramientas que convierten una en la otra?
stevenvh
Hay algo de historia del gobierno de EE. UU. en la que no voy a entrar, pero si miras a modelsim, cuando toma verilog, se convierte en vhdl y luego simula eso. No hace eso al revés, por lo que al menos verilog a vhdl puede ver alguna conversión con esa herramienta. Existen otras herramientas que se convierten específicamente de una forma u otra y tienen versiones de demostración.
old_timer
3
Algunas de las herramientas comerciales (síntesis, análisis estático) leerán en un idioma y generará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 le gustará el resultado.
Andy McC
17

Respuesta corta : use SystemVerilog, pero también aprenda 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 también 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 registro (RTL)
  • VHDL está más fuertemente tipado , 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 principiantes (por ejemplo, wirevs reg)

Dicho esto, los dos idiomas comparten los conceptos más importantes, aunque con diferentes nombres (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 lenguaje mismo. Teniendo en cuenta las diferencias, si la elección es entre Verilog 2001 y VHDL, personalmente dirijo a cualquier principiante a VHDL.

Sin embargo, como dije, mi sugerencia es no usar VHDL ni Verilog-2001 si tienes el poder de elegir. Contrariamente a lo que muchas personas suponen, SystemVerilog no es un lenguaje de nivel superior útil solo para el diseño o la verificación de nivel de sistema y tiene poco que compartir con los idiomas que pueden introducirse 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, 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 ambas Verilog-2001 y VHDL, proporcionando en mi opinión lo mejor de ambos mundos.

Los 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 los bloques de aplicación diferentes tipos de lógica, y - por always_combe always_latch- (! Una fuente de errores infinitas en VHDL y Verilog, especialmente para los principiantes) inferir automáticamente las señales que deben ir en la lista de sensibilidad
  • logictipos que sustituyen los confusos wirey regtipos 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 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 bus)

Probé todas estas diferencias "en mi piel" mientras trabajaba en un sistema multinúcleo bastante complejo para fines de investigación. Ahora es compatible con muchas herramientas, y sé con certeza (al 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 idiomas 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 utiliza conceptos muy HDL-ish (por ejemplo, bloques concurrentes, sincronización explícita) 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 (generalmente ilegible) Verilog. Son bastante buenos para generar algunos objetos (por ejemplo, aceleradores HW para funciones como convolución, FFT, 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: el único que conozco es BlueSpec, que es realmente un híbrido entre la generación HLS y HDL.
Francesco Conti
fuente
Así es como aprendí. Aprendí VHDL primero 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 las técnicas de comprensión y codificación que aprendí al usar VHDL.
stanri
12

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

VHDL se usó durante los primeros 3.5 años y el resto fueron Verilog. No encontré difícil cambiar a Verilog, y por razones de ubicación (Silicon Valley) y velocidad, solo codifico en Verilog hoy.

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

En una etapa, herramientas como Verilator (¡gratis! Y rápido) me ahorraron muchos fondos muy necesarios para simulaciones críticas. No tiene esta opción (todavía) para VHDL. Y es posible que nunca lo necesite si siempre nada en una piscina rica o no hace diseños de puertas> 1M.

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

usuario27239
fuente
FreeHDL para simulación de VHDL? Qucs como frontend.
Martin
8

Fui por VHDL, principalmente porque conozco C muy bien y descubrí que tratar de escribir verilog tendía a hacerme escribir como si estuviera apuntando a una CPU que no describe el hardware.

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

VHDL fue lo suficientemente diferente que me resultó 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 difícil, la habilidad está en el diseño del sistema, no en la escritura.

Saludos, Dan.

Dan Mills
fuente
5

El año pasado, la universidad que estudié promovió dos cursos abiertos para principiantes. Ambos cubrían 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 lo mejor.

Así que tuve que hacer ambos cursos para ver cuál podría ser mejor para mí. Mi primera impresión fue VHDL es más similar 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.

Daniel Grillo
fuente
5

Yo uso VHDL casi por completo. Mi experiencia es que el VHDL es más común en Europa, Verilog en los EE. UU., Pero el VHDL también ha progresado constantemente en los EE. UU. El tipeo fuerte de VHDL no me molesta porque lo uso como un lenguaje de diseño de hardware a la antigua usanza en la 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) y "int" (que considero un número almacenado en la computadora que está compilando el diseño). La conversión de tipo más molesta que generalmente encuentro es entre bit_vector (que considero como 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 era buscar una conversión de char (una variable de caracteres almacenada en la computadora compiladora) 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 Won y VHDL Lost? - You Be The Judge!", Por ejemplo: http://www.ee.ed.ac.uk/~gerard/Teach/Verilog/manual /Example/lrgeEx2/cooley.html

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

No uso VHDL como nadie más. La forma en que lo uso, los tipos no se interponen en mi camino muy a menudo. Hubiera 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 IEEE. En cambio, imagino que los diseñadores de VHDL hicieron su trabajo con int y se perdieron en la conversión de tipos.

Hay dos lugares donde 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, por lo que el banco de pruebas en sí es (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 puede distinguir mis bancos de prueba de la lógica sintetizada.

De todos modos, antes de decidirse por un primer idioma para aprender (casi todos tienen preferencia pero casi todos usan ambos), le aconsejaría buscar ese concurso y leer el comentario sobre él.

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.

Carl Brannen
fuente
1
Creo que es una afirmación interesante de que la tipificación fuerte de VHDL es el mayor problema. Para mí, la escritura fuerte es una característica central que me permite elevar el nivel de abstracción. En el diseño de hardware, puede elegir entre 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 un diseño exitoso de sistemas grandes, y los sistemas digitales no son una excepción. Por lo tanto, creo que se pierde mucho al limitarse a un subconjunto muy limitado de características del lenguaje.
trondd
2
Es cierto, pero no me especializo en "diseño de sistemas grandes", sino en cosas pequeñas que deben ser extremadamente eficientes. Hay varias razones por las cuales la eficiencia a veces se vuelve primordial en el diseño electrónico. A veces, un sistema grande está hecho de muchos de estos sistemas pequeños y este tipo de diseño proporciona una eficiencia mucho mayor.
Carl Brannen
5

Pesaré mis dos centavos: 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 tiempo y costo de escritura).

Lo que he encontrado es que el VHDL sin formato carece de muchas funciones útiles. (OR o AND: me viene a la mente todo un std_logic_vector). Por lo tanto, crear una caja de herramientas de funciones depuradas y sintetizables aumenta en gran medida su productividad al usar VHDL.

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

ErikAndren
fuente
2
Estoy bastante seguro de que la reducción AND / OR se incluye en VHDL 2008 junto con algunas otras actualizaciones útiles.
ks0ze
4

Las respuestas anteriores cubren 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. El tipeo fuerte ayuda a algunos errores fáciles de principiante a ser detectados por el compilador. También escuché que VHDL es más difícil de detectar 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.

usuario19460
fuente