La semana pasada presenté una introducción a la programación de hardware en lenguaje HDL, más precisamente Verilog, utilizando el compilador Icarus Verilog en Windows. En esta oportunidad voy a demostrar el mismo proceso de instalación y configuración de Icarus Verilog, pero esta vez en GNU/Linux (Devuan).

Antes de comenzar, recomiendo leer el artículo Primeros pasos con Icarus Verilog en Windows (al menos su introducción) para entender de qué se trata HDL.

Instalación de Icarus Verilog

Tal como mencioné anteriormente, Icarus Verilog es un compilador de lenguaje Verilog desarrollado para GNU/Linux. La instalación en los sistemas basados en Devuan/Debian es tan simple como ejecutar:

# apt-get install iverilog

A su vez, en los sistemas FreeBSD:

# pkg install iverilog

Devuan ASCII provee el paquete iverilog versión 10.1, mientras que FreeBSD 11.2 provee la versión 10.2.

Compilar iverilog desde los fuentes

Si se desea compilar iverilog desde sus fuentes (en lugar de instalar desde el gestor de paquetes) se deben ejecutar los siguientes pasos.

Descargar la última versión disponible desde el sitio oficial:

ftp://ftp.icarus.com/pub/eda/verilog/

Por ejemplo:

root@devuan:~# cd /usr/local/src/
root@devuan:/usr/local/src# wget ftp://ftp.icarus.com/pub/eda/verilog/v10/verilog-10.2.tar.gz

Extraer el paquete:

root@devuan:/usr/local/src# tar xzf verilog-10.2.tar.gz 
root@devuan:/usr/local/src# cd verilog-10.2

El archivo README.txt contiene las instrucciones de instalación y dependencias necesarias:

root@devuan:/usr/local/src/verilog-10.2# less README.txt

Instalar dichas dependencias (en caso de que aún no estén instaladas en el sistema):

root@devuan:/usr/local/src/verilog-10.2# apt-get install g++ bison flex

Luego se debe configurar las opciones de compilación. El script de configuración incluye la ayuda accesible mediante la opción --help:

root@devuan:/usr/local/src/verilog-10.2# ./configure --help

A modo de ejemplo, se configura el paquete utilizando el directorio de instalación /usr/local/iverilog:

root@devuan:/usr/local/src/verilog-10.2# ./configure --prefix=/usr/local/iverilog

Compilar y verificar:

root@devuan:/usr/local/src/verilog-10.2# make
root@devuan:/usr/local/src/verilog-10.2# make check

Finalmente, instalar el paquete:

root@devuan:/usr/local/src/verilog-10.2# make install

Verificar el correcto funcionamiento del compilador:

root@devuan:~# export PATH=$PATH:/usr/local/iverilog/bin/
root@devuan:~# iverilog
iverilog: no source files.

Usage: iverilog [-ESvV] [-B base] [-c cmdfile|-f cmdfile]
                [-g1995|-g2001|-g2005|-g2005-sv|-g2009|-g2012] [-g<feature>]
                [-D macro[=defn]] [-I includedir]
                [-M [mode=]depfile] [-m module]
                [-N file] [-o filename] [-p flag=value]
                [-s topmodule] [-t target] [-T min|typ|max]
                [-W class] [-y dir] [-Y suf] [-l file] source_file(s)

See the man page for details.

A continuación se debe agregar la ruta a los binarios de Icarus Verilog al PATH. Crear un archivo dentro del directorio /etc/profile.d/:

root@devuan:~# nano /etc/profile.d/iverilog.sh

Agregar la siguiente línea:

export PATH=$PATH:/usr/local/iverilog/bin/

Fin de la instalación de Icarus Verilog desde los fuentes:

root@devuan:~# exit

En la sesión del usuario, recargar el entorno de Bash:

emi@devuan:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
emi@devuan:~$ source /etc/profile
emi@devuan:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/iverilog/bin/

Compilar y simular un circuito con Icarus Verilog

En el artículo Primeros pasos con Icarus Verilog en Windows demostré el desarrollo de un flip-flop JK activado por flanco descendente de reloj, junto con los conceptos básicos del lenguaje Verilog. Es posible descargar el código fuente en el siguiente enlace: ffjk.v.

Los pasos para compilar y simular el diseño son exactamente iguales a Windows, salvo que cambia el intérprete de línea de comandos (ahora es Bash). Compilar el diseño ejecutando:

emi@devuan:~$ iverilog -o ffjk ffjk.v

Como resultado de la compilación se genera el archivo ffjk:

emi@devuan:~$ ll ff*
-rwxr-xr-x 1 emi emi 4122 Aug 23 17:33 ffjk
-rwxr-xr-x 1 emi emi 1331 Aug 23 17:32 ffjk.v

Correr la simulación con vvp:

emi@devuan:~$ vvp ffjk
VCD info: dumpfile ffjk.vcd opened for output.

El resultado de la corrida queda almacenado en el archivo ffjk.vcd:

emi@devuan:~$ ll ff*
-rwxr-xr-x 1 emi emi 4122 Aug 23 17:33 ffjk
-rwxr-xr-x 1 emi emi 1331 Aug 23 17:32 ffjk.v
-rw-r--r-- 1 emi emi  680 Aug 23 17:33 ffjk.vcd

Instalar GTKWave

A fin de visualizar la evolución de las señales a lo largo del tiempo, instalar el visor GTKWave:

root@devuan:/home/emi# apt-get install gtkwave

Abrir el archivo ffjk.vcd con GTKWave:

emi@devuan:~$ gtkwave ffjk.vcd

Se observa el resultado esperado. Para más información sobre el diseño y desarrollo de este circuito, al igual que uso y opciones de GTKWave, revisar nuevamente le artículo Primeros pasos con Icarus Verilog en Windows.

Referencias


Tal vez pueda interesarte


Compartí este artículo