VHDL en Linux

Estoy en un curso de electrónica digital en el que estaremos usando principalmente VHDL, estamos trabajando con la herramienta ISE Webpack de Xilinx, la ofrece de manera gratuita y debo reconocer que está bastante completa (de allí mismo se puede descargar ModelSim para simular).

La verdad es que recién empiezo con esto, pero como a últimas fechas he estado trabajando bastante con Linux (tengo instalada Ubuntu Breezy al lado de Windows XP), me puse a indagar si existía alguna opción para trabajar con VHDL en Linux, y si, si la hay: ghdl y gtkwave.

GHDL
Es un compilador y simulador de VHDL basado en un compilador libre del lenguaje Ada.

GTKWave
Es un visualizador de formas de onda de formatos VCD/EVCD/LXT/Synopsis que usa el toolkit GTK+ para la interfaz.


Instalar GHDL y GTKWave

  • Desde los repositorios de Ubuntu
    Si usas Ubuntu (como yo :P), en los repositorios están disponibles las versiones 0.18 de GHDL y 1.3.34 de GTKWave, para instalarlos basta con hacer uso de aptitude:

    $ sudo aptitude install ghdl
    $ sudo aptitude install gtkwave

  • Desde los paquetes Debian
    Si no cuentas con conexión a internet, los paquetes .deb se pueden descargar de http://packages.ubuntu.com.
  • Otras distribuciones o desde el código fuente
    Si usas otra distribución, checa si existe el paquete precompilado o, para instalarlo desde el código fuente, en la excelente página de Roberto Aragón se puede encontrar información y ayuda, el enlace es el que sigue:

    Simulando VHDL con herramientas GNU: GHDL + GTKWave


Pequeño ejemplo

Aquí dejo un pequeño programa de una compuerta NOT, su testbench y la visualización de formas de onda:

negador.vhd:

entity negador is
port(
a : in bit;
b : out bit
);
end negador;

architecture neg of negador is
begin
b <= not a; end neg;

negador_tb.vhd:

entity negador_tb is
end negador_tb;

architecture neg_tb of negador_tb is
component negador
port(
a : in bit;
b : out bit
);
end component;

signal a : bit;
signal b: bit;
begin
u0: negador port map( a, b );
a <= '1' after 0 ns, '0' after 5 ns, '1' after 10 ns, '0' after 15 ns; end neg_tb;

Formas de onda:

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *