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?
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?)
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)
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.
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.
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
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í:
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.
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:
wire
vs reg
)Dicho esto, los conceptos más importantes son compartidos por los dos lenguajes, aunque con nombres diferentes (por ejemplo, always
vs 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_comb
bloques que ayudan al diseñador a distinguir inmediatamente entre bloques que implementan diferentes tipos de lógica, y - para always_comb
y 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!)logic
tipos que sustituyen a los confusos wire
y reg
tipos de Verilog-2001logic [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 similaresstruct
(similar a VHDL record
) e incluso de nivel superior interface
que 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):
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...
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.
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"?
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.
leon heller
dsgdfg