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. 1. 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 wyjś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ą 1.
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 1. Tabela konwersji BIN/BCD
Komparator
5
1
6
z
7
Układ B
4
2
3
v3
0
m3
0
1
0
v2
0
m2
5
1
1
7-segmentow y
6
7
dekoder
4
2
v1
0
m1
1
3
v0
0
m0
1
Układ A
Rysunek 1. 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.
Rysunek 2 przedstawia sumator pełny, jego symbol i tablicę prawdy sumatora. Sumator pozwala na dodawanie liczb jednobitowych. W celu wykonania operacji dodawania na liczbach wielobitowych zbudować należy sumator kaskadowy rysunek 3.
Ci
XOR
S
inst
A
XOR
B
inst1
21mux
A
Co
B
Y
S
inst2 MULTIPLEXER
A
B
Ci
S
Co
ass
0
0
0
0
0
Ci
cin
0
0
1
1
0
A
dataa[0]
A
result[0] S
0
1
0
1
0
A+B
B
datab[0]
B
0
1
1
0
1
cout Co
inst3
1
0
0
1
0
1
0
1
0
1
1
1
0
0
1
1
1
1
1
1
Rys.2. Sumator pełny jednobitowy-schemat, symbol, tablica prawdy.
A0
B3
A3
B2
A2
B1
A1
B0
Cin
inst5
inst4
inst3
inst6
dataa[0]
datab[0]
cin
dataa[0]
datab[0]
cin
dataa[0]
datab[0]
cin
dataa[0]
datab[0]
cin
B
A
B
A
B
A
B
A
+B
+B
+B
+B
A
ass
A
ass
A
ass
A
ass
result[0]
cout
result[0]
cout
result[0]
cout
result[0]
cout
Cout
S3
S2
S1
S0
Rys.3. Kaskadowy sumator czterobitowy.
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.
Zaprojektować układ sumujący dwie liczby dziesiętne dwucyfrowe A i B. Suma ma być wyświetlana na trzech wyświetlaczach. Liczba A ma być wyświetlana na wyświetlaczach HEX7, HEX6, liczba B powinna być wyświetlana na wyświetlaczach HEX5, HEX4. Wynik w postaci dziesiętnej wyświetlić należy na wyświetlaczach HEX2,1,0. Do wprowadzania liczb wykorzystać należy przełączniki SW. Liczby wprowadzamy w postaci liczb BCD.
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 dwóch liczb dwucyfrowych wykorzystując jako komponenty pełny sumator jednobitowy. Przełącznikami SW17-8 oraz SW7-0
wprowadzamy odpowiednio liczby A, B. Liczba A ma być wyświetlana na wyświetlaczach HEX7, HEX6, liczba B powinna być wyświetlana na wyświetlaczach HEX5, HEX4. Wynik w postaci dziesiętnej wyświetlić należy na wyświetlaczach HEX2,1,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 wyświetlacze.
Część 4.
Opisać sumator 2 liczb dwucyfrowych BCD zgodnie z poniższym algorytmem: 1. T0=A0 +B0
2. if (T0 >9) then
3. Z0 =10
4. C1 =1
5. else
6. Z0 =0
7. C1 =0
8. end if
9. S0=T0 - Z0
10. T1=A1 +B1 +C1
11. if (T1 > 9)
12. Z1 =10
13. C2 =1
14. else
15. Z1 =0
17. end if
18. S1 =T1 – Z1
19. S2 = C2
Powyższy algorytm pozwala zrealizować dodawanie stosując trzy rodzaje układów:
●
sumatory (linie 1, 9, 10, 18),
●
multipleksery (linie 2-8, linie 11-17)
●
komparatory (linie 2, 11).
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 dwóch liczb dwucyfrowych wykorzystując jako komponenty pełny sumator jednobitowy. Przełącznikami SW17-8 oraz SW7-0
wprowadzamy odpowiednio liczby A, B. Liczba A ma być wyświetlana na wyświetlaczach HEX7, HEX6, liczba B powinna być wyświetlana na wyświetlaczach HEX5, HEX4. Wynik w postaci dziesiętnej wyświetlić należy na wyświetlaczach HEX2,1,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 wyświetlacze.
Część 5.
Zaprojektować 8-bitowy sumator zgodnie ze schematem rys. 4. Układ musi być zaprojektowany dla liczb ze znakiem w kodzie uzupełnieniowym do 2. Na wyjściu przeniesienia musi być 1 dla sumy przekraczającej dozwolony zakres liczb powyżej górnej jak i dolnej granicy.
A[7..0]
Clock
Zerow anie
t5
t4
ins
ins
sclr
sclr
data[7..0]
clock
data[7..0]
clock
zx
zx
F
F
F
F
q[7..0]
D
q[7..0]
D
Cin
stin
dataa[7..0]
datab[7..0]
cin
B
A
+B
xx
A
DFF
PRN
Q
D
result[7..0]
cout
CLRN
Przepełnienie
inst7
t6
ins
sclr
data[7..0]
clock
zx
FF
q[7..0]
D
S[7..0]
Rys. 4 Sumator ośmiobitowy
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 dwóch liczb dwucyfrowych wykorzystując jako komponenty pełny sumator jednobitowy. Przełącznikami SW17-8 oraz SW7-0
wprowadzamy odpowiednio liczby A, B. Liczba A ma być wyświetlana na wyświetlaczach HEX7, HEX6, liczba B powinna być wyświetlana na wyświetlaczach HEX5, HEX4. Wynik w postaci szesnastkowej wyświetlić należy na wyświetlaczach HEX1,0. Przekroczenie zakresu sygnalizować wyświetleniem litery E na wyświetlaczu HEX2. Wyświetlacz HEX3
określa znak wyniku.
3. Użyj przycisku KEY0 do resetowania układu, KEY1 jako zegara.
4. Podłącz wejścia i wyjścia do odpowiednich pinów układu.
5. Skompiluj projekt.
6. Zaprogramuj skompilowanym projektem układ FPGA. Sprawdź działanie układu, przełączając przełączniki SW i obserwując wyświetlacze.
Zmodyfikuj projekt z części 5, tak aby układ realizował dodawanie i odejmowanie.
Przełącznikiem SW16 wybieramy rodzaj działania.
Część 7.
Zaprojektuj układ realizujący następujące działanie:
S=(AxB)+(CxD)
●
Wejścia A, B, C, D-8 bitowe, wyjście S 16 bitowe. Liczby A, C wprowadzamy z przełączników SW(15..8), Liczby B i D z przełączników SW(7..0), przełącznikiem SW16
wybieramy parę A, B lub C, D. Użyj przełącznika SW17 do zapisania w rejestrze danych wejściowych, zapis jest możliwy dla SW17=1.
●
Przycisku KEY0 użyj do resetowania układu, Key1 użyj jako przycisku zegarowego.
●
Liczby A i C wyświetlić szesnastkowo na wyświetlaczach HEX7,6, wybór wyświetlanej liczby przy pomocy przełącznika SW16.
●
Liczby B i D wyświetlić szesnastkowo na wyświetlaczach HEX5,4, wybór wyświetlanej liczby przy pomocy przełącznika SW16.
●
Sumę wyświetlić na wyświetlaczach HEX3-0. Wyjście przeniesienia na zielonej diodzie LEDG8.