Witam, chcialem zrobic prosta maszyne stanow. Dzialanie : z kazdym taktem zegara zaswieca sie kolejna litera neonu "PKO" (1 na odpowiednim bicie wyjscia), przy literze O, sprawdzic stan wejscia R i dla stanu wysokiego zaswiecic caly napis przez 3 takty zegara. Dla 0 przez 1 takt.
Problem mam z licznikiem taktow w stanie wyswietlania calego napisu. Oto kod:
Problematyczny fragment zaznaczylem gwiazdkami. Gdy napisalem to bez
przeladowywania stanow, tzn byly tylko polecenia zerowania/inkrementowania licznika to dzialalo ok. Jak dodalem zmiane stanu to w stanie PKO_3 licznik sie zacina i zostaje na 1. Jest ciagly stan PKO_3.
Jaka moze byc przyczyna takiego zachowania?
Problem mam z licznikiem taktow w stanie wyswietlania calego napisu. Oto kod:
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use IEEE.STD_LOGIC_ARITH.All;
entity System_PKO is
port (
R : in std_logic;
clock : in std_logic;
reset : in std_logic;
wy : out std_logic_vector( 2 downto 0)
);
end System_PKO;
architecture sys_arch of System_PKO is
-- definicje typow
type fsm_state_type is (P, K, O, PKO_3, PKO_1);
-- definicje sygnalow
signal fsm_state : fsm_state_type;
signal nxt_state : fsm_state_type;
signal licznik : integer := 0;
signal licz_en : std_logic;
signal licz_rst : std_logic;
begin
fsm_synch_proc:
process (clock, reset)
begin
if reset = '1' then fsm_state <= P;
elsif rising_edge(clock) then
fsm_state <= nxt_state;
end if;
end process;
fsm_komb_proc:
process (fsm_state,R)
begin
nxt_state <= P;
case fsm_state is
when P => nxt_state <= K;
wy <= "100";
when K => nxt_state <= O;
wy <= "010";
when O => if R = '1' then nxt_state <= PKO_3;
elsif R = '0' then nxt_state <= PKO_1;
end if;
wy <= "001";
****when PKO_3 => if licznik = 2 then
nxt_state <= P;
licznik <= 0;
else nxt_state <= PKO_3;
licznik <= licznik + 1;
end if;
wy <= "111"; ****
when PKO_1 => nxt_state <= P;
wy <= "111";
when others => wy <= "000";
end case;
end process;
end sys_arch;
Problematyczny fragment zaznaczylem gwiazdkami. Gdy napisalem to bez
przeladowywania stanow, tzn byly tylko polecenia zerowania/inkrementowania licznika to dzialalo ok. Jak dodalem zmiane stanu to w stanie PKO_3 licznik sie zacina i zostaje na 1. Jest ciagly stan PKO_3.
Jaka moze byc przyczyna takiego zachowania?