Witam, Robie zamek szyfrowy z nastepujacymi zalozeniami (prosze nie proponowac zadnych gotowych rozwiazan, bo to cos w rodzaju pracy domowej):
-podajemy kombinacje 5 cyfr (4 bity od 0 do f)
-kazda cyfre potwierdzamy przyciskiem SW1 (przycisniety daje stan 1)
-zagar automatu obnizyc do 1Hz zeby potwierdzenie nie bylo za dlugie (zegar
1-2Hz) (zegar ma czestotl. 200 kHz, ale to juz obnizylem dzielnikami do 1 Hz)
No wiec napisalem taki uklad automatu w AHDL:
subdesign ZAMEK_SZYF ( clk, res : INPUT; kod[3..0] : INPUT; potwierdz : INPUT; otworz : OUTPUT; )
variable autom : machine with states (A, B, C, D, E, F);
begin autom.clk = clk; autom.reset = res;
case autom is when A =>
if potwierdz == 1 then if kod[] == b"1001" then autom = B; else autom = A; end if; end if; when B =>
if potwierdz == 1 then if kod[] == b"1000" then autom = C; else autom = A; end if; end if; when C =>
if potwierdz == 1 then if kod[] == b"0111" then autom = D; else autom = A; end if; end if; when D =>
if potwierdz == 1 then if kod[] == b"0110" then autom = E; else autom = A; end if; end if; when E =>
if potwierdz == 1 then if kod[] == b"0101" then autom = F; else autom = A; end if; end if; end case;
if autom == F then otworz = b"1"; else otworz = b"0"; end if;
end;
Wszystko dzia³a piêknie, ale gdy przycisk zostanie przycisniety na dluzej niz na jeden takt zegara - wtedy oczywiscie automat zczyta t± sam± sekwencjê wej¶ciow± jako nastêpn± i uk³ad zadzia³a nie tak jak chcê. Chodzi o to, aby po wcisnieciu przycisku - bez wzgledu na to, jak dlugo bedzie wcisniety - automat odczyta³ tylko jeden takt zegara - nie wiêcej ani mniej. My¶la³em, ¿eby usunac z ukladu automatu wejscie "potwierdz" i jakos z zewnatrz wysylac na wejscie impuls zegarowy, gdy tylko przycisniemy przycisk potwierdzenia. Ale ka¿dy taki impuls musia³by trwaæ 1Hz - wiec prosta zmiana stanu przelacznika nie rozwi±¿e problemu.
Proszê o jakie¶ wskazówki i sugestie Dziekuje