Overleaf Community Edition Server: Latex editor | Luciano's tech see the web in desktop mode to better experience | 469 OS | 304 OS Pi 4B | 73 OS Pi5
Analizador, compilador, simulador y sintetizador (experimental) de código abierto para VHDL, un lenguaje de descripción de hardware (HDL). GHDL no es un intérprete: le permite analizar y elaborar fuentes para generar código máquina a partir de su diseño. La ejecución de programas nativos es la única forma de simular a alta velocidad.
Soporte completo para las versiones 1987, 1993 y 2002 del estándar IEEE 1076 VHDL, y parcial para las revisiones de 2008 y 2019.
Uso de GHDL para crear archivo .vcd para GTKWave:
Creamos nuestro archivo .vhdl con cualquier editor de texto.
Abrimos una terminal donde se encuentre dicho archivo y realizamos los siguientes pasos: Detalle de la Sintaxis utilizada.
ghdl -s archivo.vhdl
ghdl -s archivo_tb.vhdl
ghdl -a archivo.vhdl
ghdl -a archivo_tb.vhdl
ghdl -e archivo_tb
ghdl -r archivo_tb
ghdl -r archivo_tb --vcd=archivo.vcd
Abrimos el .vcd creado con GTKWave:
gtkwave archivo.vcd
Es un visor de ondas con todas las funciones basado en GTK para Unix, Win32, y Mac OSX. Soporta varios formatos de archivo, incluyendo FST, LXT, LXT2, Archivos VZT, GWW y Verilog VCD/EVCD estándar. Se utiliza principalmente para depuración de modelos de simulación Verilog o VHDL, GTKWave está diseñado para el análisis posterior, mediante el análisis de archivos de volcado en lugar de una interacción en tiempo real durante las simulaciones. Permite la visualización de datos analógicos y digitales, admite diversas operaciones de búsqueda, y permite a los usuarios guardar "señales de interés" extraídas de un archivo completo volcado de simulación. Además, GTKWave puede generar salidas en Formatos PostScript y FrameMaker para documentación impresa.
Es un diseñador de lógica digital fácil de usar y un simulador de circuitos diseñado con fines educativos.
Visualización de los estados de la señal con gráficos de medición.
Modo de compuerta única para analizar oscilaciones.
Análisis y síntesis de circuitos combinatorios y secuenciales.
Pruebas sencillas de circuitos: Puede crear casos de prueba y ejecutarlos para verificar su diseño.
Muchos ejemplos: Desde un flip-flop tipo D hasta una CPU completa (simple) de un solo ciclo similar a MIPS.
Incluye un editor sencillo para máquinas de estado finito (FSM). Un FSM que se puede convertir en una tabla de transición de estado y en un circuito que implemente el FSM. (Ver captura)
Contiene una biblioteca con los circuitos integrados de la serie 74xx más utilizados.
Soporta circuitos genéricos. Esto permite la creación de circuitos que se pueden parametrizar cuando se utilizan. De esta manera, es posible, por ejemplo, crear un barrel shifter con un ancho de bit seleccionable.
Buen rendimiento: El procesador de ejemplo puede funcionar a 120 kHz.
Soporta circuitos grandes: El ejemplo de "Conway's Game of Life" consta de unos 2400 componentes activos y funciona bien.
Es posible utilizar componentes personalizados que se implementan en Java y se empaquetan en un archivo jar. Consulte este ejemplo para obtener más información.
Interfaz TCP remota sencilla que, por ejemplo, permite que un IDE de ensamblador controle el simulador.
Los componentes se pueden describir mediante VHDL o Verilog. El simulador VHDL de código abierto ghdl debe instalarse para simular un componente definido por VHDL, y el simulador Verilog de código abierto Icarus Verilog es necesario para simular un componente definido por Verilog.
Un circuito se puede exportar a VHDL o Verilog. También hay soporte directo para la placa BASYS3 y la placa TinyFPGA BX. Consulte la documentación para obtener más información. La carpeta examples contiene una variante de la CPU de ejemplo, que se ejecuta en una placa BASYS3.
Exportación directa de archivos JEDEC que se pueden flashear a un GAL16v8 o un GAL22v10. Estos chips están algo anticuados (¡introducidos en 1985!) pero suficiente para ejercicios para principiantes, fácil de entender y bien documentado. También los chips ATF150x estan soportados ofreciendo hasta 128 macro-celdas y en la programación del sistema. Consulte la documentación para obtener más información.
Exportación SVG de circuitos, incluyendo una versión SVG compatible con LaTeX/Inkscape (ver ctan)
No hay código heredado.
Buena cobertura de pruebas (alrededor del 80%; Ni las pruebas de GUI ni las pruebas de integración del simulador HDL se ejecutan en el Travis-CI construye servidores, por lo que CodeCov mide solo alrededor del 50%). Casi todos los ejemplos contienen casos de prueba que garantizan su correcto funcionamiento.
Digital crea Testbench automáticamente desde el Circuito si se usa la herramienta Test:
Si, por ejemplo, realizamos un circuito desde su expresión o realizando las conexiones, luego usamos la opción Análisis -> Archivo -> Exportar el caso de prueba, copiamos su contenido, vamos al árbol de componentes, elegimos en Varios -> Caso de Prueba lo editamos por separado, pegamos la TV generada y le damos al boton OK, vamos a Archivo -> Exportar -> Exportar VHDL, Guardamos con algún nombre, se guardan 2 archivos:
archivo.vhdl
archivo_Y_tb.vhdl
GHDL Requiere GLIBC 2.34 y Bullseye tiene la versión 2.31
GHDL Requiere GLIBC 2.34, Bookworm viene con GLIBC 2.36.
Bulleyes-Bookworm
Con el tiempo variará la versión
Instala la versión V4.0.1 de GHDL y Digital
Descripción compuerta OR:
library ieee;
use ieee.std_logic_1164.all;
entity or_gate is
port(B, A : in std_logic; Z : out std_logic);
end or_gate;
architecture RTL of or_gate is
begin
Z <= B or A;
end RTL;
Colocamos las entradas según nuestra teoría B es el MSB. Guardado con el nombre de la entidad : or_gate.vhd
Creación del Testbench:
library ieee;
use ieee.std_logic_1164.all;
-- Se crea una entidad vacia
entity tb_or_gate is
end tb_or_gate;
architecture Behavioral of tb_or_gate is
-- Se copia la entidad de la descripcion creada.
-- Se coloca entre architecture y begin.
-- Se cambia la palabra entity por component y el nombre de la entidad en end por component.
component or_gate is
port(B, A : in std_logic; Z : out std_logic);
end component;
-- Declaramos las signals del mismo tipo que las entras y salidas: std_logic.
signal B, A, Z : std_logic := '0';
begin
-- Instanciamos la unidad bajo prueba. Asignando nuestras entradas y salidas a unas segnales que debemos declarar luego del componente
ORGATE : or_gate port map(
B => B,
A => A,
Z => Z);
-- Creamos el proceso llamado Stimulus
Stimulus_process: process
begin
-- Se asigna valores a las signals con un retardo de 100 nano segundos
-- Es pasar la TV al parecer, y se indica un wait final
B <= '0'; A <='0'; wait for 100 ns;
B <= '0'; A <='1'; wait for 100 ns;
B <= '1'; A <='0'; wait for 100 ns;
B <= '1'; A <='1'; wait for 100 ns;
wait;
end process;
end Behavioral;
-- Final del Testbench
Se guarda con el nombre de la entidad: tb_or_gate.vhd
Generamos el .vcd para verlo con GTKWave abriendo una Terminal donde se encuentran nuestro Testbench:
ghdl -s or_gate.vhd
ghdl -s tb_or_gate.vhd
ghdl -a or_gate.vhd
ghdl -a tb_or_gate.vhd
ghdl -e tb_or_gate
ghdl -r tb_or_gate
ghdl -r tb_or_gate --vcd=or_gate.vcd