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.
s
s
x7
0
m7
y7
1
8
X
0
8
8
M
Y
1
x6
0
m6
y6
1
x0
0
m0
y0
1
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
s2
s1
s0
u
0
0
v
1
1
0
m
1
w
0
x
1
y
s2
S2 S1 S0
m
s1
s0
0 0 0
u
0 0 1
v
0 1 0
w
0 1 1
x
u
000
1 0 0
y
v
001
1 0 1
y
w
y
010
1 1 0
y
x
011
1 1 1
y
y
100
Rysunek 4. Multiplekser 5 na 1-budowa, tablica prawdy i symbol multipleksera s2
s1
s0
3
U
000
3
V
001
3
W
3
M
010
X
3
3
011
Y
100
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,
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.
0
5
1
s2
7-s 0
egmentow y
6
s1
dekoder
s0
0
4
2
3
0
Rysunek 6. 7-segmentowy dekoder sterujący wyświetlaczem siedmiosegmentowym.
S2 S1 S0
Wyświetlane
litery
0 0 0
H
0 0 1
E
0 1 0
L
0 1 1
O
1 0 0
1 0 1
1 1 0
0 0 0
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.
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.
SW17
SW16
SW15
0
3
SW14-12
000
5
1
3
SW11-9
001
3
7-segmentow y
6
7
SW8-6
3
010
dekoder
SW5-3
3
4
011
2
3
SW2-0
100
3
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);
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
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
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