VHDL y Verilog son los HDL del día. ¿Cuáles son las ventajas para cualquiera que no tenga experiencia con HDL?
VHDL y Verilog son los HDL del día. ¿Cuáles son las ventajas para cualquiera que no tenga experiencia con HDL?
Respuestas:
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?)
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)
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).
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.
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 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í:
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.
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:
wire
vs reg
)Dicho esto, los dos idiomas comparten los conceptos más importantes, aunque con diferentes nombres (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 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_comb
Bloques que ayudan al diseñador a distinguir inmediatamente entre los bloques de aplicación diferentes tipos de lógica, y - por always_comb
e 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 sensibilidadlogic
tipos que sustituyen 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 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):
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 ...
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.
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.
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.
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"?
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.