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.

 

 


viernes, 14 de marzo de 2025

IP Estático temporal en Debian

 En ocasiones necesito de probar conectividad Ethernet de equipamiento industrial.

 Para ello utilizo una configuración temporal de IP estático sin engorrosas configuraciones.

 En un terminal como root:

    # ip addr


    # ip addr add 192.168.1.2/24 dev enp2s0f0

    # ip addr 

 Listo.

 Una vez finalizadas las verificaciones, borramos la IP Estática temporal con:

    # ip addr del 192.168.1.2/24 dev enp2s0f0

 Extra.

 *- Ping con interfaz específica:

    $  ping -I enp2s0f0 192.168.1.14

 *- Escaneo con nmap:

    Puerto específico: 

        # nmap -p 80 192.168.1.14

    Puerto comunes (populares):

        # nmap -F 192.168.1.14

    Rango de puertos:

        # nmap -p 500-510 192.168.1.14 

     Dispositivos conectados, especificando interfaz:

        # nmap -e enp2s0f0 -sn 192.168.1.0/24

T.R.


 


viernes, 7 de marzo de 2025

GDB con OpenOCD en Debian

Esta entrada no es más que un ayuda memoria sobre uso inicial de GBD y OpenOCD por medio de terminal en Debian.

1 - Verificar o instalar gdb-multiarch

    # apt install gdb-multiarch

2 - Conectar OpenOCD a la placa bajo depuración. En este ejemplo el target es una raspberry pi pico w, por medio de otra raspberrypi-pico con firmware debugprobe 

    $ openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000"   

3 - En otro terminal lanzamos GDB, en este ejemplo depuraremos NUTTX; naturalmente, dentro de la carpeta que se encuentra el binario:

    $ gdb-multiarch nuttx 

El prompt debería devolver y esperar comandos:

    (gdb)

4 - Nos conectamos al target:

   (gdb) target extended-remote :3333 

5 - Finalmente, a modo de ejemplo, cargamos el firmware:

    (gdb) load nuttx

    o simplemente

    (gdb) load

    y aplicamos reset al target:

    (gdb) mon reset 

T.R.