Pamięć z dwóch drzwi, które się nie zgadzają
Każde drzewo logiczne, którego spotkasz w wprowadzeniu do dyscypliny, jest kombinacyjne: jego wyjście zależy tylko od bieżących wejść, nic więcej. Podłącz wyjście pierwszego drzewa NOR do wejść drugiego drzewa NOR, a następnie wyjście drugiego drzewa z powrotem do pierwszego, a coś nowego się stało — para drzwi rozwija dwa stabilne stany, które trwają nawet po usunięciu wejść, które je wprowadziły. Ta cyrkuit jest latches SR (set-reset), i to najmniejsza jednostka pamięci cyfrowej: jeden bit, który nie jest przechowywany w ładunku kondensatora, ale w wzajemnej sprzeczności dwóch drzwi.
S=1, R=0 → Q sets to 1, stays 1 after S returns to 0 S=0, R=1 → Q resets to 0, stays 0 after R returns to 0 S=0, R=0 → Q holds whatever it was — this is the memory S=1, R=1 → both outputs forced equal — the forbidden state
Dlaczego S=1, R=1 jest zabronione
Wyjście latches, Q i jego dopełnienie nie-Q, powinno zawsze być w sprzeczności. Wymuszenie obu S i R aktywnych prowadzi do tego, że obie gate są napędzone do tej samej wartości wyjściowej, co łamie tę relację dopełniającą. Gorsza jeszcze jest sytuacja, gdy oba wejścia zwolnią jednocześnie — który z gate osiągnie stabilne stan pierwszy, zależy od niewielkich różnic w czasie działania między dwoma gate — prawdziwa warunkowa konkurencja o nieprzewidzianego zwycięzcę. Przenigroidowe projekty prosto zabraniają, aby S i R były jednocześnie aktywne.
Z latches czujnych na poziom do flip-flopów wyzwalanych na krawędzi
Latch SR czy D jest przejrzysty: podczas gdy linia aktywacji jest wysoka, jego wyjście śledzi natychmiastowo wejście. To może być niebezpieczne w dużym układzie — zmiana może przepłynąć przez kilka latchesów w jednym fazie zegara przed chwilą, gdy chciałaby się to stać. Rozwiązaniem jest flip-flop: circuit wyzwalany na krawędzi, zwykle budowany z dwa latches serii, napędzane komplementarnymi fazami zegara, tak że cała dwufazowa struktura akceptuje nową wartość tylko w jednym momencie, gdy zegar przejmuje od niskiego na wysoki (lub od wysokiego na niski, w zależności od projektu).
Najczęściej używana wersja to D flip-flop: wartość tensji na jego wejściu D w chwili wyzwalania zegara staje się nowym Q, a Q utrzymuje tę wartość niezmienioną do następnego wyzwalacza, całkowicie izolowany od dowolnych szumów lub zmian na D między tymi wyzwalaczami. Ta jedna zachowania — próba raz na fazę zegara i utrzymanie aż do momentu, gdy zostanie innym podane inaczej — pozwala projektantom cyfrowym myśleć o układach fazą zegara po fazie zamiast martwić się o ciągłą, podobną do analogicznej cascade zmian.
JK i T zegarniki
JK zegarnik rozszerza ideę SR ale rozwiązuje przydatnie sytuację niedozwoloną: J=K=1 podczas krawędzi zegara sprawia, że wyjście się nieustannie zmienia zamiast wejść w stan nieokreślony. Połączenie J i K na stałe wysokie daje zegarek T (toggle), który odwraca swój wyjście na każdym krawędzi zegara — podstawowy element liczników ripple binarnych, gdzie każdy etap zegarnika odbiera sygnał z poprzedniego etapu i dzieli częstotliwość jeszcze o połowę.
Od jednego bitu do pełnej przetwornicy
Obecna rejestr CPU to prosto wiele D flip-flopów dzielących się wspólną linią zegarową, każda przechowująca jeden bit słowa; plik rejestrów jest bankiem takich rejestrów ze selektorymi wybierającymi, który z nich jest czytany lub pisany. Etapy pipeliningu w przetworniku są oddzielone rzędami flip-flopów, które przechwytują tymczasowe wyniki raz na clock, co pozwala na to, aby różne instrukcje były w różnych etapach wykonania jednocześnie bez ich sygnałów zanieczyszczały się nawzajem. Każdy zegarowy system cyfrowy, od prostego licznika do chipa z bilionami tranzystorów, jest budowany na tej jednej powtarzanej myśli: logika kombinatoryczna obliczająca nastepny stan, a flip-flop zachowujący go do następnego ticka.
Często zadawane pytania
Jak się różnią latches od flip-flopów?
Latch jest czujny na poziom: podczas gdy jego wejście aktywacyjne jest aktywne, wyjście śledzi jego wejście natychmiastowo, a potem przechowuje ostatnie wartość, gdy aktywacja staje się nieaktywna. Flip-flop jest czujny na krawędzie: zapisuje swoje wejście tylko w chwili podnoszenia sygnału zegarowego (lub spadku) i ignoruje go resztkę czasu, co sprawia, że projektowanie synchroniczne jest przewidywalne.
Dlaczego latches typu SR mają stan niedozwolony?
Aktywacja obu wejść S i R w tym samym czasie napędza oba złączone wyjścia do tej samej wartości, zniszczyjąc relację komplementarną Q i nie-Q na jakiej jest oparta latches. Gdy jednocześnie oba wejścia zwolnią, który z drzwi wygra w wyścigu powrotnej do stanu stabilnego zależy od niewielkich różnic technologicznych, co sprawia, że wynik jest nieprzewidywalny. Praktyczne układy są zaprojektowane tak, aby kombinacja ta nigdy nie wystąpiła.
Jak pojedynczy flip-flop może stać się pełnym rejestrzem lub licznikiem?
Podłącz wielokrotnie D flip-flopy do tego samego zegara i każdy z nich przechowuje jeden bit w paralelu, tworząc wielobitowy rejestr. Podłącz odwrotność wyjścia jednego flip-flop do jego własnego wejścia, a on będzie się togglał na każdym podnoszeniu sygnału zegarowego, zmniejszając częstotliwość o połowę; łańcuch wielu takich etapów toggle daje licznik binarny, ten sam blok konstrukcyjny założony za każdą dzielnik licznika cyfrowego.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Flip-Flop — One Bit of Digital Memory i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację Flip-Flop — One Bit of Digital Memory