Post on 04-Jul-2020
transcript
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
GtkWave
Final
Simulación de VHDL con Software Libre
Ing. Rodrigo A. Melo, Ing. Salvador E. Tropea
Instituto Nacional de Tecnología IndustrialCentro de Electrónica e Informática
Laboratorio de Desarrollo Electrónico con Software Libre
12 de julio de 2010
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
VHDL
Software Libre
GHDL
Ejemplo
GtkWave
Final
Introducción
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
VHDL
Software Libre
GHDL
Ejemplo
GtkWave
Final
VHDL
Definido en
Estándar 1076 de IEEE
VHDL
VHSIC + HDL
Donde:
VHSIC: Very High Speed Integrated Circuit
HDL: Hardware Description Language.
Uso principal
Realizar descripciones de hardware a utilizar con PLDs,
FPGAs, ASICs y similares.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
VHDL
Software Libre
GHDL
Ejemplo
GtkWave
Final
Software Libre
Una definición muy sencilla
Denominación del software que respeta la libertad de los
usuarios.
Un Software se considera Libre si garantiza
Libertad Descripción
0 Usarlo con cualquier propósito
1 Estudiar cómo funciona y modificarlo
2 Distribuir copias
3 Mejorarlo y hacer públicas esas mejoras
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
VHDL
Software Libre
GHDL
Ejemplo
GtkWave
Final
VHDL + Software Libre
VHDL con software privativo
Las herramientas de software propietarias son costosas y
algunas han implementado características que hasta violan
el estándar VHDL.
VHDL con Software Libre
Las herramientas Libres que presentaremos, están lo
suficientemente maduras para su uso en ámbitos
educativos y en proyectos de mediana envergadura.
Además, el uso de Software Libre y la utilización de
estándares, promueve la independencia tecnológica, la
portabilidad de lo desarrollado y la posibilidad de ser
abordado por cualquiera con acceso a una PC, sin la
necesidad del pago de licencias.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Introducción
Comandos
Opciones
Simulación
Ejemplo
GtkWave
Final
GHDL
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Introducción
Comandos
Opciones
Simulación
Ejemplo
GtkWave
Final
Introducción
¿Qué es GHDL?
Simulador de VHDL, que implementa los estándares IEEE 1076-1987
(VHDL87), IEEE 1076-1993 (VHDL93) y algunas características del
IEEE 1076-2000 (VHDL00). Es Software Libre.
¿Qué no es GHDL?
No es una herramienta de síntesis. No puede generar un netlist .
Técnicamente es un compilador
En función de las descripciones VHDL, genera un archivo binario o
ejecutable, utilizando el compilador GCC como back-end , sin usar
lenguajes intermedios como C o C++. La simulación consiste en la
ejecución del archivo resultante, el cuál permite además generar
archivos de formas de onda.
Compila correctamente
Procesadores como DLX o el LEON1.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Introducción
Comandos
Opciones
Simulación
Ejemplo
GtkWave
Final
Formato de comando
Formato de comando
ghdl comando [opciones...] [archivos/unidades...]
El primer argumento es un comando.
Las opciones modifican la acción del comando.
No se permiten opciones antes de un comando.
Unidades hace referencia a entidades,
configuraciones, arquitecturas, etc.
En general, no se permiten opciones luego de los
archivos/unidades.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Introducción
Comandos
Opciones
Simulación
Ejemplo
GtkWave
Final
Comandos más utilizados (I)
Analisis
ghdl -a [opciones] archivos
Controla la sintasis y compila uno o más archivos.
Los archivos se analizan en el orden suministrado.
Aborta en caso de error sin analizar al resto de
archivos.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Introducción
Comandos
Opciones
Simulación
Ejemplo
GtkWave
Final
Comandos más utilizados (II)
Elaboración
ghdl -e [opciones] unidad_primaria [unidad_secundaria]
Elabora el diseño y crea un ejecutable (GNU/Linux).
unidad_primaria: entidad o configuración.
unidad_secundaria: arquitectura.
La opción -o seguida de un nombre de archivo, permite
especificar el nombre del ejecutable.
Nombre del ejecutable resultante
Nombre de la unidad_primaria si no se especifica la
unidad_secundaria.
unidad_primaria-unidad_secundaria si se especifica la
unidad_secundaria.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Introducción
Comandos
Opciones
Simulación
Ejemplo
GtkWave
Final
Analisis y elaboración automática
Importación (import)
ghdl -i [opciones] archivos...
Parsea los archivos sin analizarlos y coloca las unidades de diseño que
encuentra en la biblioteca.
Elaboración (make)
ghdl -m [opciones] unidad_primaria [unidad_secundaria]
Analiza automáticamente los archivos y elabora el diseño. Un archivo se
reanaliza cuando fue modificado o una unidad de diseño que utiliza
internamente fue modificada. Del orden de analisis se da cuenta solo.
Con la opción -f (force), se reanalizan todos los archivos.
Elaboración de Makefile
ghdl –gen-makefile [opciones] unidad_primaria [unidad_secundaria]
Funciona como el comando anterior pero solamente crea un archivo
Makefile.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Introducción
Comandos
Opciones
Simulación
Ejemplo
GtkWave
Final
Otros comandos
Ejecución
ghdl -r [opciones] unidad_primaria [unidad_secundaria]
[opciones_de_simulacion]
En GNU/Linux
Este comando simplemente determina el nombre del
ejecutable y lo corre. Las opciones son ignoradas.
Control de sintaxis
ghdl -s [opciones] archivos
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Introducción
Comandos
Opciones
Simulación
Ejemplo
GtkWave
Final
Opciones más utilizadas
–work=NOMBRE
Especifica el NOMBRE de la biblioteca de trabajo, cuyo
nombre por defecto es work.
–workdir=DIRECTORIO
Especifica el nombre del DIRECTORIO donde se coloca la
biblioteca y los archivos generados. De no especificarse, se
colocan en el directorio actual.
-PDIRECTORIO
La opción -P agrega DIRECTORIO a la lista de directorios
donde se deben buscar los archivos de biblioteca.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Introducción
Comandos
Opciones
Simulación
Ejemplo
GtkWave
Final
Otras opciones
–std=ESTANDAR
Especifica el ESTANDAR a usar. Por defecto se utiliza el
93c, que implica el VHDL-93 que acepta sintaxis de
VHDL-87. Los posibles valores son: 87, 93, 93c, 00 y 02.
–ieee=VERSION
Especifica la VERSION de biblioteca IEEE a utilizar. Los
posibles valores son: none, standard (defecto), synopsys y
mentor.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Introducción
Comandos
Opciones
Simulación
Ejemplo
GtkWave
Final
Warnings
Algunos ejemplos
–warn-reserved: informa si se utilizó una palabra
reservada de un estándar superior al utilizado.
–warn-unused: informa si un subprograma no se utilizá
nunca.
–warn-error: cuando está habilitado, los warnings son
considerados errores.
Deshabilitación
–warn-no-X.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Introducción
Comandos
Opciones
Simulación
Ejemplo
GtkWave
Final
Opciones
La simulación se lleva a cabo utilizando el archivo
ejecutable generado por la compilación mediante GDHL.
Algunas de las opciones de simulación más interesantes:
–stop-time=TIEMPO
Detiene la simulación cuando transcurrió el TIEMPO de
simulación indicado. TIEMPO se expresa con valores de
tiempo tales como 1fs, 25ns, 100ms, etc.
–vcd=NOMBREARCHIVO o –wave=NOMBREARCHIVO
Generan respectivamente un archivo en formato VCD o
GHW, con el volcado de las formas de onda resultantes de
la ejecución.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Ejemplo
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Componente
inversor.vhdl
l ib ra ry IEEE ;use IEEE . std_logic_1164 . a l l ;
en t i ty Inv isport (
entrada : in s t d _ l o g i c ;sa l i da : out s t d _ l o g i c
) ;end en t i ty Inv ;
arch i tecture RTL of Inv isbegin
sa l i da <= not ( entrada ) ;end arch i tecture RTL;
Inv, el nombre de la entidad, es el nombre de acceso a este
componente.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Testbench
inversor_tb.vhdl
l ib ra ry IEEE ;use IEEE . std_logic_1164 . a l l ;l ib ra ry s td ;use s td . t e x t i o . a l l ;
en t i ty Inv_TB isend en t i ty Inv_TB ;
arch i tecture Simulador of Inv_TB issignal entrada , sa l i da : s t d _ l o g i c ;
component Inv isport ( entrada : in s t d _ l o g i c ;
sa l i da : out s t d _ l o g i c ) ;end component Inv ;
begin
dut : Invport map( entrada => entrada , sa l i da => sa l i da ) ;
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Testbench (continuación)
inversor_tb.vhdl (continuación)
tes teo :process
var iab le l : l i n e ;begin
w r i t e ( l , s t r i n g ’ ( "∗ Comienza e l t e s t " ) ) ;w r i t e l i n e ( output , l ) ;entrada <= ’ 0 ’ ;for i in 0 to 5 loop
wait for 1 fs ;assert entrada /= sa l i da report " E r ro r " sever i ty
f a i l u r e ;wait for 1 ns ;entrada <= not ( entrada ) ;
end loop ;w r i t e ( l , s t r i n g ’ ( "∗ Terminó e l t e s t " ) ) ;w r i t e l i n e ( output , l ) ;wait ;
end process tes teo ;end arch i tecture Simulador ;
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Análisis y elaboración básica
Estado inicial del directorio:
$ ls
inversor_tb.vhdl inversor.vhdl
Análisis y elaboración:
$ ghdl -a *.vhdl
$ ghdl -e inv_tb
Estado final del directorio:
$ ls
e inv_tb.o inversor_tb.o inv_tb inversor_tb.vhdl
workobj93.cf inversor.o inversor.vhdl
Ejecución del test:
$ ./inv_tb
* Comienza el test
* Terminó el test
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Informe del assert
Provocando un mal funcionamiento del componente y ejecutando el test:
$ ./inv_tb
* Comienza el test
inversor_tb.vhdl:33:11:@1fs:(assertion failure):
Error
./inv_tb:error: assertion failed
./inv_tb:error: simulation failed
Descripción de la línea de información del assert:
inversor_tb.vhdl: nombre del archivo donde se encuentra.
33: número de fila donde se encuentra.
11: número de columna donde se encuentra.
@1fs: tiempo de simulación transcurrido.
(assertion failure): tipo.
Error: mensaje.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Paquete
inversor_pkg.vhdl
l ib ra ry IEEE ;use IEEE . std_logic_1164 . a l l ;
package Basicos iscomponent Inv is
port (entrada : in s t d _ l o g i c ;sa l i da : out s t d _ l o g i c
) ;end component Inv ;
end package Basicos ;
El nombre del componente concuerda con el de la entidad (Inv). El
nombre del paquete (Basicos) se usará junto al de la biblioteca
(Compuertas) para acceder al componente.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Testbench (modificación)
inversor_tb.vhdl (modificación)
l ib ra ry IEEE ;use IEEE . std_logic_1164 . a l l ;l ib ra ry s td ;use s td . t e x t i o . a l l ;l ib ra ry Compuertas ;use Compuertas . Basicos . a l l ;
en t i ty Inv_TB isend en t i ty Inv_TB ;
arch i tecture Simulador of Inv_TB issignal entrada , sa l i da : s t d _ l o g i c ;
begin
dut : Invport map( entrada => entrada , sa l i da => sa l i da ) ;
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Creando una biblioteca
Estado inicial del directorio:
$ ls
inversor_pkg.vhdl inversor_tb.vhdl inversor.vhdl
Análisis sin especificar la biblioteca:
$ ghdl -a *.vhdl
inversor_tb.vhdl:5:9: cannot find resource library
çompuertas"
inversor_tb.vhdl:6:16: primary unit "basicos"not
found in library çompuertas"
ghdl: compilation error
Análisis especificando la biblioteca:
$ ghdl -a -work=compuertas *.vhdl
Elaboración sin especificar la biblioteca:
$ ghdl -e inv_tb
error: cannot find entity or configuration inv_tb
ghdl: compilation error
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Creando una biblioteca (continuación)
Elaboración especificando la biblioteca:
$ ghdl -e -work=compuertas inv_tb
Estado final del directorio:
$ ls
compuertas-obj93.cf inversor_pkg.vhdl inv_tb
e inv_tb.o inversor_tb.o work-obj93.cf inversor.o
inversor_tb.vhdl inversor_pkg.o inversor.vhdl
Ejecución del test:
$ ./inv_tb
* Comienza el test
* Terminó el test
Si modificamos un archivo e intentamos elaborar:
$ ghdl -e -work=compuertas inv_tb
file inversor_tb.vhdl has changed and must be
reanalysed
ghdl: compilation error
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Especificando directorio destino
Estado inicial del directorio:
$ ls
inversor_pkg.vhdl inversor_tb.vhdl inversor.vhdl
Work
Análisis y elaboración:
$ ghdl -a -work=compuertas -workdir=Work *.vhdl
$ ghdl -e -work=compuertas -workdir=Work -o
Work/inv_tb inv_tb
Estado final del directorio:$ ls
inversor_pkg.vhdl inversor_tb.vhdl inversor.vhdl
Work
Estado del directorio destino:
$ ls Work
compuertas-obj93.cf inversor.o inversor_tb.o
e inv_tb.o inversor_pkg.o inv_tb
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Utilizando una biblioteca
Creamos la biblioteca con el componente y el paquete:
$ ghdl -a -work=compuertas -workdir=Work
inversor.vhdl inversor_pkg.vhdl
Utilizamos la biblioteca para el análisis y elaboración del testbench:
$ ghdl -a -workdir=Work -PWork inversor_tb.vhdl
$ ghdl -e -workdir=Work -PWork -o Work/inv_tb
inv_tb
Estado del directorio destino:$ ls Work
compuertas-obj93.cf inversor.o inversor_tb.o
work-obj93.cf e inv_tb.o inversor_pkg.o inv_tb
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Elaboración automática
Importmos los archivos:
$ ghdl -i -work=compuertas *.vhdl
Elaboramos el diseño:
$ ghdl -m -work=compuertas inv_tb
analyze inversor_pkg.vhdl
analyze inversor_tb.vhdl
analyze inversor.vhdl
elaborate inv_tb
Ejecución de la simulación:
$ ./inv_tb
* Comienza el test
* Terminó el test
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Elaboración automática (continuación)
Si modificamos un archivo:
$ touch inversor.vhdl
Y elaboramos:
$ ghdl -m -work=compuertas inv_tb
analyze inversor.vhdl
elaborate inv_tb
Si modificamos otro archivo:
$ touch inversor_pkg.vhdl
Y elaboramos:
$ ghdl -m -work=compuertas inv_tb
analyze inversor_pkg.vhdl
analyze inversor_tb.vhdl
elaborate inv_tb
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
Archivos I
Ejemplo I
Archivos II
Ejemplo II
Ejemplo III
Ejemplo IV
Ejemplo V
GtkWave
Final
Elaboración automática (Makefile)
Para obtener el Makefile:
$ ghdl -gen-makefile -work=compuertas inv_tb >
Makefile
Utilizando el Makefile:
$ make
ghdl -a -work=compuertas inversor_pkg.vhdl
ghdl -a -work=compuertas inversor_tb.vhdl
ghdl -a -work=compuertas inversor.vhdl
ghdl -e -work=compuertas inv_tb
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
GtkWave
Introducción
Interfaz
Ejemplo
Final
GtkWave
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
GtkWave
Introducción
Interfaz
Ejemplo
Final
Introducción
Cuando se esta haciendo el debugging de un diseño, es
muy útil poder observar las formas de ondas digitales. Para
eso se precisa un visor de formas de onda.
GtkWave
Es un visor de formas de onda Software Libre.
Soporta 2 formatos de archivos
VCD formato abierto, de texto plano, definido para el
lenguaje Verilog. La mayoría de los visores de
forma de onda soportan este formato.
GHW dado que VCD esta orientado a Verilog, no se
pueden ver todos los tipos de VHDL. Como no
existe un formato abierto para VHDL, GHDL
creo su propio formato, el cuál es binario.
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
GtkWave
Introducción
Interfaz
Ejemplo
Final
Pantalla principal del GtkWave
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
GtkWave
Introducción
Interfaz
Ejemplo
Final
Visualización de señales
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
GtkWave
Introducción
Interfaz
Ejemplo
Final
Simulando el Inversor
Corremos la simulación:$ ./inv_tb -wave=inv_tb.ghw
* Comienza el test
* Terminó el test
Abrimos el archivo con GtkWave:
$ gtkwave inv_tb.ghw
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
GtkWave
Final
Final
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
GtkWave
Final
FPGALibre
Objetivos del Proyecto
Impulsar el desarrollo con dispositivos FPGA utilizando
herramientas de Software Libre u Open Source.
Fomentar el intercambio y desarrollo de cores IP con
licencias que posean el mismo espíritu que las del
Software Libre.
Alojado en SourceForge
http://fpgalibre.sourceforge.net/
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
GtkWave
Final
¿Dudas? ¿Consultas?
Simulación deVHDL con
Software Libre
Rodrigo A.Melo,
Salvador E.Tropea
Introducción
GHDL
Ejemplo
GtkWave
Final
Gracias
Rodrigo A. Melo
rmelo@inti.gob.ar
Salvador E. Tropea
salvador@inti.gob.ar