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)
|
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
entity hola_mundo is
architecture beh of hola_mundo is
|
Para la compilación utilizamos el siguiente Makefile:
GHDL=ghdl CC=gcc
all: hola_mundo
hola_mundo: test.o holac.o
test.o: hola_mundo.vhdl
clean:
|
A continuación compilamos con make
$ make
ghdl -a hola_mundo.vhdl
|
y ejecutamos el programa:
$ ./hola_mundo Hola desde VHDL... Hola desde C... $ |