3.7  Invocación desde otros lenguajes

Una característica muy interesante del GHDL es la posibilidad de invocar funciones o procedimientos definidos en otros lenguajes, como por ejemplo C o ADA. También se puede llamar a una simulación desde un programa externo.

Esto permite que los bancos de pruebas puedan utilizar funciones no disponibles en VHDL, como por ejemplo funciones matemáticas (senos, cosenos...) o funciones para la generación de números aleatorios.

El proceso para realizarlo lo mostraremos con un ejemplo. En el fichero holac.c está definida la función holac(), que imprime el mensaje ``hola desde C''.


#include <stdio.h>

int holac(void)
{
  printf ("Hola desde C...\n");
  return 1;
}
 

El programa VHDL es el hola mundo modificado. Además de sacar el mensaje, llamará a la función holac(). Creamos el paquete test, que contiene la definición de la función holac. Mediante el atributo foreign se indica que es externa. Todo ello está en el fichero hola_mundo.vhdl:


package test is
  function holac return integer;
  attribute foreign of holac : function is
    "VHPIDIRECT holac";
end test; 

package body test is
  function holac return integer is
  begin
    assert false severity failure;
  end holac;
end test;


use std.textio.all;
use work.test.holac; 

entity hola_mundo is
end hola_mundo; 

architecture beh of hola_mundo is
begin
  process
    variable l : line;
    variable v : integer;
  begin
    l := new string'("Hola desde VHDL...");
    writeline (output, l);
    -Invocar a la funcion de C
    v:=holac;
    wait;
  end process;
end beh;
 

Para la compilación utilizamos el siguiente Makefile:


GHDL=ghdl
CC=gcc

all: hola_mundo 

hola_mundo: test.o holac.o
            $(GHDL) -e -Wl,holac.o hola_mundo 

test.o: hola_mundo.vhdl
            $(GHDL) -a $< 

clean:
        rm -f hola_mundo *.o *.cf *~
 

A continuación compilamos con make


$ make

ghdl -a hola_mundo.vhdl
gcc -c -o holac.o holac.c
ghdl -e -Wl,holac.o hola_mundo
 

y ejecutamos el programa:


$ ./hola_mundo
Hola desde VHDL...
Hola desde C...
$
 

Juan Gonzalez 2004-10-01