Podstawy systemów cyfrowych

Transkrypt

Podstawy systemów cyfrowych
Podstawy systemów cyfrowych - Laboratorium
Informatyka II rok studia dzienne
Ćwiczenie nr 9: Nowoczesne systemy projektowania układów cyfrowych cz. 2
Cel ćwiczenia
Celem ćwiczenia jest poznanie podstawowych zagadnień związanych z cyfrowymi układami
programowalnymi PLD, sposobem projektowania.
Podsumowaniem ćwiczenia będzie praktyczna realizacja prostego projektu układu cyfrowego
przy wykorzystaniu zestawu uruchomieniowego firmy ATMEL.
Wymagane wiadomości
• Układy PLD – informacje podstawowe – rodzaje, rodziny, technologie.
• Podstawowe informacje na temat układu ATMEL ATF1508. Podstawowe bloki funkcjonalne.
Budowa makroceli.
• Elementy języka CUPL – opis układów sekwencyjnych.
Wykorzystywany sprzęt
Komputer PC z oprogramowaniem WinCUPL
Zestaw uruchomieniowy ATMEL CPLD Development kit.
Literatura
Łuba T.,Markowski M.A., Zbierzchowski B.: Komputerowe projektowanie układów
cyfrowych w strukturach PLD. WKŁ Warszawa 1993
Atmel CPLD Demo Board Description.
Noty katalogowe firmy ATMEL.
Opis języka CUPL dostępny w pomocy programu WinCUPL.
W części pierwszej uczestnicy zajęć zapoznali się z podstawowymi informacjami na temat
układów programowalnych, Budową i sposobem programowania układu ATF1508. W części
drugiej zostaną zbudowane i sprawdzone bardziej złoŜone projekty.
Opis układów sekwencyjnych – prosty automat sterujący efektem świetlnym
W tej części zajmiemy się opisem w języku CUPL układów sekwencyjnych. Zadaniem jest
zaprojektowanie układu realizującego efekt świetlny przesuwającej się środkowej kreski –
segmentu G wszystkich wyświetlaczy siedmiosegmentowych.
Jako źródło impulsów zegarowych wykorzystamy generator 2 MHz z którego przez podział
uzyskamy mniejsza częstotliwość do taktowania naszego automatu. Wykorzystamy gotowe
rozwiązanie 22 bitowego dzielnika częstotliwości zapoŜyczone z przykładu logic_d.pld.
Sygnał generatora zostanie podzielony przez około 2^22 co da nam uŜyteczną częstotliwość
taktowania około 0.5 Hz
Rozpoczynamy od nagłówka:
Name
Partno
Date
Revision
Designer
Company
Assembly
Location
Device
LIN;
;
13/05/03;
02;
EPLD Applications;
WSZiB;
ATF15xx-DK;
U1;
f1508ispplcc84;
PROPERTY ATMEL {PREASSIGN KEEP};
PROPERTY ATMEL {LOGIC_DOUBLING on};
Teraz definiujemy stany naszego automatu. Pamiętamy, Ŝe segment wyświetlacza zapala się
gdy na wyjściu pojawi się „0”.
$define
$define
$define
$define
$define
$define
$define
$define
$define
Sx
S0
S1
S2
S3
S4
S5
S6
S7
'b'00000000
'b'01111111
'b'10111111
'b'11011111
'b'11101111
'b'11110111
'b'11111011
'b'11111101
'b'11111110
Teraz przypisujemy odpowiednie piny wejściowe i wyjściowe.
pin 83 = Mclk; /* wejscie sygnalu zegarowego */
pin 1 =
d
i
r
;
w
/
*
y
s
/* segmenty g
pin 54 = LED1G;
pin 63 = LED2G;
pin 73 = LED3G;
pin 81 = LED4G;
pin 11 = LED5G;
pin 21 = LED6G;
pin 30 = LED7G;
pin 39 = LED8G;
/* Deklaracje
pinnode 603 =
pinnode 605 =
pinnode 606 =
pinnode 608 =
pinnode 611 =
k
w
i
i
e
e
r
u
t
l
a
n
e
c
z
k
p
y
b
r
ę
z
d
e
ą
s
u
w
a
n
i
a
–
p
r
z
y
d
a
s
i
ę
pozniej*/
tworzyc linijke */
dla 22 bitowego dzielnika czestotliwosci */
c0;
c1;
c2;
c3;
c4;
2
pinnode
pinnode
pinnode
pinnode
pinnode
pinnode
pinnode
pinnode
pinnode
pinnode
pinnode
pinnode
pinnode
pinnode
pinnode
pinnode
pinnode
613
616
617
619
621
624
625
627
629
632
635
637
638
640
643
645
646
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
c5;
c6;
c7;
c8;
c9;
c10;
c11;
c12;
c13;
c14;
c15;
c16;
c17;
c18;
c19;
c20;
c21;
Field Count = [c21..c0] ;
/* 22bitowy licznik pracujacy jako dzielnik czestotliwosci*/
c0.d = !c0;
c1.t = c0;
c2.t = c1 & c0;
c3.t = c2 & c1 & c0;
c4.t = c3 & c2 & c1 & c0;
c5.t = c4 & c3 & c2 & c1 & c0;
c6.t = c5 & c4 & c3 & c2 & c1 & c0;
c7.t = c6 & c5 & c4 & c3 & c2 & c1 & c0;
c8.t = c7 & c6 & c5 & c4 & c3 & c2 & c1 & c0;
c9.t = c8 & c7 & c6 & c5 & c4 & c3 & c2 & c1 & c0;
c10.t = c9 & c8 & c7 & c6 & c5 & c4 & c3 & c2 & c1 & c0;
c11.t = c10 & c9 & c8 & c7 & c6 & c5 & c4 & c3 & c2 & c1 & c0;
c12.t = c11 & c10 & c9 & c8 & c7 & c6 & c5 & c4 & c3 & c2 & c1 & c0;
c13.t = c12 & c11 & c10 & c9 & c8 & c7 & c6 & c5 & c4 & c3 & c2 & c1 & c0;
c14.t = c13 & c12 & c11 & c10 & c9 & c8 & c7 & c6 & c5 & c4 & c3 & c2 & c1 & c0;
c15.t = c14 & c13 & c12 & c11 & c10 & c9 & c8 & c7 & c6 & c5 & c4 & c3 & c2 & c1 &
c0;
c16.t = c15 & c14 & c13 & c12 & c11 & c10 & c9 & c8 & c7 & c6 & c5 & c4 & c3 & c2 &
c1 & c0;
c17.t = c16 & c15 & c14 & c13 & c12 & c11 & c10 & c9 & c8 & c7 & c6 & c5 & c4 & c3 &
c2 & c1 & c0;
c18.t = c17 & c16 & c15 & c14 & c13 & c12 & c11 & c10 & c9 & c8 & c7 & c6 & c5 & c4
& c3 & c2 & c1 & c0;
c19.t = c18 & c17 & c16 & c15 & c14 & c13 & c12 & c11 & c10 & c9 & c8 & c7 & c6 & c5
& c4 & c3 & c2 & c1 & c0;
c20.t = c19 & c18 & c17 & c16 & c15 & c14 & c13 & c12 & c11 & c10 & c9 & c8 & c7 &
c6 & c5 & c4 & c3 & c2 & c1 & c0;
c21.t = c20 & c19 & c18 & c17 & c16 & c15 & c14 & c13 & c12 & c11 & c10 & c9 & c8 &
c7 & c6 & c5 & c4 & c3 & c2 & c1 & c0;
Count.ck = Mclk;
/
*
d
e
k
l
a
r
u
j
e
m
y
p
o
l
e
b
i
t
o
w
e
d
l
a
n
a
s
z
e
g
o
a
u
t
o
m
a
t
u
–
t
a
k
b
ę
d
z
i
e
latwiej*/
field lin = [LED1G, LED2G, LED3G, LED4G, LED5G, LED6G, LED7G,LED8G];
lin.ck=c18; /* zegar dla naszego automatu z wyjscia c18 licznika*/
/* teraz opisujemy nasz automat*/
sequence lin{
present Sx next S0;
present S0 next S1;
present S1 next S2;
present S2 next S3;
present S3 next S4;
present S4 next S5;
present S5 next S6;
present S6 next S7;
present S7 next S0;
}
3
Dokonać modyfikacji opisu automatu tak, aby:
a) przewijanie odbywało się w przeciwnym kierunku.
b) O kierunku przewijania decydował stan przycisku GOE.
Binarny licznik rewersyjny
W materiałach pomocniczych znajduje się opis dziesiętnego licznika dwukierunkowego z
wpisem równoległym. W oparciu o ten przykład przygotować i przetestować układ
rewersyjnego 4-bitowego licznika binarnego zliczającego impulsy z przycisku
monostabilnego podłączonego do wejścia GCLR. Kierunek zliczania będzie określać
połoŜenie bistabilnego przycisku GOE. Wynik zliczania powinien być prezentowany na
dowolnie wybranych 4 diodach na wyświetlaczu.
Dla bardziej zaawansowanych:
MoŜna dobudować układ dekodera kodu binarnego na kod wyświetlacza
siedmiosegmentowego i wynik zliczania prezentować na wyświetlaczu w postaci liczby.
Do budowy dekodera moŜna wykorzystać zapis tabelaryczny funkcji (wykorzystując
instrukcje table .odpowiednie informacje znajdują się w materiałach pomocniczych).
4