¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

VHDL y Verilog: el mismo circuito

Después de esta lección: Puedo escribir el mismo circuito en VHDL y decir en qué se diferencia de Verilog.

Lección de 55 min8 comandosLaboratorio de Diseño digital: Verilog, VHDL y yosys en una VM Ubuntu privada

Dos lenguajes para un mismo circuito

VHDL es, junto con Verilog, uno de los dos lenguajes de descripción de hardware más usados. Los dos describen los mismos circuitos con palabras distintas.

Si sabes leer los dos, puedes aprovechar el código de cualquier equipo. Hoy compararás un mismo semisumador escrito en cada uno y verás en qué se parecen y en qué no.

Al final de esta lección

Nota

Puedo escribir el mismo circuito en VHDL y decir en qué se diferencia de Verilog.

Palabras clave

PalabraQué significaEjemplo
VHDLun lenguaje de descripción de hardware, estricto con los tipos
Entidadla caja del circuito: su nombre, sus entradas y sus salidasentity
Arquitecturalo que hay dentro de la cajaarchitecture
std_logicel tipo de un bit en VHDL
GHDLel simulador de VHDL del laboratorio
Elaborarunir las piezas ya analizadas en un programa que se puede ejecutar

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Entidad y arquitectura: la caja y su interior

En Verilog, un solo bloque module guarda la caja y su interior. VHDL los separa en dos partes.

La entidad dice el nombre del circuito y sus entradas y salidas. La arquitectura dice qué hay dentro. El fragmento muestra el semisumador del laboratorio. Cada <= es un cable que siempre sigue a sus entradas, como assign en Verilog.

El semisumador en VHDL

Código: haskell
entity half_adder is
  port (a, b : in std_logic; sum, carry : out std_logic);
end entity;

architecture rtl of half_adder is
begin
  sum <= a xor b;
  carry <= a and b;
end architecture;

Las mismas ideas en cada lenguaje

IdeaVerilogVHDL
La cajamoduleentity
Su interiorDentro del móduloarchitecture
Entrada y salidainput y outputin y out
Un cableassign y = a & b;y <= a and b;
XOR y NOT^ y ~xor y not
Comentario//--

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Entra en la carpeta del laboratorio

Comando
cd ~/hdl

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Cuántas líneas tiene cada versión

Comando
grep -c "" half_adder.v half_adder.vhd

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

GHDL analiza, elabora y ejecuta

Icarus Verilog compila y ejecuta en dos pasos. GHDL necesita tres. ghdl -a analiza: lee los archivos y busca errores. ghdl -e elabora el banco de pruebas y crea un programa. ghdl -r lo ejecuta.

Con la opción --vcd guarda también la onda, y vcd2txt la lee. Aquí la columna es de 10 ns, que es lo que espera el banco de pruebas entre dos filas.

Analiza los dos archivos VHDL

Comando
ghdl -a half_adder.vhd half_adder_tb.vhd

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Elabora el banco de pruebas

Comando
ghdl -e half_adder_tb

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Ejecuta y guarda la onda

Comando
ghdl -r half_adder_tb --vcd=out/half_adder.vcd

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Lee la onda, una columna cada 10 ns

Comando
vcd2txt out/half_adder.vcd 10ns

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

VHDL pide paréntesis donde Verilog decide solo

Verilog da más prioridad a & que a ^, así que a ^ b & a es válido y se calcula el AND primero. VHDL no tiene esa prioridad entre and, or y xor: si los mezclas sin paréntesis, no compila.

Los siguientes Runs hacen una copia con esa mezcla y la analizan. Falla a propósito: lo que importa es el mensaje.

Copia el circuito mezclando xor y and

Comando
sed 's/sum <= a xor b;/sum <= a xor b and a;/' half_adder.vhd > /tmp/ha_mix.vhd

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Analiza la copia y lee el error

Comando
ghdl -a /tmp/ha_mix.vhd

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente cree que VHDL es Verilog con otras palabras, línea por línea. Casi todo se traduce, pero VHDL es más estricto: pide el tipo de cada señal y paréntesis al mezclar operadores. Un error de GHDL suele pedir exactamente eso.

Para ir más lejos

Un banco de pruebas en VHDL también es una entidad, pero sin entradas ni salidas. Abre half_adder_tb.vhd y busca qué usa en lugar de $display para imprimir.

Busca también cómo espera 10 ns entre dos filas. Es la misma idea que #1 en el banco de pruebas de Verilog.

Sobre este laboratorio y su código: Laboratorio de Diseño digital: Verilog, VHDL y yosys en una VM Ubuntu privada

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.