¿No admite GHDL la generación infinita de relojes en testbench?

-1

Tengo un problema con una generación de reloj en GHDL. Estoy intentando simular un reloj infinito (en términos de tiempo de simulación), pero el comando en GHDL para analizar (-a) el VHD se atascó. Aquí está el código:

    library IEEE;
use IEEE.std_logic_1164.ALL;

--entity--
entity clock_ex is                   
-- nothing inside because is only an example of clock process VS clock event     
end clock_ex;

-- Architecture --

architecture CLKEX of clock_ex is

signal clk_p: std_logic :='0'; -- clock for process 2ns semiperiod
signal clk_e: std_logic :='0'; -- clock for event   1 ns

begin

clk_e <= not clk_e after 1 ns; -- change in the clock trough event
process
begin
clk_p <= not clk_p; -- change in the clock trough process
wait for 2 ns;
end process;

end;

Como puede ver, estoy tratando de generar 2 relojes, con semiperiods 1 y 2 nanosegundos respectivamente, uno de manera concurrente (activado por evento) uno de manera secuencial (dentro de un proceso). De esa manera, el análisis se atascó. Pero si modifico el proceso de esta manera:

    process
variable stop_s: integer :=100; -- to stop the process
variable count_s: integer :=0; -- counter integer 
begin
if(count_s < stop_s) then 
clk_p <= not clk_p; -- change in the clock trough process
count_s:= count_s+1; -- change in the clock trough event
wait for 2 ns;
end if;
end process;

GHDL puede analizar (-a) y elaborar (-e) el archivo. Cuando lo ejecuto (con -r), con la opción de agregar el CVD, el shell también se atasca, pero esta vez se genera el CVD, y puedo analizarlo con GTKWave, y el bheavior es correcto de acuerdo con la parada variable , la ejecución se detiene a 200 ns.

Me gustaría saber si el primer ejemplo tiene un problema en sí mismo o si GHDL no admite la generación de reloj infinita.

Gracias

    
pregunta Daniele

1 respuesta

2

Si realmente se está deteniendo en la etapa de análisis, ghdl -a , entonces tengo que preguntar qué versión de ghdl está usando.

Utilizando GHDL 0.34dev, compila (analiza y elabora) la multa y se queda en la etapa ghdl -r . Si su versión de ghdl es anterior a 0.33, actualícela desde Sourceforge o Github .

Si se mantiene en ghdl -r , parece que ghdl está haciendo exactamente lo que pides, el ejecutable se ejecuta para siempre. Has escrito una prueba con un tiempo de ejecución infinito y eso es exactamente lo que obtienes.

Pruebe ghdl -r clock_ex --help para ver más opciones de tiempo de ejecución, y ghdl -r clock_ex --stop-time=1us para detener la simulación después de 1 us tiempo de simulación.

    
respondido por el Brian Drummond

Lea otras preguntas en las etiquetas