Projektowanie Urządzeń Cyfrowych
Transkrypt
Projektowanie Urządzeń Cyfrowych
Projektowanie Urządzeń Cyfrowych Laboratorium 2 Przykład prostego ALU Opracował: mgr inż. Leszek Ciopiński Wstęp: Magistrale: Program MAX+plus II umożliwia tworzenie magistral. Magistrale są to grupy przewodów łączące wejścia i wyjścia różnych układów. Ich stosowanie powoduje większą wygodę projektowania, gdy potrzebne jest np. przesłanie liczby ośmiobitowej z jednego układu do innego. W celu utworzenia magistrali należy podając nazwę portu (pinu, wejścia lub wyjścia układu) podać w nawiasach kwadratowych ilu bitowa jest magistrala, np.: we[3..0]. W podanym przykładzie utworzona zostanie magistrala czterobitowa. Należy zwrócić uwagę, że słowo we jest nazwą magistrali. W nawiasach natomiast podawane są numery linii, które mają zostać wykorzystane. Umożliwia to swobodny dostęp do wybranych linii magistrali, np.: we[2..1] lub we[2]. Poniżej przedstawiono przykład utworzenia ośmiobitowej szyny i sposób dostępu do pojedynczych przewodów. Tworzenie symbolu z pliku Ponieważ projektując bardziej skomplikowane układy wygodniej jest pewne ich fragmenty zamykać w osobne moduły, możliwość taka występuje również w programie MAX+plus. W tym celu należy otworzyć i skompilować plik, z którego chcemy zrobić „symbol”. Następnie należy wybrać pozycję menu File | Create Default Symbol. Możliwe jest teraz dodanie nowo utworzonego komponentu do dowolnego pliku. PUC Laboratorium 2 1 “Symbole” utworzone w ramach projektu Wybór głównego układu projektowanej struktury Jeśli konieczne jest dokonanie zmiany głównego elementu układu, np. gdy projektowany był podukład, który trzeba umieścić w innym układzie w formie symbolu, należy wykonać następujące czynności: 1. Otworzyć plik, który będzie nowym głównym elementem układu. 2. Wybrać polecenie menu File | Project | Set Project to Current File Wybrane układy z biblioteki standardowej Busmux Jest to multiplekser dokonujący wyboru jednej z dwóch magistral, którą wystawia na swoim wyjściu. Ciekawą cechą układu jest możliwość definiowania szerokości magistrali jako parametr tego elementu. Na poniższej ilustracji pokazano lokalizację układu w bibliotece i sposób jego ustawienia dla magistrali 32-bitowej. PUC Laboratorium 2 2 lpm_add_sub Układ ten należy do grupy MegaFunctions. Oznacza to, że dokładne właściwości układu można dostosować w zależności od potrzeb projektanta. Po wybraniu tego układu otworzone zostanie okno konfiguracyjne. PUC Laboratorium 2 3 Czy dany port ma zostać użyty Stała wartość na wejściu portu Lista portów Wartość parametru Lista parametrów Poniżej przedstawiono opis najważniejszych ustawień: Wejścia: Wejście Wymagany Opis cin Nie Bit przeniesienia z poprzedniego bloku. dataa[] Tak składnik / odjemna datab[] Tak składnik / odjemnik add_sub Nie 0 – odejmowanie 1 – dodawanie clock Nie Sygnał zegarowy dla przetwarzania potokowego. clken Nie Sygnał załączający zegar. Jeśli jest nieużywany domyślnie przyjmuje wartość 1. aclr Nie Sygnał resetujący. Działa asynchronicznie. Wyjścia: Wyjście Wymagany Opis result[] Tak Wynik operacji cout Nie Bit przeniesienia. Nie może być używany razem z wyjściem overflow. overflow Nie Bit przepełnienia. Nie może być używany razem z wyjściem cout. PUC Laboratorium 2 4 Parametry: Parametr Wymagany Opis LPM_WIDTH Tak Szerokość magistral danych i wyniku. LPM_DIRECTION Nie Określa, czy układ ma działać jako sumator czy układ odejmujący. Nie może być używany, jeśli wykorzystywany jest port add_sub. LPM_REPRESENTATION Nie Format liczb: SIGNED lub UNSIGNED. LPM_PIPELINE Nie Ilość stopni potoku i czas opóźnienia uzyskania wyniku operacji liczony w taktach zegara. LPM_HINT Nie Umożliwia przekazanie parametrów specyficznych dla MAX+Plusa. LPM_TYPE Nie Nazwa układu w projekcie VHDL ONE_INPUT_IS_CONSTANT Nie Parametr specyficzny dla MAX+plusa umożliwiający zwiększenie stopnia optymalizacji układu, jeśli jedno z wejść ma przypisaną stałą wartość. MAXIMIZE_SPEED Parametr specyficzny dla MAX+plusa umożliwiający określenie stopnia optymalizacji układu: liczby od 0 do 5 – układ ma zajmować jak najmniej miejsca liczby od 6 do 10 – układ ma działać jak najszybciej. Nie lpm_mult Podobnie jak powyższy komponent, lpm_mult również jest układem, którego parametry należy skonfigurować w zależności od potrzeb projektu. Umożliwia to zastosowanie mnożarki najlepiej dostosowanej do potrzeb układu. PUC Laboratorium 2 5 Wejścia: Wejście Wymagany Opis sum[] Nie suma częściowa dataa[] Tak czynnik (mnożna) datab[] Tak czynnik (mnożnik) clock Nie Sygnał zegarowy dla przetwarzania potokowego. clken Nie Sygnał załączający zegar. Jeśli jest nieużywany domyślnie przyjmuje wartość 1. aclr Nie Sygnał resetujący. Działa asynchronicznie. Wyjścia: Wyjście Wymagany result[] Tak Opis Wynik operacji Parametry (wybrane): Parametr Wymagany Opis LPM_WIDTHA Tak Szerokość magistrali mnożnej. LPM_WIDTHB Tak Szerokość magistrali mnożnika. PUC Laboratorium 2 6 Parametr Wymagany Opis LPM_WIDTHP Tak Szerokość magistrali wyniku. LPM_WIDTHS Tak Szerokość magistrali sumy częściowej. Wartość ta jest wymagana nawet, jeśli magistrala sumy częściowej nie jest używana. LPM_REPRESENTATION Nie Format liczb: SIGNED lub UNSIGNED. LPM_PIPELINE Nie Ilość stopni potoku i czas opóźnienia uzyskania wyniku operacji liczony w taktach zegara. LPM_HINT Nie Umożliwia przekazanie parametrów specyficznych dla MAX+Plusa. LPM_TYPE Nie Nazwa układu w projekcie VHDL INPUT_A_IS_CONSTANT Nie Parametr specyficzny dla MAX+plusa umożliwiający zwiększenie stopnia optymalizacji układu, jeśli wejście dataa[] ma przypisaną stałą wartość. INPUT_B_IS_CONSTANT Nie Parametr specyficzny dla MAX+plusa umożliwiający zwiększenie stopnia optymalizacji układu, jeśli wejście datab[] ma przypisaną stałą wartość. MAXIMIZE_SPEED Nie Parametr specyficzny dla MAX+plusa umożliwiający określenie stopnia optymalizacji układu: liczby od 0 do 5 – układ ma zajmować jak najmniej miejsca liczby od 6 do 10 – układ ma działać jak najszybciej. PUC Laboratorium 2 7 Zadania: Celem ćwiczenia jest zaprojektowanie prostego układu ALU. W celu jego wykonania należy zrealizować następujące etapy projektowe: 1. Zaprojektować i skompilować układ arytmetyczny o następujących cechach: • Układ ma dwa wejścia danych 16-bitowe • Układ ma jedno wyjście 16-bitowe • Układ ma jedno wejście sterujące, 2-bitowe, które określa rodzaj wykonanej operacji: Wartość wejścia sterującego Operacja na wyjściu 00 Y[15..0]=A[15..0] – B[15..0] 01 Y[15..0]=A[15..0] + B[15..0] 10 Y[15..0]=A[7..0] × B[7..0] Układ należy utworzyć jako schemat przy użyciu komponentów z biblioteki standardowej programu MAX+plus. (6 punktów) 2. Przetestować układ z zadania 1. Należy dobrać takie wartości, aby możliwe było rozpoznanie operacji dodawania, odejmowania i mnożenia w zależności od wartości podanej na wejście sterujące. (4 punkty) 3. Utworzyć nowy plik VHDL wydając polecenie File | New … → Text Editor File. Następnie proszę wkleić następujący kod: • library ieee; use ieee.std_logic_1164.all; entity logiczny is port(A: in std_logic_vector(15 downto 0); B: in std_logic_vector(15 downto 0); fun: in integer range 3 downto 0; Y: out std_logic_vector(15 downto 0)); end logiczny; architecture logiczny_arch of logiczny is begin with fun select Y <= A and B when 0, x"0000" when others; end logiczny_arch; Plik proszę zapisać jako logiczny.vhdl. Powyższy kod należy tak zmodyfikować, aby realizował następujące funkcje: PUC Wartość wejścia sterującego (fun) Operacja na wyjściu 00 Y[15..0]=A[15..0] and B[15..0] 01 Y[15..0]=A[15..0] or B[15..0] Laboratorium 2 8 Wartość wejścia sterującego (fun) Operacja na wyjściu 10 Y[15..0]=A[15..0] xor B[15..0] 11 Y[15..0]=not A[15..0] Po dokonaniu poprawek układ należy skompilować. (2 punkty) 4. Przetestować układ z zadania 3. Należy dobrać takie wartości, aby możliwe było rozpoznanie operacji logicznych. (3 punkty) 5. Zaprojektować i skompilować układ ALU, którego schemat ideowy przedstawiono poniżej: A[15..0] B[15..0] układ arytmetyczny Y[15..0] ster[2..0] ster[1..0] Multiplekser układ logiczny ster[2] Powyższy układ musi być wykonany w postaci schematu i używać układów zrealizowanych w poprzednich etapach, dołączonych jako „symbole”. Układ multipleksera może pochodzić z biblioteki standardowej. Cały układ powinien realizować następujące funkcje w zależności od wejścia „ster”: Wartość wejścia sterującego (ster) Operacja na wyjściu 000 Y[15..0]=A[15..0] – B[15..0] 001 Y[15..0]=A[15..0] + B[15..0] 010 Y[15..0]=A[7..0] × B[7..0] 100 Y[15..0]=A[15..0] and B[15..0] 101 Y[15..0]=A[15..0] or B[15..0] 110 Y[15..0]=A[15..0] xor B[15..0] 111 Y[15..0]=not A[15..0] (5 punktów) 6.Przetestować układ z zadania 5. Należy dobrać takie wartości, aby możliwe było potwierdzenie poprawnej implementacji układu. (5 punktów) PUC Laboratorium 2 9