GHDL y GTKWave en Debian


150414
, 7.2
090515, 8.0


Proyecto GHDL

GHDL es un compilador de código abierto para el lenguaje VHDL. GHDL permite la compilación y ejecución de código VHDL directamente en la PC. Combinado con un analizador de ondas gráfico (GTKWave) y un editor de texto (VIM), GHDL es una herramienta poderosa para la escritura, prueba y simulación de circutos descritos con VHDL.

GHDL está basado en el compilador GCC de GNU y puede ejecutarse en Linux, winbugs y Apple OS X. Se pueden obtener los binarios para un sistema operativo en específico o se puede compilar a partir del código fuente para un arquitectura en específico.



Debian 6.0.7 y anteriores

La comunidad de Debian aceptó los proyectos de ghdl y gtkwave como parte de la distrubución desde su versión 5.0. Al ser paquetes oficiales, su instalación se lleva a cabo con las herramientas tradicionales de gestión de paquetes de Debian: dpkg, apt, dselect, synaptic, etc. 

Utilizando el apt se pueden acceder a los DVDs de instalación o a los repositorios en red. Para mayor información acerca de instalación de paquetes con la herramienta se puede consultar en esta página

Si está bien configurado nuestro archivo de fuentes (/etc/apt/sources.list), bastará con buscar e instalar la aplicación para que el sistema de paquetes resuelva las dependencias e instale software complementario:

#apt-cache search ghdl
ghdl - VHDL compiler/simulator using GCC technology


Instalamos el ghdl y los paquetes tanto dependientes como sugueridos:

#apt-get install ghdl

Building dependency tree

Reading...
The following extra packages will be installed:
   gnat-4.3 libgnat-4.3 libgnatprj zliblg-dev
...


Como se puede observar, GHDL utiliza el lenguaje de programación Ada, por lo que depende del compilador y las bibliotecas, además de un compresor de binarios.

En caso de estar accediendo a los DVDs de instalación, se solicitarán en la siguiente secuencia: 2, 1, 3.


El GTKWave se instala de manera similar, desde un DVD o desde algún repositorio con el mismo comando:

root@kro:~# apt-get install gtkwave

GTKWave también tiene algunas dependencias que deberá resolver con el comando anterior, sin embargo probamos que esten instaladas las dependencias antes de instalar el GTKWave:


root@kro:~# apt-get install libjudydebian1 gtk8.5 tcl8.5 



Debian 7 Wheezy

Debido a la falta de mantenimiento de los desarrolladores, la comunidad de Debian decidió no incluir el proyecto GHDL a partir de la distribución Debian 7.0.0 Wheezy.

La instalación se puede hacer de varias formas de acuerdo a la experiencia de cada usuario. La más compleja consiste en compilar desde el código fuente, ya que se debe compilar el GHDL como parte de GCC.

Un método más sencillo es obtener un paquete .deb e instalarlo con las herramientas de gestón de paquetes.
Los paquetes .deb son archivos que contienen binarios, documentación y manuales, los cuales son gestionados por el administrador de paquetes de Debian y deben ser construidos con herramientas de la distribución Debian. Este paquete es precisamente lo que ya no pudieron hacer los responsables del proyecto.

Para saber qué paquete .deb se debe bajar, se debe verificar la arquitectura del CPU:

root@kro:~# uname -m
i686

y la versión de Debian:

root@kro:~# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 7.0 (wheezy)
Release:        7.0
Codename:       wheezy

Además será necesario instalar algunas dependecias.

root@kro:~# apt-get install libgnat-4.6

root@kro:~# apt-get install zlib1g-dev

 
Los paquetes construidos con GCC 4.6, para Debian 7.2 se listan a continuación:


Descripción Archivo
Paquete Debian para 32-bit x86 ghdl_0.30~svn20130213-2_i386.deb
Paquete Debian para 64-bit x86 ghdl_0.30~svn20130213-2_amd64.deb
Paquete Ubuntu para 32-bit x86 ghdl_0.30~svn20130213-2ubuntu1_i386.deb
Paquete Ubuntu para 64-bit x86 ghdl_0.30~svn20130213-2ubuntu1_amd64.deb
Código fuente
ghdl_0.30~svn20130213-2.dsc
ghdl_0.30~svn20130213.orig.tar.gz
ghdl_0.30~svn20130213-2.diff.gz

Los paquetes para Debian 7.4 se pueden encontrar aquí.

Una vez obtenido el archivo correcto, se instala con las herramientas de gestores de archivos, por ejemplo:

 

root@kro:~#dpkg -i ghdl_0.30~svn20130213-2_i386.deb

El GTWave aún está incluido en la distribución Debian 7 wheezy, asi que puede instalar desde un DVD o desde algún repositorio.  Antes de intentar instalar GTKWave, probamos que esten instaladas las dependencias:


root@kro:~# apt-get install libjudydebian1 gtk8.5 tcl8.5 

El instalador nos indicara si ya estan instaladas las dependencias o las instalara.

root@kro:~# apt-get install gtkwave





Debian 8 Jessie

Para esta versión de Debian serán necesarias las mismas dependencias, pero en una versión actualizada:

root@kro:~# apt-get install libgnat-4.9

root@kro:~# apt-get install zlib1g-dev

Si aún no están disponibles paquetes deb para esta distribución (mayo de 2015), será necesario obtener los binarios construidos para la arquitectura que tenemos o compilar desde el código fuente. En este enlace se puede obtener un paquete tar con binarios compilados para i686. También se puede obtener con el siguiente comando:


oskr@kro:~$ wget http://ce.azc.uam.mx/profesores/oalvarado/linux/ghdl-i686-linux-latest.tar.bz2


Des-empaquetamos e ingresamos al directorio creado:


oskr@kro:~$ tar -xvf ghdl-i686-linux-latest.tar

oskr@kro:~$ cd ghdl-0.29-i686-pc-linux


Leemos el archivo que contiene las instrucciones de  instalación,  e instalamos como superusuario:


oskr@kro:~/ghdl-0.29-i686-pc-linux$ su
password:


root@kro:/home/oskr/ghdl-0.29-i686-pc-linux# tar -C / -jxvf ghdl-0.29-i686-pc-linux.tar.bz2


Para Debian 8 Jessie, el GTWave sigue siendo parte de la distribución, asi que puede instalar desde un DVD o desde algún repositorio, como ya se describió.


root@kro:~# apt-get install gtkwave



Compilación e instalación de GHDL

El código fuente se puede obtener en la página del proyecto GHDL.

root@kro:~#dpkg-source ghdl_0.30~svn20130213-2_i386
root@kro:~#dpkg-buildpackage ghdl_0.30~svn20130213-2_i386




Ejemplo de prueba

A continuación se muestra el código de un inversor y un generador de estímulos, ambos en VHDL.

Creamos un directorio con el nombre del proyecto, que en este caso será:

oskr@kro:~$ mkdir inversor

ingresamos al directorio de trabajo:

oskr@kro:~$ cd inversor

nótese como nuestro promp muestra la ruta de trabajo:

oskr@kro:~/inversor$


Para desarrollar el código utilizamos un editor de texto sin marcas, como el vi, vim, nano, pico o gedit.


oskr@kro:~/inversor$ gedit compnot.vhdl


--Oscar Alvarado Nava
--Circuito que representa una compuerta NOT de una entrada


entity compnot is
   port
   (
      entrada:in bit;
      salida:out bit
   );
end entity compnot;

architecture beh of compnot is
begin
   salida <= not entrada;
end architecture beh;





Nótese que el nombre del archivo corresponde al nombre de la entidad.

Ahora editamos el archivo que contiene el código para generar las señales o estímulos (test bench) de para nuestro circuito. Dado que el circuito es como una tableta o placa de pruebas (Proto-Board), le asignamos el nombre compuesto:

oskr@kro:~/inversor$ gedit tb_compnot.vhdl



--Oscar Alvarado Nava
--Circuito de estimulos test bench o protoboard

entity tb_compnot is
end entity tb_compnot;

architecture beh of tb_compnot is
component compnot is
   port
   (
      entrada:in bit;
      salida:out bit
   );
end component compnot;

signal
ent:bit:='0';
signal sal:bit;

begin

U0:
compnot
   port map
   (
      entrada => ent,
       salida => sal
   );


process
begin

  wait for 10 ns;
     ent <= '1';
  wait for 10 ns;
     ent <= '0';

end process;
end architecture beh;





Editados el archivo con la descripción de nuestra compuerta y el archivo de estímulos, se invoca a ghdl para su análisis:

oskr@kro:~/inversor$ ghdl -a compnot.vhdl
oskr@kro:~/inversor$ ghdl -a tb_compnot.vhdl

Generamos el ejecutable al enlazar los módulos (objetos) creados:

oskr@kro:~/inversor$ ghdl -e tb_compnot

Se ejecuta el archivo pasando como parámetros el tiempo máximos de simulación (100 nano segundos) y el archivo en donde se guardarán los resultados (tb_compnot.vcd):

oskr@kro:~/inversor$./tb_compnot --stop-time=100ns --vcd=tb_compnot.vcd

Finalmente visualizamos los resultados por medio de gtkwave

oskr@kro:~/inversor$ gtkwave tb_compnot.vcd