Ćwiczenie laboratoryjne 1
Celem pierwszego ćwiczenia jest poznanie jak można sterować diodami i wyświetlaczami 7-
segmentowymi. W ćwiczeniu jako wejścia użyte zostaną przełączniki SW, wyjścia układu zostaną
podłączone do diód LED oraz do wyświetlaczy siedmiosegmentowych.
Część 1
Zestaw DE2 zawiera 18 przełączników dwustanowych, oznaczonych SW 17-0. Wykorzystane
zostaną one jako wejścia układu. Wyjściami układu będą diody LED, oznaczone LEDR 17-0.
Przykład napisany w VHDL bezpośrednio łączy przełączniki SW z diodami LED, świecące diody
pokażą wartość binarną ustawioną przełącznikami SW.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
--prosty układ łączący przełączniki SW z czerwonymi diodami LEDR
ENTITY przyklad1 IS
PORT(SW
:IN STD_LOGIC_VECTOR(17 downto 0);
LEDR :OUT STD_LOGIC_VECTOR(17 downto 0));
END przyklad1;
ARCHITECTURE Behavior OF przyklad1 IS
BEGIN
LEDR<=SW;
END Behavior;
Przed zaprogramowaniem układu FPGA konieczne jest zapoznanie się z dokumentacją zestawu
DE2 (User Manual). Przełączniki i diody są podłączone do określonych pinów programowanego
układu. Przykładowo SW0 jest podłączony do pinu N25, dioda LEDR0 do AE23.
Przebieg ćwiczenia:
1. Stwórz nowy projekt w programie Quartus II. Z biblioteki układów wybierz układ Cyclone
II EP2C35F672C6.
2. Otwórz nowy plik w edytorze tekstowym, przepisz kod VHDL z rysunku 1 i zapisz plik w
swoim projekcie.
3. Podłącz wejścia i wyjścia do odpowiednich pinów układu. Skompiluj projekt.
4. Zaprogramuj skompilowanym projektem układ FPGA. Sprawdź działanie układu,
przełączając przełączniki SW.
Część 2
Rysunek 2a pokazuje prosty multiplekser 2 na 1 z wejściem selekcyjnym (adresowym) s. Jeżeli s=0
wyjście m zostanie połączone z wejściem x, dla s=1 m=y. Rys. 2b to tablica prawdy multipleksera,
rys.2c przedstawia stosowany najczęściej symbol.
Multiplekser możemy opisać w języku VHDL następującym wyrażeniem:
m<=(NOT (s) AND x) or (s AND y);
Rys.3 przedstawia realizację przy pomocy multiplekserów o jednym wejściu adresowym
przesyłania na wyjście jednej z dwóch liczb ośmiobitowych (X,Y dwie liczby ośmiobitowe). Dla
s=0 na wyjściach m0 do m7 pojawi się liczba X(x0,x1,x2..x7). Obok symbol multipleksera „2 na
1”, który przełącza dwie 8-bitowe magistrale X,Y.
Rys. 3. Realizacja przy pomocy multiplekserów o jednym wejściu adresowym przesyłania
na wyjście jednej z dwóch liczb ośmiobitowych i symbol multipleksera „2 na 1”,
który przełącza dwie 8-bitowe magistrale X,Y.
Przebieg ćwiczenia:
1. Stwórz nowy projekt w programie Quartus II. Z biblioteki układów wybierz układ Cyclone
II EP2C35F672C6.
2. Opisz w VHDL multiplekser „2 na 1”, który przełącza dwie 8-bitowe magistrale X,Y.
Przełącznik SW17 zestawu DE2 użyj jako wejście adresowe s, przełącznikami SW7-0
wprowadzać będziemy X, przełącznikami SW15-8 ustawimy Y. Stany ustawiane
przełącznikami SW pokazujemy na diodach LEDR (diody czerwone), wyjścia M
podłączymy do diód zielonych LEDG7-0.
3. Podłącz wejścia i wyjścia do odpowiednich pinów układu.
4. Skompiluj projekt.
5. Zaprogramuj skompilowanym projektem układ FPGA. Sprawdź działanie układu,
przełączając przełączniki SW i obserwując diody.
Część 3
Rys.4a przedstawia realizację przesyłania stanu jednego z pięciu wejść (u,v,w,x,y) na wyjście m
przy pomocy multiplekserów o jednym wejściu adresowym sterowanych trzema różnymi sygnałami
adresowymi. Rysunki kolejne przedstawiają tablicę prawdy układu, symbol układu multipleksera „5
na1”. Rys.5 to multiplekser „5 na 1” przełączający pięć 3-bitowych magistrali U,V,W,X,Y na
0
1
0
1
s
x7
y7
x6
y6
0
1
0
1
y0
x0
m7
m6
m0
Y
8
X
8
M
8
s
3_bitowe wyjście M.
S2 S1 S0
m
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
u
v
w
x
y
y
y
y
Rysunek 4. Multiplekser 5 na 1-budowa, tablica prawdy i symbol multipleksera
Rys. 5. Multiplekser „5 na 1” przełączający 3-bitowe magistrale U,V, W, X, Y na 3-bitowe wyjście
M
Wykonaj następujące czynności w celu zaimplementowania 3-bitowego multipleksera:
1. Stwórz nowy projekt w programie Quartus II. Z biblioteki układów wybierz układ Cyclone
II EP2C35F672C6.
2. Opisz w VHDL 3-bitowy multiplekser „5 na 1”, który przełącza 3-bitowe magistrale
U,V,W,X,Y. Przełączniki SW17-15 zestawu DE2 użyjemy jako wejście adresowe S,
0
1
0
1
s2
s0
s1
u
v
w
x
y
m
0
1
0
1
000
001
010
011
100
s2
s1
s0
u
v
w
x
y
y
000
001
010
011
100
3
s2
s1
s0
U
V
W
X
Y
3
3
3
3
3
M
przełącznikami SW14-0 wprowadzać będziemy 3-bitowe liczby U,V,W,X,Y. Stany
ustawiane przełącznikami SW pokazujemy na diodach LEDR (diody czerwone), wyjścia M
podłączymy do diód zielonych LEDG2-0.
3. Podłącz wejścia i wyjścia do odpowiednich pinów układu.
4. Skompiluj projekt.
5. Zaprogramuj skompilowanym projektem układ FPGA. Sprawdź działanie układu,
przełączając przełączniki SW i obserwując diody.
Część 4
Rysunek nr 6 przedstawia dekoder, który steruje wyświetlaczem 7-segmentowym o wspólnej
anodzie (segmanty zapalają się przy logicznym stanie 0) . Dekoder sterowany jest sygnałami s0, s1,
s2. Zadaniem układu jest wyświetlenie na wyświetlaczu kolejno czterech liter H, A, L, O zgodnie z
tabelą prawdy-tab.1. Segmenty wyświetlacza oznaczamy kolejno cyframi 0, 1, 2, 3, 4, 5, 6.
Rysunek 6. 7-segmentowy dekoder sterujący wyświetlaczem siedmiosegmentowym.
S2 S1 S0
Wyświetlane
litery
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
0 0 0
H
E
L
O
Tabela 1. Kody wyświetlanych liter
Wykonaj następujące czynności w celu zaimplementowania dekodera do sterowania wskażnikiem:
1. Stwórz nowy projekt w programie Quartus II. Z biblioteki układów wybierz układ Cyclone
II EP2C35F672C6.
2. Opisz w VHDL 3-bitowy dekoder, który steruje wyświetlaczem 7-segmentowym. Wejścia
sterujące s2, s1, s0 podłącz do przełączników SW2-0. Wyjścia dekodera podłącz do
wyświetlacza HEX0 zestawu. Deklaracja wyjścia układu powinna być następująca:
HEX0: OUT STD_LOGIC_VECTOR(0 TO6);
3. Podłącz wejścia i wyjścia do odpowiednich pinów układu.
4. Skompiluj projekt.
0
0
0
7-segmentow y
dekoder
3
6
0
4
2
5
1
s0
s1
s2
5. Zaprogramuj skompilowanym projektem układ FPGA. Sprawdź działanie układu,
przełączając przełączniki SW i obserwując wyświetlacz.
Część 5
Układ z rys.7 pozwala na wyświetlenie 5 różnych znaków na wyświetlaczu 7-segmentowym. Kody
znaków ustawiamy przy pomocy przełączników SW14-0, o kolejności ich wyświetlania decyduje
kod wprowadzany przełącznikami SW17-15. Znaki do wyświetlenia to H, E, L, L, O. Litery
powinny przesuwać się na pięciu wyświetlaczach zgodnie z tabelą Tab.2.
Rysunek 7. Układ do wyświetlania pięciu znaków na wyświetlaczu 7-segmentowym
Kod VHDL do układu z rys.7.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY hello IS
PORT(SW
:IN STD_LOGIC_VECTOR(17 DOWNTO 0);
HEX0 :OUT STD_LOGIC_VECTOR(0 TO 6));
END hello;
ARCHITECTURE Behavior OF hello IS
COMPONENT mux_3bit_5to1
PORT(S,U,V,W,X,Y :IN STD_LOGIC_VECTOR(2 DOWNTO );
M
:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END COMPONENT;
COMPONENT wys_7seg
PORT(s
:IN STD_LOGIC_VECTOR(2 DOWNTO );
wyj
:OUT STD_LOGIC_VECTOR(0 TO 6));
END COMPONENT;
SIGNAL M: STD_LOGIC_VECTOR(2 DOWNTO );
BEGIN
M0:mux_3bit_5to1 PORT MAP(SW(17 DOWNTO 15),SW(14 DOWNTO 12),SW(11
DOWNTO 9),SW(8 DOWNTO 6),SW(5 DOWNTO 3),SW(2 DOWNTO 0),M);
000
001
010
011
100
7-segmentow y
dekoder
3
SW17
SW16
SW15
SW14-12
SW11-9
SW8-6
SW5-3
SW2-0
3
6
0
4
2
5
1
7
3
3
3
3
3
H0:wys_7seg PORT MAP(M,HEX0);
END Behavior;
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY mux_3bit_5to1 IS
PORT(S,U,V,W,X,Y :IN STD_LOGIC_VECTOR(2 DOWNTO );
M
:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END mux_3bit_5to1;
ARCHITECTURE Behavior OF mux_3bit_5to1 IS
--kod do wprowadzenia
END Behavior;
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY wys_7seg IS
PORT(s
:IN STD_LOGIC_VECTOR(2 DOWNTO );
wyj
:OUT STD_LOGIC_VECTOR(0 TO 6));
END wys_7seg;
ARCHITECTURE Behavior OF wys_7seg IS
--kod do wprowadzenia
END Behavior;
Opisany powyżej układ rozbuduj do układu sterującego pięcioma wyświetlaczami 7-
segmentowymi. Na wyświetlaczch powinny przesuwać się litery zgodnie z tabelą 2.
SW17 SW16 SW15
Wyświetlane litery
0 0 0
H E L L O
0 0 1
E L L O H
0 1 0
L L O H E
0 1 1
L O H E L
1 0 0
O H E L L
Tabela 2. Przesuwanie słowa HELLO na pięciu wyświetlaczach.
Wykonaj następujące czynności w celu zaimplementowania układu do sterowania 5
wyświetlaczami:
1. Stwórz nowy projekt w programie Quartus II. Z biblioteki układów wybierz układ Cyclone
II EP2C35F672C6.
2. Opisz w VHDL układ do wyświetlania przesuwających się na pięciu wyświetlaczach liter H,
E, L, L, O. Przełaczniki SW17-15 podłączymy do wejść adresowych pięciu 3-bitowch
multiplekserów. Przełączniki SW14-0 podłączyć do 3-bitowych wejść multiplekserów tak
aby uzyskać sterowanie zgodnie z tabelą tab.2. Podłączyć wyjścia multiplekserów do wejść
dekoderów sterujących wyświetlaczami HEX4, HEX3, HEX2, HEX1, HEX0.
3. Podłącz wejścia i wyjścia do odpowiednich pinów układu.
4. Skompiluj projekt.
5. Zaprogramuj skompilowanym projektem układ FPGA. Sprawdź działanie układu,
przełączając przełączniki SW i obserwując wyświetlacze.
Część 6
Rozbudowując układ z poprzedniego punktu zrealizować projekt przesuwający w lewo
pięcioliterowe słowo HELLO na ośmiu wyświetlaczach siedmiosegmentowych. Sterowanie
przesuwaniem realizujemy przy pomocy przełączników SW17-15. Słowo przesuwać ma się
zgodnie z tabelą 3.
SW17 SW16 SW15
Wyświetlane litery
0 0 0
H E L L O
0 0 1
H E L L O
0 1 0
H E L L O
0 1 1
H E L L O
1 0 0
E L L O H
1 0 1
L L O H E
1 1 0
L O H E L
1 1 1
O H E L L
Tabela 3. Przesuwanie słowa HELLO na ośmiu wyświetlaczach.
Wykonaj następujące czynności w celu zaimplementowania układu do sterowania 8
wyświetlaczami:
1. Stwórz nowy projekt w programie Quartus II. Z biblioteki układów wybierz układ Cyclone
II EP2C35F672C6.
2. Opisz w VHDL układ do wyświetlania przesuwających się na pięciu wyświetlaczach liter H,
E, L, L, O. Przełaczniki SW17-15 podłączymy do wejść adresowych pięciu 3-bitowch
multiplekserów. Przełączniki SW14-0 podłączyć do 3-bitowych wejść multiplekserów tak
aby uzyskać sterowanie zgodnie z Tabelą 3. Podłączyć wyjścia 8 multiplekserów do wejść 8
dekoderów sterujących wyświetlaczami HEX7, HEX6, HEX5, HEX4, HEX3, HEX2,
HEX1, HEX0.
3. Podłącz wejścia i wyjścia do odpowiednich pinów układu.
4. Skompiluj projekt.
5. Zaprogramuj skompilowanym projektem układ FPGA. Sprawdź działanie układu,
przełączając przełączniki SW i obserwując wyświetlacze.
Część 7.
Zadania do zrealizowania na zajęciach
Zad.1.
Projekt układu realizującego funkcję logiczną zadaną tablicą prawdy. Numer indeksu zamieniony
na liczbę binarną określa wariant realizowany przez studenta-decyduje o bramkach, z których
realizowany jest układ oraz określa tablicę prawdy układu.
Zadania do zrealizowania określają następujące tabele:
tabela 4.
tabela 5.
X3 X2 X1 X0 Y
b7 b6 b5
elementy
0
0
0
0
0
0
0
0
3NAND-3AND
0
0
0
1 b0
0
0
1
MUX3
0
0
1
0
1
0
1
0
MUX4
0
0
1
1 b2
0
1
1
2NOR-4AND
0
1
0
0
1
1
0
0
2NAND-2OR
0
1
0
1 b3
1
0
1
2NAND-2NOR
0
1
1
0
0
1
1
0
MUX2
0
1
1
1
0
1
1
1
3NAND-3AND
1
0
0
0 b1
1
0
0
1
1
1
0
1
0
0
1
0
1
1 b0
1
1
0
0
0
1
1
0
1
1
1
1
1
0
1
1
1
1
1 b4
Tabela 4 to tablica prawdy układu, tabela 5 określa z jakich elementów ma być zrealizowany układ.
Objaśnienia do tabel:
MUX2-multiplekser o dwóch wejściach adresowych,
MUX3-multiplekser o trzech wejściach adresowych,
MUX4-multiplekser o tczterech wejściach adresowych,
2AND-dwuwejściowa bramka AND,
3NAND-bramka NAND o trzech wejściach,
b7, b6, b5, b4, b3, b2, b1, b0-kolejne bity numeru indeksu zamienionego na liczbę binarną.
Przykładowy projekt układu
Numer indeksu binarnie: 11111111;
Zgodnie z tabelą 5 układ będzie realizowany z trójwejściowych bramek NAND i trójwejściowych
bramek AND. Funkcja logiczna realizowana w układzie ma postać:
f(x3,x2,x1,x0)= x3'x2'x1+x1'x0+x3'x2x1'+x3x2x1+x3x2'x1'+x3x1x0
Schemat układu
Kod układu w VHDL
Zad.2.
Projektowanie transkoderów
Transkoder ma być zaprojektowany jako układ kombinacyjny. Sygnałem wejściowym
projektowanych transkoderów jest liczba czterobitowa wprowadzana z przełączników SW3-0.
Sygnał wyjściowy transkodera to ciąg binarny w kodzie określonym realizowanym wariantem. Trzy
młodsze bity decydują o elementach z jakich będzie wykonany transkoder, trzy starsze bity
określają kod wyjściowy. Wprowadzana liczba ma być pokazana dziesiętnie na wyświetlaczach
HEX1, HEX0, ciąg wyjściowy pokazujemy na diodach świecących.
b5
b4
b3
Kod wyjściowy
b2 b1 b0
elementy
0
0
0
BCD 8421
0
0
0
MUX2
0
0
1
BCD 2421(Aikena)
0
0
1
MUX3
0
1
0
BCD 5211
0
1
0
MUX4
0
1
1
BCD 7421
0
1
1
NAND
1
0
0
Greya
1
0
0
NOR
1
0
1
84-2-1
1
0
1
MUX3
1
1
0
2z5
1
1
0
MUX2
1
1
1
Wattsa
1
1
1
MUX4
Tabela 6.
Tabela 7.
Przykładowy projekt układu zamieniającego czterobitową liczbę binarną na kod Johnsona. Układ
zrealizowany został na multiplekserach o trzech wejściach adresowych.
Tabela prawdy układu:
x3 x2 x1 x0
Kod Johnsona
0 0
0
0
00000
0 0
0
1
00001
0 0
1
0
00011
0 0
1
1
00111
0 1
0
0
01111
0 1
0
1
11111
0 1
1
0
11110
0 1
1
1
11100
1 0
0
0
11000
1 0
0
1
10000
Tabela 8.
Schemat układu
Kod układu w VHDL
Zad. 3.
Obsługa wyświetlacza 7-segmentowego
Zaprojektować układ sterujący czterema wyświetlaczami 7-segmentowymi. Na wyświetlaczach
mają się wyświetlać wyrazy czteroliterowe. Układ może być sterowany z licznika czterobitowego.
Napis ma się przesuwać w lewo lub prawo. Zadanie do wykonania określa tabela 9.
b3 b2 b1
b0
napis
b4
Kierunek przesuwania
0
0
0
0
POLE
0
Lewo
0
0
0
1
HELA
1
Prawo
0
0
1
0
CELA
0
0
1
1
bELA
0
1
0
0
dOLA
0
1
0
1
COLA
0
1
1
0
FALA
0
1
1
1
OLAF
1
0
0
0
dALI
1
0
0
1
CALI
1
0
1
0
PALI
1
0
1
1
HALO
1
1
0
0
SOLO
1
1
0
1
SOLI
1
1
1
0
LUbI
1
1
1
1
LUFA
Tabela 9.
Przykładowy projekt układu wyświetlającego słowo LUbA przesuwane na czterech
wyświetlaczach w LEWO.
Schemat układu
Kod układu w VHDL
Ćwiczenie laboratoryjne 2
Celem tego ćwiczenia jest zaprojektowanie układu do konwersji liczby binarnej na liczbę BCD oraz
realizacja układu sumującego dwie liczby BCD.
Część 1
Z zagadnieniem przetwarzania kodu dwójkowego (BIN) na kod dwójkowo-dziesiętny i odwrotnie
mamy do czynienia przy wprowadzaniu i wyprowadzaniu informacji z urządzeń cyfrowych. Kod
wewnętrzny układów cyfrowych to kod dwójkowy, natomiast dla człowieka bardziej czytelnym jest
kod dziesiętny. Ponieważ istnieje wiele algorytmów konwersji BIN/BCD i BCD/BIN oraz
możliwości realizacji tych samych algorytmów różnymi układami temat ten jest realizowany
osobno.
Schemat funkcjonalny układu znajduje się na rys. 8. Zadaniem komparatora jest wykrycie czy
liczba V jest większa od 9. Układ A to układ korekcji, który do trzech młodszych bitów bitów (dla
liczb większych od 9) dodaje 110. Wynik dodawania pojawia się na wjściu multiplekserów tylko
dla liczb większych od 9 (z=1). Układ B to układ sterowania wyświetlaczem 7-segmentowym.
Wyświetlacz d1 wyświetla liczbę dziesiątek. 7-segmentowy dekoder steruje wyświetlaczem d0,
który wyświetla jedności.
Należy zaprojektować układ do konwersji 4-bitowego numeru V=v3v2v1v0 na dwie cyfry
dziesiętne D=d1d0 zgodnie z tablicą 10.
Wartość binarna
Wartość dziesiętna
0 0 0 0
0 0
0 0 0 1
0 1
0 0 1 0
0 2
0 0 1 1
0 3
0 1 0 0
0 4
0 1 0 1
0 5
0 1 1 0
0 6
0 1 1 1
0 7
1 0 0 0
0 8
1 0 0 1
0 9
1 0 1 0
1 0
1 0 1 1
1 1
1 1 0 0
1 2
1 1 0 1
1 3
1 1 1 0
1 4
1 1 1 1
1 5
Tabela 10. Tabela konwersji BIN/BCD
Rysunek 8. Schemat funkcjonalny układu do konwersji liczby binarnej na liczbę BCD.
Wykonaj następujące czynności w celu zaimplementowania układu konwersji:
1. Stwórz nowy projekt w programie Quartus II. Z biblioteki układów wybierz układ Cyclone
II EP2C35F672C6.
2. Opisz w VHDL układ komparatora, układ multipleksera, dekoder 7-segmentowy, układ
sterowania wyświetlaczem B oraz układ korekcji A. Przełącznikami SW3-0 będzie
wprowadzany liczba binarna V. Wyświetlacze HEX1, HEX0 będą pokazywały odpowiednio
d1 i d0.
3. Podłącz wejścia i wyjścia do odpowiednich pinów układu.
4. Skompiluj projekt.
5. Zaprogramuj skompilowanym projektem układ FPGA. Sprawdź działanie układu,
przełączając przełączniki SW i obserwując wyświetlacze.
Część 2
Rysunek 9 przedstawia sumator pełny, jego symbol i tablicę prawdy sumatora. Sumator pozwala na
Układ B
3
6
0
4
2
5
1
7
7-segmentow y
dekoder
3
6
0
4
2
5
1
7
Komparator
Układ A
0
1
0
1
0
1
0
1
m3
m2
m1
m0
0
v0
v1
v2
v3
z
dodawanie liczb jednobitowych. W celu wykonania operacji dodawania na liczbach wielobitowych
zbudować należy sumator kaskadowy rysunek 10.
Wykonaj następujące czynności w celu zaimplementowania układu sumatora:
1. Stwórz nowy projekt w programie Quartus II. Z biblioteki układów wybierz układ Cyclone
II EP2C35F672C6.
2. Opisz w VHDL układ sumatora czterobitowego wykorzystując jako komponent pełny
sumator jednobitowy. Przełącznikami SW7-4 oraz SW3-0 wprowadzamy odpowiednio
liczby A, B. SW8 podłączyć do wejścia przeniesienia cin. Przełączniki SW podłączyć do
diód LEDR, wyjścia układu podłączyć do diód LEDG.
3. Podłącz wejścia i wyjścia do odpowiednich pinów układu.
4. Skompiluj projekt.
5. Zaprogramuj skompilowanym projektem układ FPGA. Sprawdź działanie układu,
przełączając przełączniki SW i obserwując diody.
Część 3.
Ćwiczenie laboratoryjne 3
Celem ćwiczenia jest poznanie zasad funkcjonowania przerzutników, rejestrów i liczników różnych
typów i sposobów ich projektowania.
Część I
Projektowanie przerzutników
W układach cyfrowych przerzutniki wykorzystywane są jako elementy zapamiętujące informację.
Przerzutnik bistabilny może znajdować się w jednym z dwóch stanów. Klasyfikacja określająca
sposób funkcjonowania przerzutników określa stany w jakich znajdują się wejścia i wyjścia
przerzutnika w dwóch kolejnych taktach ts i ts+1. W praktyce wykorzystujemy następujące typy
przerzutników: RS, D, JK, T, DV, E. Sposób funkcjonowania przerzutnika może być zadany tabelą
przełączeń.
Zadania do wykonania
1. Zapoznać się z tabelami przełączeń podstawowych typów przerzutników.
2. Wykorzystując bramki NAND zbudować przerzutnik MS (typ przerzutnika określa
prowadzący).
3. W języku VHDL opisać strukturalnie dany przerzutnik.
4. Opisać powyższe przerzutniki funkcjonalnie.
5. Sprawdzić działanie przerzutników w symulacji.
Część II
Projektowanie rejestrów
Celem ćwiczenia jest zapoznanie studentów z różnymi typami rejestrów , metodami ich
projektowania. Zapoznanie się z instrukcjami VHDL opisującymi struktury regularne. Do realizacji
ćwiczenia niezbędna jest znajomość teorii dotyczącej budowy i działania rejestrów. Operacje
realizowane w projektowanych rejestrach:
- Y1 - ustawienie stanu początkowego rejestru (np. zerowanie)
- Y2 - zapis informacji do rejestru
- Y3 - iloczyn logiczny dwóch słów
- Y4 - suma logiczna dwóch słów
- Y5 - iloczyn logiczny dwóch słów
- Y6 - przesunięcie informacji w rejestrze ( Y6l - w lewo , Y6p2 - w prawo o dwa bity),
- Y7 – inwertowanie zawartości rejestru
Dane do rejestru wprowadzamy z przełączników , wyjście rejestru na diody
Realizacja ćwiczenia polega na :
- przygotowanie elementów składowych (przerzutniki , zaprojektowanie rejestru
jednobitowego – opisać go funkcjonalnie i strukturalnie)
- zaprojektowanie rejestru jednobitowego (opisać go funkcjonalnie i strukturalnie )
- na podstawie rejestru 1-bitowego zaprojektować rejestr n-bitowy zgodnie z tabelą
wariantów
- sprawdzenie poprawności działania rejestrów za pomocą symulatora
- przydzielenie pinów wejściowych i wyjściowych
- zaprogramowanie układu
- prezentacja działającego układu
Tabela wariantów realizowanych przez studentów
B3
B1
B0
długość rejestru i
typ przerzutnika
B2
B5
B4
operacje
0
0
0
6 T
0
0
0
y2 y3 y4 y6l
0
0
1
8 JK
0
0
1
y2 y5 y4 y6p2
0
1
0
7 D
0
1
0
y2 y3 y5 y6l2
0
1
1
6 RS
0
1
1
y2 y5 y1 y6p
1
0
0
7 T
1
0
0
y2 y1 y4 y6p2
1
0
1
8 JK
1
0
1
y2 y3 y4 y6p
1
1
0
9 D
1
1
0
y2 y3 y5 y6l
1
1
1
9 JK
1
1
1
y2 y4 y5 y6l2
Przykład
Rejestr 8-bitowy-zerowanie,zapis,suma modulo2
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity rej8 is
port (
X:in STD_logic_vector(7 downto 0);
clk:in std_logic;
Y1:in std_logic;
Y2:in std_logic;
Y5:in std_logic;
out1:out std_logic_vector(7 downto 0));
end rej8;
architecture rej8b of rej8 is
component tr is
-- komponent rejestr jednobitowy
port
(
Y1:in std_logic;
Y2:in std_logic;
Y5:in std_logic;
clk:in std_logic;
X:in std_logic;
out1:out std_logic);
end component tr;
begin
b3
b1
b0
typ
przurzutnika
b2
b5
operacje
b4
b6
długośc
rejestrów
0
0
0
T
0
0
y2-y4-y3
0
0
7
0
0
1
JK
0
1
y2-y3-y5
0
1
6
0
1
0
D
1
0
y2-y5-y1
1
0
5
0
1
1
RS
1
1
y2-y4-y5
1
1
8
1
0
0
JK
0
0
y2-y4-y3
0
0
7
1
0
1
T
0
1
y2-y3-y5
0
1
6
1
1
0
RS
1
0
y2-y5-y1
1
0
5
1
1
1
D
1
1
y2-y4-y5
1
1
8
G_1:for i in 0 to 7 generate
rej1:tr port map(Y1,Y2,Y5,clk,out1=>out1(i),X=>X(i));
end generate G_1;
end rej8b;
Komponenty rejestru
rejestr jednobitowy
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use work.all;
entity tr is
port
(
X:in STD_logic;
clk:in std_logic;
Y1:in std_logic;
Y2:in std_logic;
Y5:in std_logic;
out1:out std_logic);
end tr;
architecture rej of tr is
component przerzutnikT is -- komponenty rejestru 1-bitowego/*
port(
T:in std_logic;
clk:in std_logic;
Q:out std_logic;
nQ:out std_logic);
end component przerzutnikT;
component not1 is
port(
in1:in std_logic;
y:out std_logic);
end component not1;
component or33 is
port(
in1:in std_logic;
in2:in std_logic;
in3:in std_logic;
y:out std_logic);
end component or33;
component and33 is
port(
in1:in std_logic;
in2:in std_logic;
in3:in std_logic;
y:out std_logic);
end component and33;
signal a11, a2,a21,a22,a3,TT,nQ,nX,outt1:std_logic;
begin
out1<=outt1;
nn:not1 port map(in1=>X,y=>nX);
--operacja resetY1
b1:and33 port map(in1=>y1,in2=>outt1,in3=>y1,y=>a11);
--operacja zapisY2
b2:and33 port map(in1=>Y2,in2=>nX,in3=>outt1,y=>a2);
b21:and33 port map(in1=>Y2,in2=>X,in3=>nQ,y=>a21);
n2:or33 port map(in1=>a2,in2=>a21,in3=>a2,y=>a22);
--operacja moduloY5
b3:and33 port map(in1=>Y5,in2=>X,in3=>x,y=>a3);
ns2:or33 port map(in1=>a11,in2=>a22,in3=>a3,y=>TT);
p1:przerzutnikT port map(clk=>clk,T=>TT,Q=>outt1,nQ=>nQ);
end rej;
Przerzutnik T
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity przerzutnikT is
port( t : in STD_LOGIC;
clk : in STD_LOGIC;
Q : out STD_LOGIC;
nQ : out STD_LOGIC
);
end przerzutnikT;
architecture przerzutnikT of przerzutnikT is
begin
xx:process(clk,t)
variable QQ :std_logic:='1';
variable NQQ : std_logic:='0';
begin
if clk= '0' and clk'event then
if t='1' then QQ:= not QQ;
NQQ:= not QQ;
end if;
end if;
Q<=QQ;
NQ<=NQQ
;
end process xx;
end przerzutnikT;
Część III
Wykorzystanie VHDL do projektowania liczników asynchronicznych i synchronicznych.
Celem ćwiczenia jest poznanie zasad funkcjonowania przerzutników różnych typów oraz
projektowanie liczników synchronicznych i asynchronicznych. Projektowane będą 2 liczniki
maksymalnie 5-bitowe. Stany wyjściowe liczników pokazujemy dziesiętnie na wyświetlaczach 7
segmentowych
Realizacja ćwiczenia :
- przygotowanie elementów składowych (transkodery)
- sprawdzenie poprawności działania w trakcie symulacji
- przydzielenie pinów wejściowych i wyjściowych
- zaprogramowanie układu
- prezentacja działającego układu
Liczniki projektujemy zgodnie z poniższymi tabelami :
Tabela 1
b3
b2
b1
b0
Licznik
synchroniczny
Typ przerzutnika
0
0
0
0
modulo 10
JK
0
0
0
1
modulo 13
D
0
0
1
0
modulo 11
RS
0
0
1
1
modulo 12
T
0
1
0
0
modulo 14
JK
0
1
0
1
modulo 9
D
0
1
1
0
pracujący
w
kodzie Greya
RS
0
1
1
1
pracujący
w
kodzie Aikena
T
1
0
0
0
kod 84-2-1
JK
1
0
0
1
kod 5211
D
1
0
1
0
kod Greya
RS
1
0
1
1
modulo 15
T
1
1
0
0
kod Greya
JK
1
1
0
1
modulo 10
D
1
1
1
0
kod 5211
RS
1
1
1
1
kod Aikena
T
b3
b2
b1
b0
sekwencja
Typ
przerzutnika
0
0
0
0
0 2 46 8 10 9 7 5 3 1 0 …
JK
0
0
0
1
0 1 0 2 0 3 0 1
D
0
0
1
0
0 1 4 7 10 9 6 5 3 2 0
RS
0
0
1
1
mod 15 , s=1 góra s=0 dół
T
0
1
0
0
s=0 : 0 1 2 3 4 5 6 7 0 …
s=1 : 0 3 5 1 4 2 6 7 0 …
JK
0
1
0
1
s=0 : 0 1 2 3 4 5 6 0 …
s=1 : 1 64 2 0 5 3 1…
D
0
1
1
0
s=0 : 0 1 2 3 4 5 6 7 8 9 0
s=1 : 0 4 9 1 3 6 5 8 2 0
RS
0
1
1
1
s=0 : 0 6 2 4 5 3 9 1 8 7
s=1 : 0 1 2 3 4 5 6 7 8 9
T
1
0
0
0
s=0 : 0 1 2 3 4 5 6 7 0 …
s=1 : 0 3 5 1 4 2 6 7 0 …
JK
1
0
0
1
0 1 0 2 0 3 0 1
D
1
0
1
0
0 1 4 7 10 9 6 5 3 2 0
RS
1
0
1
1
mod 15 , s=1 góra s=0 dół
T
1
1
0
0
s=0 : 0 1 2 3 4 5 6 7 0 …
s=1 : 0 3 5 1 4 2 6 7 0 …
JK
1
1
0
1
s=0 : 0 1 2 3 4 5 6 0 …
s=1 : 1 64 2 0 5 3 1…
D
1
1
1
0
s=0 : 0 1 2 3 4 5 6 7 8 9 0
s=1 : 0 4 9 1 3 6 5 8 2 0
RS
1
1
1
1
s=0 : 0 6 2 4 5 3 9 1 8 7
s=1 : 0 1 2 3 4 5 6 7 8 9
T
Tabela 2
Wykonaj następujące czynności w celu zaimplementowania układu rejestrów i liczników:
1. Stwórz nowe projekty w programie Quartus II. Z biblioteki układów wybierz układ Cyclone
II EP2C35F672C6.
2. Opisz w VHDL układ rejestru o odpowiedniej długości. Przełaczniki SW17-15 podłączymy
do wejść wyboru operacji realizowanej w rejestrze. Przełącznikami SW14-0 wprowadzać
będziemy słowa wejściowe. Wartość wprowadzaną do rejestru pokazujemy na diodach,
wyjście rejestru podłączyć do diód.
3. Podłącz wejścia i wyjścia do odpowiednich pinów układu.
4. Skompiluj projekt.
5. Zaprogramuj skompilowanym projektem układ FPGA. Sprawdź działanie układu,
przełączając przełączniki SW i obserwując diody.
Warianty realizowanych licznków
Tabela 2
typ przerzutnika
JK
JK
JK
JK
JK
JK
JK
JK
D
D
D
D
D
D
D
D