Zdravím, potřeboval bych poradit. Mám následující kod
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
use work.functions.all;
entity fsm_sim is
port(
clk : in std_logic;
k_code : in std_logic_vector(3 downto 0);
t_track : out tab_track
);
end fsm_sim;
architecture Behavioral of fsm_sim is
shared variable tt_track : tab_track := ("00", "00", "00", "00", "00");
begin
process (clk, k_code)
begin
if (clk'event and clk = '1') then
if (k_code = "0000") then
tt_track(1) := "01";
else
tt_track(2) := "10";
end if;
t_track <= tt_track;
end if;
end process;
end Behavioral;
sim_fsm : entity work.fsm_sim(Behavioral)
port map (
clk => CLK,
k_code => "0000",
t_track => t_table
);
Problém je, že se provedou obě dvě větve, jak if, tak else (na obě dvě položky pole se přiřadí hodnota). Zezačátku jsem se domníval, že chybu způsobuje signál k_code, tak jsem jej přímo v instanci pevně nastavil na konstantu, ale problém je stále. Kód funguje v jediném případě, pokud dám
if (true)
Mohl by mi někdo prosím poradit, co dělám špatně? Sedím nad tím dneska celý den, experimentuju, ale zcela bezvýsledně. Mám pocit, jak kdyby při "překladu" byla podmínka ignorována a prostě se provedlo úplně vše. Díky.