Problém s větvením ve VHDL – Číslicová technika – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Problém s větvením ve VHDL – Číslicová technika – Fórum – Programujte.comProblém s větvením ve VHDL – Číslicová technika – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
marpit0
Stálý člen
23. 5. 2014   #1
-
0
-

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.

Nahlásit jako SPAM
IP: 94.113.185.–
MarPit
Reklama
Reklama
Řešení
marpit0
Stálý člen
23. 5. 2014   #2
-
0
-
Vyřešeno Nejlepší odpověď

Tak řešení jsem nakonec nalezl sám. Když už jsem se zeptal, tak zde dám i odpověď, kdyby někdo řešil podobný problé.

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(
	reset : in std_logic;
	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;
begin
	process (reset, clk, k_code)
	begin
		if (reset = '1') then
			tt_track := ("00", "00", "00", "00", "00");
			t_track <= tt_track;
		elsif (clk'event and clk = '1') then
			if ("0000" = k_code) then
				tt_track(1) := "01";
			else
				tt_track(2) := "10";
			end if;
			t_track <= tt_track;
		end if;
	end process;
end Behavioral;


Problém způsobovala prvotní inicializace, která není podporována při syntéze, a tak došlo k tomu, že zřejmě proběhlo přiřazení na úkor ignorování větvení. Pokud se provede inicializace po resetu, tak vše funguje korektně. Vůbec mě nenapadlo v tomto hledat chybu, protože v jiných modulech provotní přiřazení normálně funguje.

Nahlásit jako SPAM
IP: 94.113.185.–
MarPit
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

Podobná vlákna

Vhdl — založil crash969

VHDL — založil crash969

Problém s i++ — založil Chazz

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý