Digitális rendszerek II. Multiplexelés 2009.11.29.
Feladat Az FPGA panel 4 db 7 szegmenses kijelzőjén meg kell jeleníteni az egyenként 2 bites (0,1,2,3) számokat CLK50 P54 Programozó Kapcsoló LENT kell lennie! Tolókapcsolók RESET (P41)
RST digit(3:0) seg(6:0) kapcsolo(7:0)
Mi a multiplexer? Egy kombinációs áramkör, ahol van több sorszámozható bemenet és egy címbemenet. A címbemenet aktuális értékétől függ, hogy a kimeneten melyik bemeneti érték jelenik meg (olyan mint egy kapcsoló) címbemenet N0 N1 N2 N3 kimenet
Állapotgráf RST F0 F1 F2 F3 1 ms-ot vár 1 ms letelt 1 ms-ot vár
Kijelző multiplexelése aktív „0” jellel Bekapcsoljuk A0-t és kiírjuk a számot a kijelzőre, várunk 1 ms-ot Kikapcsoljuk A0-t és bekapcsoljuk A1-et, várunk 1 ms-ot Stb. Olyan gyorsan villog minden kijelző (4 ms-onként), hogy az emberi szem ezt folyamatos világításként érzékeli
clk50 rst kapcsolok(7:0) digit(3:0) seg(6:0)
Modulok kapcsolok(7:0) N0 clk50 Állapot cd(1:0) Hexa-> Számjegy kiválasztó Állapot generátor Hexa-> 7 seg kódoló clk50 cd(1:0) N1 curr(1:0) rst seg(6:0) N2 engedélyező N3 cim Digit kijelölő engedélyező digit(3:0)
Portok (be- és kimenetek) library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity modul is Port ( clk50 : in STD_LOGIC; rst : in STD_LOGIC; kapcsolok : in STD_LOGIC_VECTOR (7 downto 0); digit : out STD_LOGIC_VECTOR (3 downto 0); seg : out STD_LOGIC_VECTOR (6 downto 0)); end modul;
Signal (változók) architecture Behavioral of modul is constant teszt1ms: std_logic_vector(31 downto 0) := conv_std_logic_vector(50000,32); signal curr : std_logic_vector(3 downto 0); --akt. multiplexalt dekad signal frissit_szlo : std_logic_vector(31 downto 0); signal cd: std_logic_vector(1 downto 0); --dekadszamlalo signal bcdint : std_logic_vector(15 downto 0); Begin bcdint <= "00" & kapcsolok(7 downto 6) & "00" & kapcsolok(5 downto 4) & "00" & kapcsolok(3 downto 2) & "00" & kapcsolok(1 downto 0);
Process (minden órajelnél lefut) process (clk50, rst, cd) begin if rst='1' then cd <= (others => '0'); frissit_szlo <= (others => '0'); elsif clk50'event and clk50 = '1' then frissit_szlo <= frissit_szlo +1; if frissit_szlo = teszt1ms-1 then cd <= cd + 1; end if; end process; Érzékenységi lista
Feltételes értékadások curr <= bcdint(3 downto 0) when cd ="00" else bcdint(7 downto 4) when cd ="01" else bcdint(11 downto 8) when cd ="10" else bcdint(15 downto 12); digit <= "1111" when rst= '1' else "1110" when cd= "00" else "1101" when cd= "01" else "1011" when cd= "10" else "0111"; seg <= "1111111" when rst= '1' else "1000000" when curr= "0000" else "1111001" when curr= "0001" else "0100100" when curr= "0010" else "0110000"; end Behavioral;
ZH Konzultáció: 2009.12.2. (szerda) Jelentkezni az ajtóra kitett papíron lehet majd ZH: 2009.12.3. (csütörtök) Honlapot nézni hétvégén! http://nik.bmf.hu/vigh/
NIK Portál http://nikportal.cickany.hu/