Tengo una lección sobre VHDL en una de mis clases universitarias y tengo que escribir entity
simple que generará reloj desde una fuente de 1MHz. Estoy usando CoolRunner-II CPLD Starter Kit con ISE Webpack 13.1.
Cuando ejecuto la simulación de mi código, tengo resultados extraños. No tengo ni idea, dónde está el problema. Mi entidad VHDL tiene este aspecto:
entity clock is
Port ( clk_in : in STD_LOGIC;
clk_1M : out STD_LOGIC;
clk_500k : out STD_LOGIC;
clk_100k : out STD_LOGIC;
clk_1k : out STD_LOGIC;
clk_1hz: out STD_LOGIC);
end clock;
La entrada es una señal de 1 MHz desde el oscilador y quiero crear una señal de salida de 1 MHz, 500 kHz, 100 kHz, 1 kHz y 1 Hz. Definí varias señales:
signal c100k: std_logic_vector(3 downto 0) := (others => '0' );
signal c1k: std_logic_vector(9 downto 0) := (others => '0' );
signal c1hz: std_logic_vector(9 downto 0) := (others => '0' );
--
signal c500k_out: std_logic := '0';
signal c100k_out: std_logic := '0';
signal c1k_out: std_logic := '0';
signal c1hz_out: std_logic := '0';
Y finalmente, mi código es:
process (clk_in) begin
if clk_in'event and clk_in = '1' then
-- 500kHz
c500k_out <= not c500k_out;
end if;
end process;
process (clk_in) begin
if clk_in'event and clk_in = '1' then
-- 100kHz
c100k <= c100k + '1';
if c100k = X"A" then
c100k <= (others => '0' );
c100k_out <= '1';
else
c100k_out <= '0';
end if;
end if;
end process;
--
-- Code for 1kHz and 1Hz is same as 100kHz
--
clk_1M <= clk_in; -- Clock source 1Mhz
clk_500k <= c500k_out; -- Clock source 500kHz
clk_100k <= c100k_out; -- Clock source 100kHz
clk_1k <= c1k_out; -- Clock source 1kHz
clk_1hz <= c1hz_out; -- Clock source 1Hz
Cuando ejecuto la simulación, obtuve resultados impares:
¿Qué está mal con mi código?