Bity w elektronice
Licznik synchroniczny


Bramki logiczne
Cyfrowe układy scalone TTL i CMOS
Zasilanie układów TTL i CMOS
Układy kombinatoryczne z bramek cyfrowych
Przerzutniki
  Zastosowania
Przerzutnik RS
Przerzutnik D
Przerzutnik J-K
Licznik asynchroniczny
Licznik synchroniczny
Licznik rewersyjny
Rejestr
Rejestr przesuwający

 

W liczniku asynchronicznym (ang. asynchronous counter) przerzutniki są sterowane wyjściami przerzutników poprzedzających. Powoduje to, iż stan licznika nie ustala się od razu, lecz kolejno na poszczególnych przerzutnikach z opóźnieniem równym czasowi propagacji sygnału w przerzutniku. Jeśli impulsy zegarowe mają dużą częstotliwość i ich okres jest porównywalny z czasem propagacji przerzutnika, to sygnały wyjściowe licznika mogą podawać złe wartości zliczonych impulsów - sygnał wyjściowy nie ma czasu na odpowiednie ustalenie się.

 

 

Powyżej przedstawiamy wykres czasowy stanów licznika, na które wpływają wewnętrzne czasy propagacji. W ich wyniku stany wyjściowe są przesunięte w czasie w stosunku do impulsów zegarowych. Opóźnienie to zwielokrotnia się dla starszych bitów licznika. Bit Q8 jest już tak opóźniony, iż licznik "gubi" stan 8, w którym powinien być ustawiony na 1 tylko bit Q8, a pozostałe bity wyzerowane. Sytuacja staje się jeszcze gorsza, gdy licznik asynchroniczny ma więcej bitów. Wtedy gubienie stanów może pojawić się przy odpowiednio mniejszych częstotliwościach sygnału zegarowego.

Z tego powodu zaprojektowano liczniki synchroniczne (ang. synchronous counter) , w których przerzutniki zmieniają swój stan jednocześnie z taktem zegarowym. Licznik synchroniczny posiada sieć logiczną, która steruje odpowiednio wejściami przerzutników na podstawie stanów ich wyjść. Sygnał zegarowy doprowadzany jest do każdego przerzutnika, zatem zmiana stanów będzie odbywała się wg napływających taktów zegarowych.

Liczniki synchroniczne można budować z przerzutników D flip flop lub z przerzutników J-K Master/Slave. My skupimy się na tych drugich.

C Wyjście
QD QC QB QA
0 0 0 0 0
1 0 0 0 1
2 0 0 1 0
3 0 0 1 1
4 0 1 0 0
5 0 1 0 1
6 0 1 1 0
7 0 1 1 1
8 1 0 0 0
9 1 0 0 1
10 1 0 1 0
11 1 0 1 1
12 1 1 0 0
13 1 1 0 1
14 1 1 1 0
15 1 1 1 1

Aby określić sieć logiczną, przyjrzyjmy się tabelce stanów, które musi przyjmować nasz licznik dla kolejnych impulsów zegarowych. Z tabelki widzimy, iż wyjście QA zmienia swój stan na przeciwny po każdym impulsie zegarowym. Zatem do realizacji wyjścia QA wystarcza pojedynczy przerzutnik J-K MS pracujący jako przerzutnik T (oba wejścia J i K w stanie 1).

 

 

 

Wyjście QB zmienia stan na przeciwny, gdy w poprzednim stanie wyjście QA znajdowało się w stanie 1. Zrealizujemy je za pomocą pojedynczego przerzutnika J-K MS, którego wejścia J i K będą połączone z wyjściem QA pierwszego przerzutnika. Jeśli wyjście QA znajdzie się w stanie 1, to na oba wejścia J i K drugiego przerzutnika zostanie podany stan 1. Będzie on wtedy pracował jako przerzutnik T, zatem przy kolejnym impulsie zegarowym zmieni swój stan na przeciwny. Jeśli wyjście QA przyjmie stan 0, to impuls zegarowy nie zmieni stanu wyjścia QB.

 

 

 

Wyjście QC zmienia stan na przeciwny, gdy w poprzednim cyklu licznika wyjścia QA i QB jednocześnie były w stanie wysokim. Teraz wysterujemy wejścia J i K trzeciego przerzutnika iloczynem logicznym stanów wyjść QA i QB.

 

 

Wyjście QD zmienia stan na przeciwny, gdy w poprzednim cyklu wszystkie trzy wyjścia QA, QB i QC znajdowały się w stanie wysokim 1. Wejścia J i K czwartego przerzutnika wysterujemy zatem iloczynem logicznym tych wyjść i w ten sposób otrzymamy 4 bitowy licznik synchroniczny:

 

 

Poniżej podajemy funkcje logiczne sterujące poszczególnymi wejściami przerzutników. Funkcje te tworzą dobrze zdefiniowany ciąg, który można rozszerzać na dowolną (rozsądną) ilość przerzutników J-K. Zamiast bramek AND mogą być wykorzystane wielowejściowe przerzutniki J-K (w tym właśnie celu się je produkuje - redukcja dodatkowych elementów).

 

TA = JA = KA = 1
TB = JB = KB = QA
TC = JC = KC = QAQB
TD = JD = KD = QAQBQC
...

 

W poniższym symulatorze licznika synchronicznego możesz prześledzić opisane sygnały sterujące wejściami poszczególnych przerzutników. Wejście C jest wejściem impulsowym i każde kliknięcie generuje jeden takt zegarowy. Stany wyjściowe licznika zmieniają się synchronicznie z opadającym zboczem sygnału zegarowego.

 

 

Synchroniczne liczniki modulo n

Idea działania asynchronicznych liczników modulo n polegała na zerowaniu licznika po osiągnięciu stanu n. Wadą tego rozwiązania jest to, iż przez krótką chwilę na wyjściu licznika pojawia się stan n. Wady tej nie posiadają liczniki synchroniczne, w których kolejne stany powstają ze stanów poprzednich przetworzonych przez odpowiednią sieć logiczną sterującą przerzutnikami. Poniżej podajemy dokładną procedurę projektowania takich liczników. Jeśli zrozumiesz ten materiał, to będziesz w stanie nie tylko zaprojektować dowolny licznik synchroniczny, ale również układ generujący dowolne kody binarne.

Zaprojektujemy licznik synchroniczny zliczający modulo 7. Do jego budowy będziemy potrzebowali trzech przerzutników J-K MS oraz kilka bramek NAND.

Stan QC QB QA
0 0 0 0
1 0 0 1
2 0 1 0
3 0 1 1
4 1 0 0
5 1 0 1
6 1 1 0
0 0 0 0

1. Określamy tabelkę stanów dla poszczególnych przerzutników. Napływające impulsy zegarowe będą powodowały przejście przerzutników przez kolejno zdefiniowane stany licznika. Po stanie 6 następuje wyzerowanie licznika i cykl rozpoczyna się od początku.

Przerzutniki w liczniku synchronicznym są sterowane wspólnym sygnałem zegarowym. Będą zatem pracowały w poniższym układzie:

 

 

 

Zadanie polega na określeniu sygnałów sterujących wejściami J i K. Wybieramy układ przerzutnika T - wejścia J i K połączone razem do wspólnego sygnału cyfrowego. Jeśli sygnał ten będzie posiadał poziom 1, to impuls zegarowy C spowoduje zmianę stanu przerzutnika J-K na przeciwny. Jeśli sygnał sterujący wejściami J i K będzie posiadał poziom 0, to impuls zegarowy nie spowoduje zmiany stanu przerzutnika.

2. Dla każdego stanu licznika określamy, które przerzutniki muszą przełączyć swój stan na przeciwny przy przejściu licznika do stanu następnego.

Przykładowo załóżmy, iż licznik znajduje się w stanie 5, czyli:

 

QC = 1, QB = 0 i QA = 1.

 

Następnym stanem jest stan 6, czyli

 

QC = 1, QB = 1 i QA = 0.

 

Zatem przy przejściu ze stanu 5 do stanu 6:

 

przerzutnik C pozostaje w stanie 1
przerzutnik B przełącza się z 0 na 1
przerzutnik A przełącza się z 1 na 0

 

Umówmy się, iż konieczność przełączenia stanu przerzutnika będziemy oznaczali przez 1, a pozostanie w obecnym stanie będziemy oznaczali przez 0. Utworzymy zatem następującą tabelkę przełączeń:

Stan Wyjścia Przejście
stanu
Przełączanie
QC QB QA TC TB TA
0 0 0 0 0 → 1 0 0 1
1 0 0 1 1 → 2 0 1 1
2 0 1 0 2 → 3 0 0 1
3 0 1 1 3 → 4 1 1 1
4 1 0 0 4 → 5 0 0 1
5 1 0 1 5 → 6 0 1 1
6 1 1 0 6 → 0 1 1 0
0 0 0 0 0 → 1 0 0 1

Przerzutnik A przełącza swój stan na przeciwny w każdym stanie licznika za wyjątkiem stanu 6, w którym wyjście QA ma poziom 0. W następnym stanie licznika 0 wyjście QA również ma poziom 0, zatem zmiana stanu przerzutnika A nie jest konieczna i dlatego w komórce tabelki jest wpis 0.

Przerzutnik B przełącza swój stan w co drugim stanie licznika. W stanie 6 dodatkowo musi on być przełączony, ponieważ wyjście QB ma poziom 1.

Przerzutnik C przełącza swój stan tylko przy stanie licznika 3 (z 0 na 1) i 6 (z 1 na 0). Sygnały TA, TB i TC podamy na wejścia J i K odpowiednich przerzutników.

 

 

Jeśli dany sygnał TA, TB lub TC będzie miał poziom logiczny 0, to impuls zegarowy nie spowoduje przełączenia stanu wyjściowego przerzutnika. Jeśli natomiast sygnał sterujący wejściami J i K przyjmie poziom logiczny 1, to impuls zegarowy przełączy stan przerzutnika na przeciwny, co wynika z tabelki przejść dla przerzutnika J-K MS.

3. Na podstawie tabelki przełączeń przerzutników określamy funkcje logiczne TA, TB i TC, które będą sterowały wejściami J i K przerzutników w liczniku synchronicznym. Wykorzystamy mapy Karnaugha do minimalizacji funkcji logicznych.

 

Sygnał A
Obszar TA1
 0  1
00 1 1
01 1 1
11 0 X
10 1 1
Obszar TA2
 0  1
00 1 1
01 1 1
11 0 X
10 1 1
      

   

Sygnał B
Obszar TB1
 0  1
00 0 1
01 0 1
11 1 X
10 0 1
Obszar TB2
 0  1
00 0 1
01 0 1
11 1 X
10 0 1

 

Sygnał C
Obszar TC1
 0  1
00 0 0
01 0 1
11 1 X
10 0 0
Obszar TC2
 0  1
00 0 0
01 0 1
11 1 X
10 0 0

 

Licznik jest już gotowy. W celu sprawdzenia poprawności wyprowadzonych funkcji logicznych TA, TB i TC, testujemy je w prostym programie w języku C++. Zwróć uwagę na sposób zaprogramowania funkcji przerzutnika T.

 

// Symulacja sieci synchronicznego licznika modulo 7
// (C)2007 mgr Jerzy Wałaszek
// I LO w Tarnowie

#include <iostream>

using namespace std;

int main()
{
  bool TA,TB,TC,QA,QB,QC;
  int i;
  
  QA = QB = QC = 0; // zerujemy przerzutniki T

  cout << "NUMER QC QB QA\n"
          "-------------\n";
// W pętli przechodzimy przez 8 kolejnych stanów licznika

  for(i = 0; i < 8; i++)
  {

// wyświetlamy stan wyjść licznika

    cout << "  " << i << "    " << QC << "  " << QB << "  " << QA << endl;
    
// wyznaczamy funkcje sterujące TA, TB i TC

    TA = !(QC&&QB);
    TB = !(!QA&&!(QC&&QB));
    TC = !(!(QC&&QB)&&!(QB&&QA));
    
// Na podstawie funkcji TA, TB i TC dokonujemy przełączeń przerzutników

    if(TA) QA = !QA;
    if(TB) QB = !QB;
    if(TC) QC = !QC;             
  }
  cout << endl;
  return 0;
}
NUMER QC QB QA
-------------
  0    0  0  0
  1    0  0  1
  2    0  1  0
  3    0  1  1
  4    1  0  0
  5    1  0  1
  6    1  1  0
  7    0  0  0

 

Wynik jest prawidłowy. Poniżej umieściliśmy symulację licznika. Wejście C generuje impuls zegarowy przy każdym kliknięciu go myszką.

 

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.