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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| VHDL | un lenguaje de descripción de hardware, estricto con los tipos | |
| Entidad | la caja del circuito: su nombre, sus entradas y sus salidas | entity |
| Arquitectura | lo que hay dentro de la caja | architecture |
| std_logic | el tipo de un bit en VHDL | |
| GHDL | el simulador de VHDL del laboratorio | |
| Elaborar | unir 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
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
| Idea | Verilog | VHDL |
|---|---|---|
| La caja | module | entity |
| Su interior | Dentro del módulo | architecture |
| Entrada y salida | input y output | in y out |
| Un cable | assign 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
cd ~/hdlSe 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
grep -c "" half_adder.v half_adder.vhdSe 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
ghdl -a half_adder.vhd half_adder_tb.vhdSe 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
ghdl -e half_adder_tbSe 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
ghdl -r half_adder_tb --vcd=out/half_adder.vcdSe 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
vcd2txt out/half_adder.vcd 10nsSe 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
sed 's/sum <= a xor b;/sum <= a xor b and a;/' half_adder.vhd > /tmp/ha_mix.vhdSe 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
ghdl -a /tmp/ha_mix.vhdSe 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.