Zamek szyfrowy w AHDL, a potwierdzanie kodu

Jun 02, 2004 9 Replies

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



U¿ytkownik "GieTeGie" snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:c9k4lu$viu$ snipped-for-privacy@druid.ceti.pl...

[ciach]

Nie znam siê za bardzo na AHDL, ale czy nie wystarczy wprowadziæ dodatkowe stany po¶rednie np. miêdzy A i B - mieliby¶my wtedy A A1 B

potwierdz==1 powoduje przejscie ze stanu A do stanu po¶redniego A1, a potwierdz==0 ze stanu A1 do stanu B.

when A =>

if potwierdz == 1 then if kod[] == b"1001" then autom = A1; else autom = A; end if; end if; when A1 =>

if potwierdz == 0 then autom = B; else autom = A1; endif

I tak dla ca³ej reszty. Wydaje mi siê, ¿e po takiej modyfikacji czêstotliwo¶æ sygna³u zegarowego nie ma ju¿ znaczenia, gdy¿ przej¶cie do nastêpnego stanu nastêpuje wy³±cznie po zmianie na wej¶ciu "poziom".

Tymczasem Jarek

U¿ytkownik "GieTeGie" snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:c9k4lu$viu$ snipped-for-privacy@druid.ceti.pl...

Jak masz pod³±czony ten przycisk? Z regu³y przyciski (ze wzgledu np. na drgania styków) wyzwalaj± generator monostabilny o okre¶lonym czasie, lub obs³ugiwane s± programowo tzn. uk³ad nie reaguje na wci¶niêcie dopóki wcze¶niej nie wykryje stanu puszczenia przycisku i odczekaniu pewnego czasu.

pzdr, Andrzej

U¿ytkownik "JarekC" snipped-for-privacy@alpha.net.pl> napisa³ w wiadomo¶ci news:c9k6dh$7ld$1@213.241.113.72...

Tak - to jedno z rozwi±zañ, ale uk³ad automatu mo¿e mieæ tylko 6 stanów. Na zewnatrz moze byc wszystko.

U¿ytkownik "Andrzej" snipped-for-privacy@op.pl napisa³ w wiadomo¶ci news:c9k670$s4f$ snipped-for-privacy@news.onet.pl...

Ten przycisk to typowy prze³±cznik podaj±cy +5V jako stan wysoki lub zwieraj±cy do masy. Z pewno¶ci± nie reaguje na puszczenie - sprawdzilem z dioda LED na wyjsciu ukladu.

U¿ytkownik "GieTeGie" snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:c9k7ji$ul$ snipped-for-privacy@druid.ceti.pl...

A mo¿e wogóle zrezygnowaæ w wej¶cia potwierdz, a przycisk daæ na clk. Przyci¶niêcie i puszczenie przycisku to 1 cykl.

Tymczasem Jarek

U¿ytkownik "JarekC" snipped-for-privacy@alpha.net.pl> napisa³ w wiadomo¶ci news:c9k8fi$dmh$1@213.241.113.72...

Tak - my¶la³em o tym (zwykle robi siê takie co¶ daj±c jeszcze przerzutnik - jeden sygna³ z przycisku i na wyj¶ciu przerzutnika 1 - nastêpny 0 i tak na zmiane). Tylko musia³bym zrobiæ uk³ad, który z chwil± naci¶niêcia przycisku z zewnêtrznego zegara o czêstotliwo¶ci 1 Hz wytnie tylko jeden impuls i poda go na wej¶cie zegarowe automatu. Tylko takie rozwi±zanie jest dozwolone. Nie wiem jak zrobiæ taki uk³ad? Demultiplekser by³by dobry - powatrza³by to co ma na wej¶ciu (czyli sygna³ zew. zegara) i podawa³ na wej¶cie automatu tylko gdy przycisk by³by w stanie jeden. Ale jak zrobiæ, aby poda³ tylko jeden impuls z tego sygna³u?

U¿ytkownik "GieTeGie" snipped-for-privacy@wp.pl napisa³ w wiadomo¶ci news:c9k9ut$1ub$ snipped-for-privacy@druid.ceti.pl...

przerzutnik -

To mo¿e uk³ad, który niezale¿nie od tego jak d³ugo bêdzie przyci¶niety przycisk da na wyj¶ciu impuls o sta³ym czasie trwania. Do tego wystarczy zwyk³y przerzutnik monostabilny np. 74HCT121. Mo¿esz go wyzwalaæ narastaj±cym lub opadaj±cym zboczem, a czas trwania impulsu na wyj¶ciu regulujesz za pomoc± dodatkowego rezystora i kondensatora.

Tymczasem Jarek

Taki uk³ad to dwa przerzutniki D po³±czone szeregowo (D drugiego = Q pierwszego) sterowane zegarem w przeciwfazie (do jednego dajesz zegar a do drugiego zegar zanegowany) i wyj¶cia /Q pierwszego i Q drugiego przemno¿one bramk± AND... Na wyj¶ciu masz jeden impuls niezalezny od czasu trwania wej¶cia, nieco opó¼niony.

U¿ytkownik "Pszemol" snipped-for-privacy@PolBox.com napisa³ w wiadomo¶ci news: snipped-for-privacy@poczta.onet.pl...

Dziêkujê - pomog³o. Dziêkujê wszystkim, którzy udzielili siê w w±tku.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required