to get the file
Transkrypt
to get the file
Projektowanie Urządzeń Cyfrowych Laboratorium 4 Projektowanie w języku VHDL Opracował: mgr inż. Leszek Ciopiński Wstęp: Przykładowe moduły napisane w języku VHDL (źródło: http://pl.wikibooks.org/wiki/VHDL/Przyk %C5%82ady_kodu): Bramka NAND: Zawartość pliku opisującego dwuwejściową bramkę NAND: library ieee; use ieee.std_logic_1164.all; entity nand2 is port ( a,b : in std_logic; c : out std_logic ); end nand2; architecture logic of nand2 is begin c <= not (a and b); end logic; Bramka XOR: Zawartość pliku opisującego dwu wejściową bramkę XOR: library ieee; use ieee.std_logic_1164.all; entity xor2 is port ( a,b : in std_logic; c : out std_logic ); end xor2; PUC Laboratorium 4 1 architecture behavioral of nand2 is begin c <= not (a and b); end behavioral; architecture logic of xor2 is component nand2 port ( a, b : in std_logic; c : out std_logic ); end component nand2; signal wew1,wew2,wew3 : std_logic; begin bramka1 bramka2 bramka3 bramka4 : : : : nand2 nand2 nand2 nand2 port port port port map map map map (a=>a, b=>b, c=>wew1 ); (a=>a, b=>wew1, c=>wew2 ); (a=>wew1, b=>b, c=>wew3 ); (a=>wew2, b=>wew3, c=>c ); end logic; W powyższym przykładzie należy zauważyć, że do połączenia zewnętrznego komponentu z wewnętrznymi sygnałami opisywanego modułu niezbędne jest użycie „port map”. Przerzutnik typu D: Zawartość pliku opisującego gotowy do symulacji i syntezy logicznej, przerzutnik typu D z Resetowaniem synchronicznym. library IEEE; use IEEE.STD_LOGIC_1164.all; entity dffr is -- dołączenie standardowej biblioteki IEEE -- dołączenie pakietu 'STD_LOGIC_1164' z biblioteki IEEE -- definiującego popularne stany logiczne -- opis interfejsu przerzutnika (połączeń z otoczeniem) port( CLK RESET DIN DOUT ); end dffr; : : : : in in in out STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC ----- wejście wejście wejście wyjście zegarowe kasowania danych danych architecture behavior of dffr is begin -- opis wnętrza przerzutnika (w tym przypadku -- jest to opis behawioralny) dffar: process (CLK, RESET) begin if rising_edge(CLK) then if RESET='1' then DOUT <= '0'; else DOUT <= DIN; -- proces z listą czułości (sensitivity list) end if; PUC -- wykrywanie aktywnego zbocza zegara -- kasowanie stanem wysokim wejścia RESET -- przypisanie stałej to sygnału wyjściowego -- przypisanie stanu wejścia do sygnału wyjściowego Laboratorium 4 2 end if; end process; end behavior; Przydatne funkcje i moduły • • • PUC falling_edge() - jest przeciwieństwem rising_edge(), to znaczy, że zwraca wartość true, jeśli wykryta została zmiana stanu sygnału podanego jako parametr tej funkcji z wysokiego na niski Instrukcja “case” służy do wprowadzania rozejścia na różne drogi. Instrukcje tą stosuje się wyłącznie wewnątrz procesu. case kod_instrukcji is when x”00” => dodawanie; when x”01” | x”10” => czekanie; when others => nieznany_kod; end case; use IEEE.STD_LOGIC_UNSIGNED.all; - biblioteka, której dodanie powoduje, że wszystkie sygnały w projektowanym module będą traktowane jako wartości całkowitoliczbowe bez znaku. Umożliwia to używanie tych sygnałów zarówno w sposób klasyczny (np. odwoływanie się do konkretnych bitów), jak i wykonywanie na nich działań arytmetycznych (używamy ich wówczas tak samo jak zwykłych zmiennych, np.: syg1 <= syg2 + syg3) Laboratorium 4 3 Zadania: Celem ćwiczenia jest praktyczne wykorzystanie informacji o języku VHDL przekazanych w ramach wykładów: 1. Zaprojektuj, skompiluj i wykonaj symulację cyfrowego dzielnika częstotliwości na cztery. Układ ten powinien na swoim wyjściu generować stan wysoki po czwartym impulsie podanym na wejście układu. Stan wysoki na wyjściu powinien trwać tyle samo, co jeden impuls na wejściu układu. (4 punkty) 2. Zaprojektuj układ komparatora, który ma dwa wejścia 8-bitowe i jedno wyjście 3-bitowe. Wejście A Wejście B Wyjście większe mniejsze 100 równe równe 010 mniejsze większe 001 (4 punkty) 3. Zaprojektuj plik czterech rejestrów 8-bitowych. Plik powinien mieć pięć wejść: • 8-bitowe wejście danych • 2-bitowe wejście adresu rejestru do zapisu • 2-bitowe wejście adresowe do odczytu • 1-bitowe wejście zapisu – sygnał '1' oznacza, że należy zapisać dane do rejestru z wejścia danych, w przeciwnym razie nie należy do rejestrów nic zapisywać Dodatkowo układ powinien posiadać jedno wyjście danych. (4 punkty) 4. Napisz sumator czterobitowy o dwóch jednobitowych wejściach danych i jednym wejściu zegarowym, przez które wprowadzane są kolejne bity wartości do zsumowania. Wynik wystawiany jest na szynę czterobitową. (4 punkty) 5. Wykonaj moduł, który będzie pobierał dwie wartości ośmiobitowe. Jeśli wartość podana na pierwsze wejście będzie większa od wartości podanej na drugie wejście, to na wyjściu układu podana zostanie różnica wartości wejściowych. W przeciwnym przypadku na wyjście układu wystawiona zostanie suma wartości wejściowych. (4 punkty) 6. Zaprojektuj bramkę AND5 korzystając z komponentu AND2. Układ powinien być napisany w postaci strukturalnej oraz bez używania operatora and na sygnałach. (5 punkty) PUC Laboratorium 4 4