ISE WebPack 1. ISE WebPack i VHDL Celem ćwiczenia jest szybkie
Transkrypt
ISE WebPack 1. ISE WebPack i VHDL Celem ćwiczenia jest szybkie
ISE WebPack 1. ISE WebPack i VHDL Celem ćwiczenia jest szybkie zaznajomienie się ze środowiskiem projektowym Xilinx ISE Design Suite 10.1 oraz językiem opisu sprzętu VHDL. Tworzenie projektu Uruchom program Project Navigator z grupy Xilinx ISE Design Suite 10.1 W menu File wybierz New Project... Wpisz nazwę projektu w Project name. Top-level source type wybierz HDL. Następnie kliknij Next. 1 ISE WebPack Uzupełnij okno dialogowe tak, aby wyglądało jak poniżej, najważniejsze parametry to: XC3S500E, FG320, -5. Gdzie XC3S500E określa programowany układ, natomiast FG320 określa obudowę tego układu. 2 ISE WebPack Klikaj Next dopóki nie pojawi się okno takie jak poniżej, gdzie należy kliknąć Finish. 2. Język opisu sprzętu VHDL. Podczas laboratoriów należy się posługiwać językiem VHDL, który służy do opisu sprzętu. Poniżej opisany jest układ logiczny w języku VHDL oraz jego odpowiednik w postaci symbolu logicznego. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; 3 ISE WebPack --use UNISIM.VComponents.all; entity sum is Port ( a : in STD_LOGIC; b : in STD_LOGIC; y : out STD_LOGIC); end sum; architecture Behavioral of sum is begin y <= a or b; end Behavioral; Krótki komentarz do wyżej zamieszczonego kodu. Na samym początku deklarowane jest użycie bibliotek standardu, w których zdefiniowane są podstawowe typy zmiennych oraz działania na nich wykonane. entity sum – określa nazwę i deklarację modułu, w tym przypadku jest to sumator, więc wpisana została skrócona nazwa sum Port – definiuje jakie sygnały są sygnałami wchodzącymi do układu(in), a jakie wychodzącymi(out), nazwy przed : to po prostu nazwy przypisane danym sygnałom architecture – podaje rodzaj opisu jaki został wykorzystany czyli Behavioral dla układu sum, dalej następuje definicja tego układ, między begin, a end Behavioral. y<= a or b, oznacza wykonaj działanie a or b, czyli sumę logiczną dwóch bitów i prześlij jej wynik do sygnału y. Innymi podstawowymi operacjami na bitach jakie można użyć w kodzie VHDL są: not – czyli negacja sposób użycia: y <= not a; and – mnożenie logiczne y <= a and b; xor – mnożenie logiczne y <= a xor b; 4 ISE WebPack 3. Budowa sumatora dwubitowego. Aby zbudować tak opisany układ, który by wykonał sumę logiczną kliknij w menu Project opcję New Source... Wybierz VHDL Module, w miejscu File name wpisz nazwę swojego układu. 5 ISE WebPack Następnie w kolumnie Port name wpisz nazwy sygnałów wejściowych i wyjściowych użytych w układzie logicznym, w kolumnie Direction wybierz rodzaj sygnału, wejściowy(in) lub wyjściowy(out). Pozostałe opcje określają czy sygnał jest szyną danych oraz wyznaczają wielkość szyny. Po wypełnieniu tabeli kliknij Next. 6 ISE WebPack W następnym menu kliknij Finish, aby wygenerować szablon jednostki logicznej. Zawartość wygenerowanego pliku powinna przypominać kod VHDL pokazany w punkcie 3 z tą różnicą, że brak w nim wpisu y <= a or b, między begin, a end Behavioral należy uzupełnić opis sprzętu o ten wpis. Dzięki temu uzyskano w pełni funkcjonalny sumator dwubitowy. 7 ISE WebPack Aby sprawdzić poprawność składniową opisanego kodu w okienku Processes rozwiń opcję Synthesize – XST i kliknij dwukrotnie Check Syntax. 8 ISE WebPack 4. Symulacja Aby sprawdzić poprawność zaprojektowanego układu należy przeprowadzić symulację tego układu. Środowisko ISE WebPack ma wbudowany symulator. Przed przystąpieniem do symulacji należy zbudować tzw. Testbench, który określi wymuszenia testujące. Aby zbudować plik testujący należy w menu Project wybrać New Source...: W oknie wybrać VHDL Test Bench i wpisać nazwę pliku testującego w File name. W kolejnym oknie należy wybrać układ dla którego tworzony będzie plik testujący. Dalej kliknąć Next, następnie Finish. 9 ISE WebPack Wynikiem tych działań będzie poniższy kod VHDL. LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.all; USE ieee.numeric_std.ALL; ENTITY TestBench IS END TestBench; ARCHITECTURE behavior OF TestBench IS -- Component Declaration for the Unit Under Test (UUT) COMPONENT sum PORT( a : IN std_logic; b : IN std_logic; y : OUT std_logic ); END COMPONENT; --Inputs signal a : std_logic := '0'; signal b : std_logic := '0'; --Outputs signal y : std_logic; BEGIN 10 ISE WebPack -- Instantiate the Unit Under Test (UUT) uut: sum PORT MAP ( a => a, b => b, y => y ); -- No clocks detected in port list. Replace <clock> below with -- appropriate port name constant <clock>_period := 1ns; <clock>_process :process begin <clock> <= '0'; wait for <clock>_period/2; <clock> <= '1'; wait for <clock>_period/2; end process; -- Stimulus process stim_proc: process begin -- hold reset state for 100ms. wait for 100ms; wait for <clock>_period*10; -- insert stimulus here wait; 11 ISE WebPack end process; END; Wygenerowany plik zawiera nadmiarowe informacje, które z punktu widzenia tego przykładu są bezużyteczne. Ponadto uniemożliwi to działanie symulacji, bo symulator będzie generował błędy. Aby poprawić plik należy usunąć linijki zawierające: constant <clock>_period := 1ns; <clock>_process :process begin <clock> <= '0'; wait for <clock>_period/2; <clock> <= '1'; wait for <clock>_period/2; end process; Oraz wait for <clock>_period*10; 12 ISE WebPack Teraz należy zadać sygnały wymuszające potrzebne do przeprowadzenia testu. Sygnały testujące zostaną nadane zgodnie z tabelą prawdziwości dla dwubitowego działania logicznego or, czyli: Wejścia Wyjście a b y 0 0 0 0 1 1 1 0 1 1 1 1 Aby zadać sygnały testujące wg powyżej tabelki proces stim_proc należy uzupełnić w następujący sposób: stim_proc: process begin -- hold reset state for 100ms. wait for 100ms; a <= '0'; b <= '0'; wait for 100ms; a <= '1'; b <= '0'; wait for 100ms; a <= '0'; b <= '1'; wait for 100ms; a <= '1'; 13 ISE WebPack b <= '1'; wait for 100ms; -- insert stimulus here wait; end process; Działanie tego procesu jest proste. Zmienia on wartości przypisane do danych sygnałów co 100 ms. a<='0' oznacza przypisanie do sygnału a wartości bitowej '0'. wait for 100ms oznacza czekanie i zarazem podtrzymanie sygnału przez 100 ms. 14 ISE WebPack Konfigurowanie i uruchamianie symulacji. W okienku Sources wybierz z Source for opcję Behavioral Simulation. Następnie z okienka Processes rozwiń Xilinx ISE Simulator prawym przyciskiem wybierz Simulate Behavioral Model i wybierz Properties.... Tu ustaw Simulation Time na 600 ms, tak jak jest to pokazane poniżej. 15 ISE WebPack Kliknij dwukrotnie lewym przyciskiem myszy na Simulate Behavioral Model. 16 ISE WebPack Po chwili powinno pokazać się okno podobne do niżej przedstawionego, zawierające wynik symulacji. Jak widać na przebiegu sygnałów pokazane są sygnały wymuszające a i b, widać, że a i b na początku są bitowymi zerami, następnie a staje się bitową jedynką, b pozostaje bez zmian... Poniżej widać sygnał y będący odpowiedzią układu na daną parę wymuszeń, dla a=0 i b=0 y=0, natomiast dla a=1 i b=0 odpowiedź y=1, zgodnie z tabelą prawdziwości. 17 ISE WebPack 5. Zadanie Na podstawie powyższych informacji i zebranego doświadczenia przedstaw poniższy schemat układu logicznego w postaci języka opisu sprzętu VHDL i przeprowadź jego symulację. Polecane kursy w internecie i literatura: http://home.elka.pw.edu.pl/~pkaleta/vhdl/kurs/index.html Józef Kalisz, Podstawy elektroniki cyfrowej 18