Järjestikskeemid - Koodlukk I07 - Digitaalloogika ja -süsteemid Õppejõud: Priit Ruberg Ülari Ainjärv
1/4 I07 - Sisukord 1. Ülesande püstitus!... 1. Lahendus!... 1.1. Automaadi mudel!... 1.. s0 - s14 (Moore)!....3. s15 (Mealy)!....4. Implementatsioon (lukk.vhd)!....5. Simulatsioon!... 4 1. Ülesande püstitus 1 Ülesandeks on kirjeldada koodiluku avamismehhanismi. Tuleb koostada vastava automaadi (FSM ) mudel ning implementeerida lukuavamise juhtloogika VHDL-is. Ülesande detailid ning testpink on ette antud ning saadaval ülesande kodulehelt. Lukk avaneb kui järjestikku on sisestatud kaheksakohaline kood, mis vastab matriklinumbrile. Minu matriklinumber on 1117101. Tähele tuleb panna, et nupuvajutus toimub kahes osas, vajutades ja vabastades, misjärel võib alles teha otsuseid edasiseks - oodata uut sisestust, katkestada või avada lukk ja minna algolekusse.. Lahendus Kuna ülesandepüstituses pole ära toodud käitumisjuhist kahe või enama nupu üheaegse vajutuse korral, siis minu poolt kirjeldatud lahenduses seda olukorda ei käsitleta. Kui järjestikku sisestati õige kaheksakohaline kood, siis minu poolt kirjeldatud automaat saadab avamissignaali ning tagasipöördudes algolekusse tühistab selle kohe. Kuna ülesandepüstituses ei ole täpsustatud luku loogilist käitumist pärast avamist ja uuesti sulgemisel ning muude osade mehhaanikat, siis pakutud lahendus on ainult üks paljudest võimalikest..1. Automaadi mudel Oma lahenduses kasutan kombineeritult nii Moore kui Mealy modelleerimist, sest viimases olekus tuleb väljundi otsus langetada nii staatuse kui sisendi (nupu lahtilase) alusel. Ehk siis algolekust liikudes mööda olekuid (vt Joonis 1) väljund ei muutu sisendi tõttu ning siin saab kasutada Moore mudelit, jõudes viimasesse olekusse (s15) tuleb väljundi otsustamisel kontrollida, kas nupp on veel all või lasti lahti ning siin saab kasutada Mealy mudelit. Joonis 1 - Olekudiagramm Antud mudel on optimeerimata, et illustreerida eraldi staatustega nuppude vabastamise sündmusi. Realisatsioonis tuleks seda mudelit oluliselt lihtsustada. Mudeli skeem on toodud alloleval joonisel (vt Joonis ). Mudel on jagatud klassikaliselt kaheks protseduuriks, millest esimene muudab staatust (fsm_transition) ja teine tegeleb otseselt väljundi genereerimisega (fsm_output). Joonis - Skemaatiline vaade 1 Ülesande koduleht asub aadressil http://enos.itcollege.ee/~vpesonen/lab_78/lab_78.html. Finite-state machine (http://en.wikipedia.org/wiki/finite-state_machine). I07 - - Ülari Ainjärv ()
/4.. s0 - s14 (Moore) Järgmine staatus sõltub hetke staatusest ja hetke sisendist, samas hetke väljund sõltub ainult hetke staatusest 3 : a( t +1) = δ ( a( t),z( t) w( t) = λ ( a( t) ). input state output new_state 0000000010 s0 0 s1 0000000000 s1 0 s 0000000100 s 0 s3 0000000000 s3 0 s4 0000000010 s4 0 s5 0000000000 s5 0 s6 0000000010 s6 0 s7 0000000000 s7 0 s8 0010000000 s8 0 s9 0000000000 s9 0 s10 0000000010 s10 0 s11 0000000000 s11 0 s1 0000000001 s1 0 s13 0000000000 s13 0 s14 0000000010 s14 0 s15.3. s15 (Mealy) Järgmine staatus sõltub hetke staatusest ja hetke sisendist, samuti hetke väljund sõltub hetke staatusest ja hetke sisendist: a( t +1) = δ ( a( t),z( t) w( t) = λ ( a( t),z( t) ). input state output new_state 0000000010 s15 0 s15 0000000000 s15 1 s0.4. Implementatsioon (lukk.vhd) 4 - - I07 - Task 4 (combination lock). - - Ülari Ainjärv () - - entity koodlukk is port( reset, clock : in bit; input : in bit_vector(9 downto 0 output : out bit end koodlukk; architecture fsm of koodlukk is - - code: 1117101 - - input state output new_state - - 0000000010 s0 0 s1 (1) 3 Logic and System Design of Digital Systems, S. Baranov 008, lk 30. 4 http://enos.itcollege.ee/~ylari/i07/lukk.vhd I07 - - Ülari Ainjärv ()
3/4 - - 0000000000 s1 0 s - - 0000000100 s 0 s3 () - - 0000000000 s3 0 s4 - - 0000000010 s4 0 s5 (1) - - 0000000000 s5 0 s6 - - 0000000010 s6 0 s7 (1) - - 0000000000 s7 0 s8 - - 0010000000 s8 0 s9 (7) - - 0000000000 s9 0 s10 - - 0000000010 s10 0 s11 (1) - - 0000000000 s11 0 s1 - - 0000000001 s1 0 s13 (0) - - 0000000000 s13 0 s14 - - 0000000010 s14 0 s15 (1) - - 0000000010 s15 0 s15 - - 0000000000 s15 1 s0 type state_type is (s0, s1, s, s3, s4, s5, s6, s7, s8, s9, s10, s11, s1, s13, s14, s15 signal state, new_state : state_type; fsm_transition : process wait on clock until clock = '1'; if reset = '1' then state <= s0; state <= new_state; end process; fsm_output : process (input, state) impure function is_released return boolean is constant released : bit_vector(9 downto 0) := "0000000000"; if input = released then return true; return false; end is_released; impure function change_state_on_push(expected_digit : integer; expected_state : state_type) return state_type is if input(expected_digit) = '1' then return expected_state; elsif is_released then return state; return s0; end change_state_on_push; impure function change_state_on_release(expected_state : state_type) return state_type is if is_released then return expected_state; return state; end change_state_on_release; case state is when s0 => output <= '0'; new_state <= change_state_on_push(1, s1 when s1 => new_state <= change_state_on_release(s when s => new_state <= change_state_on_push(, s3 when s3 => I07 - - Ülari Ainjärv ()
4/4 new_state <= change_state_on_release(s4 when s4 => new_state <= change_state_on_push(1, s5 when s5 => new_state <= change_state_on_release(s6 when s6 => new_state <= change_state_on_push(1, s7 when s7 => new_state <= change_state_on_release(s8 when s8 => new_state <= change_state_on_push(7, s9 when s9 => new_state <= change_state_on_release(s10 when s10 => new_state <= change_state_on_push(1, s11 when s11 => new_state <= change_state_on_release(s1 when s1 => new_state <= change_state_on_push(0, s13 when s13 => new_state <= change_state_on_release(s14 when s14 => new_state <= change_state_on_push(1, s15 when s15 => if is_released then output <= '1'; new_state <= change_state_on_release(s0 when others => new_state <= s0; end case; end process; end fsm;.5. Simulatsioon 5 Kursor simulatsiooni lainediagrammil (vt Joonis 3) on seatud luku avanemise hetkele. Selguse huvides on lainediagrammile lisatud ka signaalide state ja new_state väärtused. Joonis 3 - Simulatsioon (Wave) 5 VHDL-i töövahendina kasutasin ModelSim PE Student Edition 10.1d (http://model.com/content/modelsim-pe-studentedition-hdl-simulation). I07 - - Ülari Ainjärv ()