K U R S
Układy programowalne, część 7
Automaty krok 1
Siódmą część cyklu poświęcamy przedstawieniu
Klasyczne układy synchroniczne,
przykładów opisu klasycznych układów synchronicznych,
często zwane automatami, budowa-
ne są na bazie przerzutników, które
w tym przede wszystkim liczników. Zaczniemy od
spełniają w nich rolę pamięci sta-
nu. W zasadzie, poza przerzutnika- opisu HDL najważniejszych elementów takich układów:
mi RS, wszystkie inne rodzaje prze-
przerzutników.
rzutników (T, D, JK, JK-MS) nadają
się do spełniania roli pamięci stanu
w automatach. W komórkach OLMC wodu w opisie nie są wykorzystane
układów ispGAL22V10 (taki zastoso- dostępne w GAL22V10 sygnały asyn-
wano w zestawie AVT-599) znajdują chronicznego zerowania Q.AR, NIE_
się przerzutniki typu D z wejściami Q.AR oraz synchronicznego ustawia-
synchronicznego ustawiania i asyn- nia Q.SP i NIE_Q.SP.
chronicznego zerowania.
Na list. 11...14 znajdują się opi- Automaty krok 2
sy HDL czterech przerzutników, któ- W zależności od sposobu tworze-
rych praca jest synchronizowana no nieco na wyrost . Zastosowa- nia sygnałów wyjściowych, automa-
(oprócz przerzutnika RS, który nie nie w równaniach synchronicznych ty dzielą się na automaty Moore a
wymaga sygnału zegarowego) przez wejść zerowania (RESET) i ustawia- (schemat blokowy pokazano na rys.
sygnał zegarowy. Użytkownik korzy- nia (PRESET) powoduje jednak, że 33) i Mealy ego (schemat blokowy
stający z zestawu AVT-599 może wy- możliwości funkcjonalne implemento- pokazano na rys. 34). Różnica po-
brać jego zródło (za pomocą jumpera wanego przerzutnika są takie same, między nimi polega na tym, że sy-
JP4). niezależnie od jego budowy w do- gnały wyjściowe w automacie Mealy-
Ponieważ jak już wcześniej celowym układzie PLD. Zwiększamy ego są tworzone w postaci funkcji
wspomniano w komórkach OLMC w ten sposób uniwersalność opisu, kombinacyjnej dwóch zmiennych: bi-
układów GAL22V10 znajdują się który pasuje do każdego układu tów wyjściowych przerzutników pa-
przerzutniki typu D, opis przed- PLD z wbudowanymi jakimikolwiek miętających aktualny stan automatu
stawiony na list. 11 przygotowa- przerzutnikami D. Z tego samego po- (informacja pobierana z wyjść prze-
List. 11. Opis w języku CUPL przerzutnika typu D List. 13. Opis w języku CUPL przerzutnika typu JK
z synchronicznymi wejściami zerowania i ustawiania z synchronicznymi wejściami zerowania i ustawiania
Name d_ff; Name jk_ff;
Partno U1;
Partno U1;
Revision 01;
Revision 01;
Date 20/05/04;
Date 20/05/04;
Designer PZb;
Designer PZb;
Company EP;
Company EP;
Location brak;
Location brak;
Assembly brak;
Assembly brak;
Device g22v10lcc;
Device g22v10lcc;
/***** Wejscia *****/
/***** Wejscia *****/
PIN 2 = CLK; /* Wejscie zegarowe */
PIN 2 = CLK; /* Wejscie zegarowe */
PIN 4 = PRESET; /* Wejscie synchronicznego ustawiania JP1*/
PIN 6 = DATA; /* Stan na wejsciu ustala JP2 */
PIN 6 = RESET; /* Wejscie synchronicznego zerowania JP2 */
PIN 4 = PRESET; /* Wejscie synchronicznego ustawiania JP1*/
PIN 7 = J; /* Wejscie synchronicznego zerowania B_0 SW1 */
PIN 11 = RESET; /* Wejscie synchronicznego zerowania B_0 SW1 */
PIN 9 = K; /* Wejscie synchronicznego zerowania B_1 SW1 */
/***** Wyjscia *****/
/***** Wyjscia *****/
PIN [17, 18] = [Q, NIE_Q]; /* Wyjscia przerzutnika */
PIN [17, 18] = [Q, NIE_Q]; /* Wyjscia przerzutnika */
/***** Opis HDL *****/
/***** Opis HDL *****/
Q.D = PRESET # (DATA & !RESET);
Q.D = PRESET # (J & NIE_Q & !RESET) # (!K & Q & !RESET);
NIE_Q.D = RESET # (!DATA & !PRESET);
NIE_Q.D = RESET # (!J & NIE_Q & !PRESET) # (K & Q & !PRESET);
List. 12. Opis w języku CUPL przerzutnika typu T List. 14. Opis w języku CUPL przerzutnika typu RS (na
z synchronicznymi wejściami zerowania i ustawiania bramkach NAND)
Name t_ff; Name rs_ff;
Partno U1;
Partno U1;
Revision 01;
Revision 01;
Date 20/05/04;
Date 20/05/04;
Designer PZb;
Designer PZb;
Company EP;
Company EP;
Location brak;
Location brak;
Assembly brak;
Assembly brak;
Device g22v10lcc;
Device g22v10lcc;
/***** Wejscia *****/
/***** Wejscia *****/
PIN 2 = CLK; /* Wejscie zegarowe */
PIN 4 = S; /* Wejscie ustawiania JP1*/
PIN 6 = T; /* Stan na wejsciu T ustala JP2 */
PIN 6 = R; /* Wejscie zerowania JP2 */
PIN 4 = PRESET; /* Wejscie synchronicznego ustawiania JP1*/
PIN 11 = RESET; /* Wejscie synchronicznego zerowania B_0 SW1 */
/***** Wyjscia *****/
PIN [17, 18] = [Q, NIE_Q]; /* Wyjscia przerzutnika */
/***** Wyjscia *****/
PIN [17, 18] = [Q, NIE_Q]; /* Wyjscia przerzutnika */
/***** Opis HDL *****/
Q = !S # (R & Q);
/***** Opis HDL *****/
NIE_Q = !R # (S & NIE_Q);
Q.D = PRESET # (!RESET & !T & Q) # (!RESET & T & NIE_Q);
NIE_Q.D = RESET # (!PRESET & !T & NIE_Q) # (!PRESET & T & Q);
Elektronika Praktyczna 9/2004
93
K U R S
Można także w praktyce
Programy zródłowe wszyst-
kich projektów opisanych
w ramach kursu publikuje-
my na CD-EP9/2004B. Ich
działanie można sprawdzić
w praktyce za pomocą
zestawu AVT-599 (opisa-
ny w EP3/2004), w którym
zastosowano programowany
w systemie układ
ispGAL22V10.
rzutników spełniających rolę pamię- Wykonywanie takich sztuczek konieczności wprowadzenia jakiejkol-
ci stanu) i aktualnego stanu wejść zaprzecza wygodzie korzystania z ję- wiek zmiany (np. modyfikacji długo-
automatu. Użytkownik odpowiednio zyka wysokiego poziomu, więc po- ści cyklu zliczania lub wprowadzenia
przygotowując opis automatu może traktujmy przedstawioną możliwość dodatkowych sygnałów sterujących),
wymusić implementację projektu jedynie jako przykład możliwości poprawianie tak przygotowanego opi-
w jednym lub drugim rodzaju auto- CUPL-a, a nie zalecany sposób pro- su nie jest wygodne. Sytuację upro-
matu. W większości przypadków wa- jektowania. ści zastosowanie komendy preproce-
lory automatów Moore a są na tyle O tym, że opis licznika za po- sora $REPEAT, jak to pokazano na
duże, że implementowane w nim mocą równań logicznych nie jest list. 16. Wygodę stosowania zapisów
projekty spełniają wymagania typo- najwygodniejszym sposobem realiza- kompaktowych zilustrowano na list.
wych aplikacji. cji projektu, nie trzeba nikogo prze- 17, na którym pokazano opis HDL
Prezentację opisu automatów za- konywać. Trzeba jednak przyznać, licznika modulo 10, który jest odpo-
czniemy od 4-bitowego licznika liczą- że także opis kolejnych przejść, jak- wiednikiem funkcjonalnym liczników
cego w cyklu modulo 16 w dwóch kolwiek znacznie bardziej czytelny z list. 15 i 16.
kierunkach. Licznik wyposażono nie jest pozbawiony wady: jest po Przedstawione opisy dotyczą po-
w wejście sychronicznego zerowania. prostu bardzo długi i w przypadku jedynczego licznika, który nie może
Jego opis HDL przedstawiono na list.
15. Ze względu na wygodę zastoso-
wano w nim opis przejść warunko-
wych pomiędzy kolejnymi stanami
automatu, co pozwala na wygodne
odwzorowanie standardowego grafu
przejść. Ten sam efekt funkcjonalny
można uzyskać za pomocą przypisa-
nia do wejścia D każdego przerzut-
nika (Q0.d, Q1.d, Q2.d i Q3.d) wyj-
ściowego funkcji logicznej, ale nie
Rys. 33
jest to zadanie łatwe do wykonania,
na co dowodem może być przedsta-
wione poniżej równanie dla przerzut-
nika Q3.d:
Q3.d =>
Q0 & Q1 & Q2 & Q3 & !RESET & U_D
# !Q0 & !Q1 & !Q2 & !Q3 & !RESET & U_D
# Q0 & Q1 & Q2 & !Q3 & !RESET & !U_D
# !Q1 & !Q2 & Q3 & !RESET & !U_D
# Q0 & !Q2 & Q3 & !RESET & U_D
# !Q0 & Q1 & Q3 & !RESET
# Q0 & Q1 & !Q2 & Q3 & !RESET & !U_D
# !Q1 & Q2 & Q3 & !RESET Rys. 34
Elektronika Praktyczna 9/2004
94
K U R S
List. 15. Opis 4-bitowego licznika List. 16. Opis 4-bitowego liczni-
góra/dół z synchronicznym wej- ka góra/dół z synchronicznym
ściem zerującym i jawnymi de- wejściem zerującym i skróconym
klaracjami wartości przypisanych zapisem deklaracji wartości przypi-
kolejnym stanom sanych kolejnym stanom
Name cnt_ud_mod16; Name cnt_ud_mod16_r;
Partno U1;
Partno U1;
Revision 01;
Revision 01;
Date 20/05/04;
Date 20/05/04;
Designer PZb;
Rys. 35
Designer PZb;
Company EP;
Company EP;
Location brak;
Location brak;
Assembly brak;
Assembly brak;
Device g22v10lcc;
Device g22v10lcc;
/***** Wejscia *****/
/***** Wejscia *****/
PIN 2 = CLK; /* Wejscie zegarowe */
PIN 2 = CLK; /* Wejscie zegarowe */ PIN 4 = RESET; /* Wejscie asynchronicznego */
PIN 4 = RESET; /* Wejscie asynchronicznego */ /*zerowania JP1*/
PIN 6 = U_D; /* Wybor kierunku zliczania */
/* zerowania JP1*/
/* JP2 */
PIN 6 = U_D; /* Wybor kierunku zliczania */
/* JP2 */
/***** Wyjscia *****/
PIN [17..20] = [Q3..0]; /* Wyjscia licznika*/
/***** Wyjscia *****/
PIN [17..20] = [Q3..0]; /* Wyjscia licznika */
/***** Deklaracje pomocnicze *****/
field licznik = [Q3..0];
/***** Deklaracje pomocnicze *****/
$REPEAT i = [0..15]
field licznik = [Q3..0];
$DEFINE S{i} {i}
$define S0 b 0000
$REPEND
$define S1 b 0001
Rys. 36
$define S2 b 0010 field mode = [RESET,U_D];
up = mode:0; /* w gore */
$define S3 b 0011
down = mode:1; /* w dol */
$define S4 b 0100
być łączony w synchroniczne ka-
clear = mode:[2..3]; /* zerowanie */
$define S5 b 0101
$define S6 b 0110 skady z innymi, co pozwoliłoby
/***** Opis HDL *****/
$define S7 b 0111
sequence licznik {
na zwiększenie długości zliczanego
$define S8 b 1000
PRESENT S0
$define S9 b 1001
IF up NEXT S1; słowa. Jest to dość poważna wada
$define S10 b 1010
IF down NEXT S15;
$define S11 b 1011 przedstawionego rozwiązania, war-
IF clear NEXT S0;
$define S12 b 1100
$REPEAT i = [1..15]
to więc by było wyposażyć liczniki
$define S13 b 1101
PRESENT S{i}
$define S14 b 1110 IF up NEXT S{(i+1)%16};
w wejście i wyjście przeniesienia,
$define S15 b 1111 IF down NEXT S{(i-1)%16};
IF clear NEXT S0; które umożliwią ich łączenie w wie-
$REPEND
field mode = [RESET,U_D];
lobitowe zespoły liczące. Jedyną moż-
}
up = mode:0; /* w gore */
down = mode:1; /* w dol */
liwością zwiększenia długości zli-
clear = mode:[2..3]; /* zerowanie */
czania jest połączenie ich w sposób
/***** Opis HDL *****/ List. 17. Opis 4-bitowego liczni-
pokazany na rys. 35, ale rozwiązanie
sequence licznik {
ka góra/dół liczącego w cyklu
present S0 if up next S1;
to ma wadę: naruszana jest synchro-
if down next S15; modulo 10 z synchronicznym
niczność licznika, co w przypadku
if clear next S0;
wejściem zerującym i skróconym
present S1 if up next S2;
większych częstotliwości taktowania
if down next S0; zapisem deklaracji wartości przypi-
if clear next S0; może spowodować niepoprawną jego
sanych kolejnym stanom
present S2 if up next S3;
pracę.
if down next S1; Name cnt_ud_mod10_r;
Partno U1;
if clear next S0;
Na list. 18 pokazano przykłado-
Revision 01;
present S3 if up next S4;
Date 20/05/04;
if down next S2; wy opis 4-bitowego licznika liczące-
Designer PZb;
if clear next S0;
go w cyklu modulo 10, wyposażo-
Company EP;
present S4 if up next S5;
Location brak;
if down next S3;
nego w wejście (CI) i wyjście (CO)
Assembly brak;
if clear next S0;
Device g22v10lcc;
przeniesienia (sposób szeregowego
present S5 if up next S6;
if down next S4;
łączenia takich liczników pokaza-
/***** Wejscia *****/
if clear next S0;
PIN 2 = CLK; /*Wejscie zegarowe */
present S6 if up next S7;
no na rys. 36). Opis tego licznika
PIN 4 = RESET; /*Wejscie asynchronicznego*/
if down next S5;
/*zerowania JP1*/
nie różni się zbytnio od wcześniej
if clear next S0;
PIN 6 = U_D; /*Wybor kierunku zliczania*/
present S7 if up next S8;
/* JP2 */ przedstawionych, należy zwrócić je-
if down next S6;
if clear next S0;
dynie uwagę na to, że w każdym
/***** Wyjscia *****/
present S8 if up next S9;
PIN [17..20] = [Q3..0]; /*Wyjscia licznika*/
stanie rozpatrywanych jest więcej
if down next S7;
if clear next S0;
/***** Deklaracje pomocnicze *****/ warunków, z których jeden (i f
present S9 if up next S10;
field licznik = [Q3..0];
if down next S8; others) zapewnia zatrzymanie się
$REPEAT i = [0..9]
if clear next S0;
$DEFINE S{i} {i}
licznika w bieżącym stanie z jego
present S10 if up next S11;
$REPEND
if down next S9;
podtrzymaniem. Drugą rzeczą, na
if clear next S0;
field mode = [RESET,U_D];
present S11 if up next S12; którą warto zwrócić uwagę, jest
up = mode:0; /* w gore */
if down next S10;
down = mode:1; /* w dol */
występujące w dwóch miejscach
if clear next S0;
clear = mode:[2..3]; /* zerowanie */
present S12 if up next S13;
polecenie out CO, za pomocą któ-
if down next S11; /***** Opis HDL *****/
rego wyprowadzany jest sygnał
if clear next S0; sequence licznik {
present S13 if up next S14; PRESENT S0
przeniesienia.
if down next S12; IF up NEXT S1;
IF down NEXT S9;
if clear next S0;
IF clear NEXT S0;
present S14 if up next S15;
$REPEAT i = [1..9] Automaty krok 3
if down next S13;
PRESENT S{i}
if clear next S0;
Automaty opisywane w języku
IF up NEXT S{(i+1)%10};
present S15 if up next S0;
IF down NEXT S{(i-1)%10};
if down next S14;
CUPL można wykorzystać do gene-
IF clear NEXT S0;
if clear next S0;
$REPEND rowania sygnałów synchronicznych
}
}
i asynchronicznych, które będą wy-
Elektronika Praktyczna 9/2004
95
K U R S
present S2 next S3 out CO;
List. 18 - cd
List. 18. Opis 4-bitowego liczni-
present S3 next S0;
ka góra/dół liczącego w cyklu
}
modulo 10 z synchronicznym
Jakkolwiek takie rozwiązanie jest
wejściem zerującym i możliwością
/***** Opis HDL *****/
technicznie eleganckie, należy pa-
łączenia ze sobą liczników w ka- sequence licznik {
present S0 if up next S1;
skady synchroniczne miętać, że generowany sygnał pojawi
if down next S9;
Name cnt_ud_mod10_rc;
if others next S0;
się na wyjściu opózniony o jeden
Partno U1;
if clear next S0;
takt zegarowy (jeżeli jest generowany
Revision 01;
present S1 if up next S2;
Date 20/05/04;
if down next S0 out CO;
w stanie S2, to na wyjściu pojawi
Designer PZb;
if others next S1;
Company EP;
if clear next S0; się na czas trwania stanu S3). Widać
Location brak;
present S2 if up next S3;
to na rys. 37 (zródło symulowanego
Assembly brak;
if down next S1;
Device g22v10lcc;
if others next S2;
automatu 4-stanowego jest dostępne
if clear next S0;
/***** Wejscia *****/ na CD-EP9/2004B w katalogu \OUT_
present S3 if up next S4;
PIN 2 = CLK; /*Wejscie zegarowe */
if down next S2;
synchro i na stronie internetowej EP
PIN 4 = RESET; /*Wejscie asynchronicznego*/
if others next S3;
/*zerowania JP1*/
if clear next S0; w dziale Download).
PIN 6 = U_D; /* Wybor kierunku zliczania*/
present S4 if up next S5;
- w przypadku, gdy sygnał wyjścio-
/* JP2 */
if down next S3;
PIN 11 = CI;
if others next S4;
wy ma być wytwarzany w ukła-
if clear next S0;
/***** Wyjscia *****/ dzie kombinacyjnym (może wtedy
present S5 if up next S6;
PIN [17..20] = [Q3..0]; /*Wyjscia licznika*/
if down next S4;
zawierać zakłócenia szpilkowe wy-
PIN 26 = CO;
if others next S5;
if clear next S0;
wołane przez opóznienia w funk-
/***** Deklaracje pomocnicze *****/
present S6 if up next S7;
torach logicznych tworzących ten
field licznik = [Q3..0];
if down next S5;
$define S0 b 0000
if others next S6;
sygnał), zapis w języku CUPL jest
$define S1 b 0001
if clear next S0;
$define S2 b 0010
present S7 if up next S8; następujący:
$define S3 b 0011
if down next S6;
sequence licznik {
$define S4 b 0100
if others next S7;
$define S5 b 0101
if clear next S0;
present S0 next S1;
$define S6 b 0110
present S8 if up next S9 out CO;
$define S7 b 0111 present S1 next S2;
if down next S7;
$define S8 b 1000
if others next S8;
present S2 next S3;
$define S9 b 1001
if clear next S0;
present S9 if up next S0;
out CO;
field mode = [U_D,CI,RESET];
if down next S8;
present S3 next S0;
up = mode: b 010; /* w gore */
if others next S9;
down = mode: b 110; /* w dol */
if clear next S0;
W odróżnieniu od synchronicz-
others = mode: b x00;
}
clear = mode: b xx1; nego wyprowadzania sygnału CO,
tym razem pojawia się on dokład-
stępować wraz z określonymi stana- jest taktowany automat), to należy nie podczas stanu, do którego go
mi automatów. Do tego celu służy korzystać z następującego zapisu: przypisano (rys. 38). Nieco więcej
polecenie out, które w przykładzie sequence licznik { zabiegów w tym przypadku wyma-
pokazanym na list. 18 wykorzystano present S0 next S1; ga opisanie układu generującego wa-
do wyprowadzenia z licznika sy- present S1 next S2; runkowo sygnał wyjściowy, ponieważ
gnału przeniesienia CO. present S2 if A next S3 out CO; jest on przypisany do danego stanu
Z polecenia out można skorzy- if !A next S1; jeżeli automat się w nim znajdzie,
stać na dwa sposoby, uzyskując róż- present S3 next S0; sygnał wyjściowy na pewno się po-
ne wyniki: } jawi. Z tego wynika konieczność
- jeżeli chcemy uzyskać sygnał syn- lub, gdy generowanie sygnału jest wcześniejszego, niż ma to miejsce
chronizowany przebiegiem zegaro- bezwarunkowe: w układach synchronicznych, rozpa-
wym (czyli uzyskiwany na wyjściu equence licznik { trywania warunków zmiany stanu.
przerzutnika taktowanego tym sa- present S0 next S1; Piotr Zbysiński, EP
mym sygnałem zegarowym, którym present S1 next S2; piotr.zbysinski@ep.com.pl
Rys. 37 Rys. 38
Elektronika Praktyczna 9/2004
96
Wyszukiwarka
Podobne podstrony:
Układy programowalne cz 3Układy programowalne cz 5Układy programowalne cz 4Układy programowalne cz 6Układy programowalne cz 2Układy arytmetyczne cz 1471 Czym się kierowac przy wyborze programu F K cz I472 Czym się kierować przy wyborze programu F K cz IIUkłady programowalneElementy i uklady elektroniczne cz I S KutaAnalogowe układy programowane w systemie firmy Latticeuklady rownan cz IIZałšcznik do uchwały Program zapobiegania przestępczo ci cz ICz II Układy pomiarowe, Sondywięcej podobnych podstron