miércoles, 9 de abril de 2025

Verilog en Linux

Si bien existen herramientas específicas, de fabricantes como Xilinx o Intel, que funcionan en Linux, es interesante tener un herramienta liviana y gratuita para realizar pruebas.

Comenzar instalando iverilog, el cual es un compilador que traduce código fuente Verilog en un programa ejecutable para simulaciones.

# apt install iverilog

Luego instalar gtkwave, la cual es una herramienta de visualización de archivos VCD (entre otros). 

Nota: VCD son las iniciales de "Value Change Dump" , y es un formato de archivos industrial estándar para el volcado de simulaciones.

# apt install gtkwave

Ahora en un editor de texto, creamos un sencillo ejemplo en verilog de una compuerta and de 2 entradas, llamado and_2_in.v :


module and_2_in(
input a,
input b,
output x
);

assign x = (a & b);
endmodule

Luego, en la misma carpeta, creamos un testbench de ejemplo, and_2_in_tb.v


  
`timescale 10ns/100ps

module and_2_in_tb;

reg i,j;
wire z;

and_2_in u0_DUT(
.a(i),
.b(j),
.x(z)
);

initial begin

$dumpfile("wave_tb_and_2_in.vcd");
$dumpvars(0,and_2_in_tb);
i=1'b0;
j=1'b0;
#5 i=1'b1;
#5 i=1'b0;
#5 j=1'b1;
#5 i=1'b0;
#5 i=1'b1;
#5 j=1'b1;
#5 $finish;
end
endmodule

Compilamos el programa and_2_in.v, y además pasamos como argumento el testbench and_2_in_tb.v, con el comando:

$ iverilog -o out_and_2_in and_2_in.v and_2_in_tb.v

 Iverilog generará el archivo ejecutable out_and_2_in . Este archivo no es ejecutable por cualquier plataforma, por lo que se invoca a vvp.

 Lanzamos vvp, el cual es el "run time engine", que ejecuta la salida compilada de iverilog:

$ vvp out_and_2_in

El comando anterior genera un archivo  vcd con el nombre asignado en el apartado $dumpfile("wave_tb_and_2_in.vcd") del testbench.

Finalmente, lanzamos gtkwave pasando como argumento el archivo vcd generado.

$ gtkwave wave_tb_and_2_in.vcd


 

Seleccionamos la señales que nos interesa visualizar :


 

Ajustamos el zoom:



T.R.

 

 


No hay comentarios.:

Publicar un comentario