Saltar al contenido

¿Cómo compilo y ejecuto un programa VHDL en Mac con ghdl?

Este grupo de expertos luego de algunos días de investigación y de juntar de datos, obtuvimos los datos necesarios, deseamos que te sea de gran utilidad para tu proyecto.

Solución:

¡Eso, como dicen, es una gran pregunta!

Hay una versión de ghdl para OS X que se ejecuta en procesadores Intel para las versiones 10.5, 10.6, 10.7 y 10.8 disponible en ghdl.free.fr (se puede descargar en GHDL para Mac OS X). Es la versión mcode (como en Windows), lo que significa que no produce códigos de objeto o un ejecutable independiente de un modelo VHDL con la consecuencia de que no puede vincular objetos extraños (subprogramas) al modelo.

El modelo elaborado solo existe en la memoria en tiempo de ejecución y el comando -e elaborate es superfluo salvo una entrada en el archivo .cf de la biblioteca de trabajo. En una versión mcode de ghdl, el comando -r run también se elabora. Todo lo que verá es el archivo work-obj93.cf para el directorio de trabajo y cualquier archivo .cf para las bibliotecas previamente analizadas, de manera predeterminada, estos se mostrarán en / usr / local / ghdl / libraries, el ejecutable ghdl que se encuentra en / usr / local / bin enlaza con / usr / local / ghdl / translate / ghdldrv / ghdl_mcode, y / usr / local / ghdl es un árbol simplificado resultante de la compilación de la versión ghdl_mcode.

Esta versión se deriva de svn129 (después de la versión ghdl-0.29) y contiene un binario i386.

La documentación para ghdl se encuentra en / usr / local / ghdl / doc /, está la página de manual de ghdl que está vinculada a otra parte, ghdl.html y ghdl.texi, que son el manual de ghdl y no están vinculadas a otra parte. En ghdl.html, puede buscar cada aparición de ‘Windows’ para encontrar una referencia a la versión de mcode. Como descuido, no pensé en modificar el manual de ghdl para incluir la palabra mcode dondequiera que apareciera Windows y lanzar el manual modificado.

Dondequiera que aparezca ‘Windows’, debe leerse como ‘Windows u otra versión de código m’.

En el manual de ghdl, consulte 1.3 ¿Qué es GHDL? (La versión de Windows (TM) de GHDL no se basa en GCC sino en un generador de código interno). También 2.1 El programa hello world:

2.1 The hello world program

Para ilustrar el gran propósito de VHDL, aquí hay un programa VHDL comentado “Hola mundo”.

 --  Hello world program.
 use std.textio.all; --  Imports the standard textio package.

 --  Defines a design entity, without any ports.
 entity hello_world is
 end hello_world;

 architecture behaviour of hello_world is
 begin
    process
       variable l : line;
    begin
       write (l, String'("Hello world!"));
       writeline (output, l);
       wait;
    end process;
 end behaviour;

Suponga que este programa está contenido en el archivo hello.vhdl. Primero, debes compilar el archivo; esto se denomina análisis de un archivo de diseño en términos VHDL.

 $ ghdl -a hello.vhdl

Este comando crea o actualiza un archivo work-obj93.cf, que describe la biblioteca ‘trabajo’. En GNU / Linux, este comando genera un archivo hello.o, que es el archivo objeto correspondiente a su programa VHDL. El archivo de objeto no se crea en Windows.

Luego, debes crear un archivo ejecutable.

 $ ghdl -e hello_world

La opción ‘-e’ significa elaborado. Con esta opción, GHDL crea código para elaborar un diseño, con la entidad ‘hola’ en la parte superior de la jerarquía.

En GNU / Linux, el resultado es un programa ejecutable llamado hello que se puede ejecutar:

 $ ghdl -r hello_world

o directamente:

 $ ./hello_world

En Windows, no se crea ningún archivo. La simulación se inicia con este comando:

 > ghdl -r hello_world

El resultado de la simulación aparece en la pantalla:

 Hello world!

Guardando el código fuente para el comando hello_world en el archivo hello.vhdl y ejecutando los comandos:

[email protected]: ghdl -a hola.vhdl

[email protected]: ghdl -e hello_world

[email protected]: ghdl -r hello_world

Rendimientos:

¡Hola Mundo!

en salida estándar (la sesión TTY en la ventana de su terminal).

Terminará con un archivo de configuración de biblioteca work-obj93.cf en el directorio de trabajo actual y ningún otro archivo de salida. También querrá comprender las implicaciones del comando -r run (sección 3.1.3), sin que se pase una unidad secundaria opcional en la línea de comandos, por defecto VHDL a la última arquitectura compilada.

Al obtener gtkwave gtkwave.app de Tony Bybell, la documentación se encuentra en /Applications/gtkwave.app/Contents/Resources/doc, tanto un archivo fuente .odt como un archivo PDF. (Puede seleccionar una aplicación en la carpeta Aplicaciones y ‘Mostrar contenido del paquete’ para navegar al directorio de documentos).

Hay un formato de forma de onda exclusivo de ghdl llamado ghw, que se puede invocar con la opción de comando de ejecución ‘–wave = .ghw’. Consulte el manual de ghdl 4.1 Opciones de simulación. Consulte también las opciones de vcd en ese directorio si decide utilizar VCD en su lugar.

También debe limitar la duración del tiempo de ejecución con un temporizador de protección en caso de que su banco de pruebas proporcione un reloj de funcionamiento gratuito. VHDL solo dejará de ejecutarse cuando no haya más actualizaciones de señales programadas o el tiempo de ejecución se agote. Esta es una opción de comando de ejecución en la línea de ‘–stop-time = 587200ns’.

El gtkwave.app de OS X es sensible a dos tipos de archivos con extensiones .ghw y .gtkw, el primero el archivo de volcado de forma de onda ghdl, el segundo archivo de configuración de gtkwave con un sufijo de OS X que permite la invocación de gtkwave haciendo clic en el archivo gtkw. El archivo de configuración debe guardarse después de configurar la visualización de su forma de onda en gtkwave antes de que exista. Consulte el manual de gtkwave. Se puede hacer clic en un archivo ghw y gtkwave tiene un conjunto de reglas que se utilizan para buscar el archivo gtkw correspondiente.

Hay un par de ventajas al utilizar el formato de archivo ghw. La invocación automática de la aplicación gtkwave haciendo clic en los archivos es una. Otra es que ghdl guarda todas las transacciones de señales en su archivo de volcado ghw. Siempre puede seleccionar más en gtkwave para mostrar más información. Si bien esto puede ser una desventaja en modelos grandes, el formato ghw permite la visualización literal de enumeración de cualquier tipo o subtipo.

Unirse a la lista de discusión de GHDL y publicar una pregunta es una buena manera de atraer la atención de los expertos de ghdl. (Y sí, el certificado de gna.org está caducado o no es válido). Tony Bybell proporciona un contacto por correo electrónico en la página web de gtkwave, pero las exigencias del empleo remunerado limitan su disponibilidad.


Elaborando el uso de ghdl y gtkwave con un ejemplo.

El póster original pedía algunos ejemplos reales con valores de línea de comando. Sin embargo, hay un tutorial de GHDL / GTKWave deficiente (PDF, 234 KB) que contiene un ejemplo y un VCD usado.

Enumeraré las líneas de comando para una versión de formato de forma de onda GHDL:

[email protected]: ghdl -a CarryRipple.vhd

[email protected]: ghdl -a CarryRipple_tb.vhd

[email protected]: ghdl -e carryRipple_tb

[email protected]: ghdl -r carryRipple_tb –wave = carryRipple_tb.ghw

La invocación de gtkwave.app se puede hacer haciendo clic en el carryRipple_tb.ghw resultante o usando el comando open de OS X:

[email protected]: abierto -a gtkwave carryRipple_tb.ghw

La ventana SST de Gtkwave (arriba a la izquierda) se mostrará en la parte superior, se expandirá haciendo clic en el cuadro +. Haga lo mismo para el carryripple_tb revelado. Haga clic en a. En la ventana de señales, seleccione un[3:0] y presione el botón Insertar. Repita para b.

En la ventana SST seleccione U0 y luego en la ventana de señales seleccione cin presione el botón de inserción y luego lo mismo para cout.

En la ventana SST seleccione s, y en la ventana de señales seleccione s[3:0] y presione insertar.

Y sí, obtener la fuente de los dos archivos VHDL del ‘tutorial’ fue doloroso. Yo no lo hice.

También puede notar la asignación de ‘X’ a Cin a 60 ns en la pantalla gtkwave, lo hice para mostrar los últimos valores asignados en el banco de pruebas.

No diría que es un buen tutorial, pero aquí está obteniendo lo que pagó. Hacerlo mejor habría sido una pregunta más grande.

El banco de pruebas (carryRipple_tb.vhd) proporciona un estímulo para conducir el modelo (CarryRipple.vhd) durante la simulación. El modelo deja de ejecutarse después del último evento de señal, por lo que no es necesario pasar el tiempo de parada al comando de ejecución (por ejemplo, –stop-time = 587200ns).

También hay un tutorial de GHDL / GTKWave de cinco partes en Youtube por Chad Kersey. La resolución no es tan buena y está centrada en Linux. La parte 0 trata sobre la instalación de las dos herramientas. La única diferencia real en mi ejemplo es usar el formato de forma de onda ghw. La mayoría de los navegadores le permitirán ver la ventana de gtkwave a tamaño completo.

ingrese la descripción de la imagen aquí

adicional

Hay una respuesta reciente que muestra una demostración con un Toggle Flip Flop, que muestra un error en el código VHDL original y tres posibles soluciones. Utiliza declaraciones de configuración para ejecutar las distintas versiones fijas. Vea cómo evitar retrasos en la salida de una declaración de proceso simple en VHDL.

Una nueva versión de Mac OS X gcc de GHDL

Hay una nueva versión de ghdl disponible en ghdl-updates / Builds / ghdl-0.31 / OSX, una versión de gcc que incluye la versión de mcode.

Solo se sabe que se ejecuta en OS X 10.9, pero creo que ejecutaría OS X 10.8 si Xcode y sus herramientas de línea de comandos estuvieran instaladas; la versión gcc actualmente depende de / usr / bin / as y / usr / bin / ld, que son parte del paquete essentials que instala OS X 10.9 y está disponible al instalar las herramientas de línea de comandos de Xcode en OS X 10.8.

Una vez instalada esta versión de ghdl, en una terminal puede

info ghdl

Desplácese hacia abajo hasta Comenzando con GHDL, presionando retorno de carro. Desplácese hacia abajo hasta El programa Hola mundo (retorno de carro), Un sumador completo (retorno de carro) o Comenzando con un diseño (retorno de carro). El primero es un programa VHDL hello world, el segundo es un sumador de un bit con un banco de pruebas. Comenzar con un diseño lo lleva a un enlace de descarga e instrucciones para una simulación de procesador DLX.

Estoy planeando desarrollar una versión 10.6 – 10.9 gcc de ghdl que no depende de Xcode para 10.6 – 10.8 y se ejecuta en 10.9. Probablemente sea la versión 0.32 de ghdl.

La aplicación gtkwave.app de Tony Bybell se ejecuta en OS X 10.6 – 10.9 y está disponible junto con su manual en la página GTKWave SourceForge. La última versión de la aplicación se puede descargar desde este enlace en Sourceforge – gtkwave.zip.

Hay varios tutoriales de ghdl / gtkwave disponibles en YouTube, aunque ninguno es específico de OS X, intente buscar en Google.

ghdl tiene su propio formato gtkwave, GHW, que es compatible con VHDL y le permite mirar en tipos compuestos complejos. ghdl-0.33 probablemente también incluirá soporte para el formato FSB de Tony Bybell.

Los más aventureros pueden compilar ghdl desde cero en OS X; consulte las Instrucciones para compilar ghdl-0.31 con gcc4.8.2 en OS X 10.9. La construcción con gcc4.9.1 requeriría la versión ghdl-0.32 disponible en el archivo de Mercurial que se encuentra aquí. Cuando se publique la versión ghdl-0.32, los binarios también estarán disponibles en Sourceforge.

El sitio de Sourceforge ghdl-updates es la ubicación para la actividad de desarrollo de ghdl en curso por el autor de ghdl, Tristan Gingold.

Además de unirse a la lista de discusión de ghdl o examinar sus archivos, puede presentar informes de errores en la página de tickets de ghdl-updates, donde puede ver los problemas abiertos y cerrados.

El futuro del desarrollo de ghdl es brillante. Se espera que las versiones futuras se centren en el cumplimiento de IEEE Std 1076-2008 en un futuro próximo. También hay un desarrollo hacia el uso de ghdl como una interfaz de llvm, así como puramente versión interpretativa para reemplazar ghdl-mcode.

Es posible con las versiones binarias de ghdl y gtkwave separar al usuario del desarrollador.

Si te ha resultado provechoso este artículo, agradeceríamos que lo compartas con el resto juniors y nos ayudes a difundir nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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