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