background image

Ć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. 

background image

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

background image

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

background image

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

background image

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

background image

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 

background image

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: 

background image

 

 

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

background image

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

background image

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

background image

     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

background image

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.

background image

Ć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

background image

                       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

background image

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);

background image

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

background image

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

 

kodzie Greya

RS

0

1

1

1

pracujący

 

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

background image

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.

                               

background image

           Warianty realizowanych licznków

Tabela 2

typ przerzutnika

JK
JK
JK
JK
JK

JK

JK

JK

D
D
D
D
D

D

D

D

background image