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

Podobne dokumenty