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.
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.