Dlaczego mikrokontrolery potrzebują zegara?


31

Dlaczego instrukcje muszą być przetwarzane w ustalonych odstępach czasu (tj. Przy użyciu zegara)? Czy nie można ich wykonać sekwencyjnie - natychmiast po zakończeniu poprzedniej instrukcji?

Szczególnie przydatna okazałaby się analogia do konieczności stosowania zegarów w mikrokontrolerach.


6
Istnieją procesory asynchroniczne.
Leon Heller,

6
Jak określisz „kiedy poprzednia instrukcja zakończy się”? Jeśli się nad tym zastanowisz, musisz wiedzieć, kiedy „Czy poprzednia instrukcja została wykonana?” obliczenia zostały zakończone, a gdy „Czy” Czy zakończono poprzednią instrukcję? obliczenia „obliczeń” zostały zakończone i ........ O wiele łatwiej jest po prostu powiedzieć: „Wykonanie instrukcji zajmuje 0,4 nanosekundy”.
user253751

4
Bramki logiczne nie mówią, kiedy są gotowe. Sygnał jest po prostu nieokreślony przez pewien czas, zanim ustabilizuje się na stabilnej wartości. Zasadniczo zegar pozwala projektowi wiedzieć, kiedy logika ustaliła prawidłową wartość. Zaawansowane strategie, takie jak mikroinstrukcje, pomagają w rozbiciu instrukcji maszyny na mniejsze części, dzięki czemu ADD może przyjąć 4 takty zegara, a dostęp do pamięci może zająć setki tyknięć.

Odpowiedzi:


31

Pomocny może być tutaj przykładowy przykład. Spójrz na następujący hipotetyczny obwód:

schematyczny

symulacja tego obwodu - Schemat utworzony za pomocą CircuitLab

Załóżmy, że uruchomienie zarówno A, jak i B są wysokie (1). Wyjście AND wynosi zatem 1, a ponieważ oba wejścia do XOR mają wartość 1, wyjście wynosi 0.

Elementy logiczne nie zmieniają natychmiast swojego stanu - istnieje niewielkie, ale znaczące opóźnienie propagacji, gdy zmiana danych wejściowych jest obsługiwana. Załóżmy, że B idzie nisko (0). XOR natychmiast widzi nowy stan na swoim drugim wejściu, ale pierwsze wejście wciąż widzi „przestarzałe” 1 z bramki AND. W rezultacie sygnał wyjściowy na krótko przechodzi w stan wysoki - ale tylko do momentu, gdy sygnał propaguje się przez bramkę AND, powodując, że oba wejścia do XOR są niskie, i powoduje to, że sygnał wyjściowy ponownie spada.

Usterka nie jest pożądaną częścią działania obwodu, ale takie usterki wystąpią za każdym razem, gdy występuje różnica w prędkości propagacji w różnych częściach obwodu, ze względu na ilość logiki, a nawet tylko długość przewodów .

Jednym naprawdę łatwym sposobem na poradzenie sobie z tym jest umieszczenie wyzwalanego zboczem flipflopa na wyjściu twojej logiki kombinatorycznej, jak poniżej:

schematyczny

zasymuluj ten obwód

Teraz wszelkie występujące usterki są ukryte przed resztą obwodu przez flipflop, który aktualizuje swój stan tylko, gdy zegar zmienia się z 0 na 1. Tak długo, jak odstęp między rosnącymi krawędziami zegara jest wystarczająco długi, aby sygnały rozchodziły się przez kombinatoryczne łańcuchy logiczne wyniki będą niezawodnie deterministyczne i wolne od błędów.


6
Dziękujemy, że wspomniałeś o opóźnieniu propagacji niemal natychmiast, co stanowi prawdopodobnie 99% odpowiedzi.

1
Przykład takiego działania można zaobserwować na cyfrowych urządzeniach peryferyjnych Microchip (i innych) mikrokontrolerach. Jeśli użyjesz rejestrów PORT do aktualizacji wyjść (zamiast LATCH) przy użyciu kolejnych instrukcji Read-Modify-Write, możliwe jest odczytanie stanu pinu podczas jego zmiany. Więcej informacji znajduje się w sekcji 10.2.2 dokumentacji dsPIC33E / 24E .
Evil Dog Pie

Czy dobrze rozumiem, że sekwencyjne obwody krytycznie potrzebują taktowania nie tylko dlatego, że dostaną usterki, ale także dlatego, że z powodu tej usterki niektóre przerzuty mogą przechowywać niepoprawną wartość?
jeziora

20

Wydaje mi się, że wiele z tych odpowiedzi nie trafia w sedno pytania. Mikrokontroler ma zegar po prostu dlatego, że wykonuje (i jest nim sterowany) logikę sekwencyjną .

W teorii obwodów cyfrowych logika sekwencyjna jest rodzajem obwodu logicznego, którego wyjście zależy nie tylko od bieżącej wartości jego sygnałów wejściowych, ale od sekwencji przeszłych danych wejściowych, historii wejściowej. Jest to sprzeczne z logiką kombinacyjną, której wyjście jest funkcją tylko bieżącego wejścia. Oznacza to, że logika sekwencyjna ma stan (pamięć), a logika kombinacyjna nie. Innymi słowy, logika sekwencyjna jest logiką kombinacyjną z pamięcią.

Także:

Główną zaletą logiki synchronicznej jest jej prostota. Bramki logiczne, które wykonują operacje na danych, wymagają skończonej ilości czasu na reakcję na zmiany danych wejściowych. Nazywa się to opóźnieniem propagacji. Odstęp między impulsami zegara musi być wystarczająco długi, aby wszystkie bramki logiczne miały czas na reakcję na zmiany, a ich wyjścia „ustabilizowały się” na stabilnych wartościach logicznych, zanim pojawi się następny impuls zegara. Dopóki warunek ten jest spełniony (ignorując niektóre inne szczegóły), obwód jest stabilny i niezawodny. Określa to maksymalną prędkość roboczą obwodu synchronicznego.


15

Krótka odpowiedź: menedżerowie chcą prostej, testowalnej, DOWODZONEJ funkcji, zanim zaangażują się w projekt w postaci milionów (lub więcej) dolarów. Obecne narzędzia, po prostu nie udzielaj odpowiedzi asynchronicznych.

Mikrokomputery i mikrokontrolery zwykle wykorzystują schemat taktowania w celu zapewnienia kontroli czasu. Wszystkie rogi procesu muszą utrzymywać synchronizację we wszystkich wpływach napięcia, temperatury, procesu itp. Na prędkości propagacji sygnału. Nie ma aktualnych bramek logicznych, które zmieniają się natychmiast: każda bramka przełącza się w zależności od napięcia, które jest dostarczane, napędu, jaki pobiera, obciążenia, które napędza oraz wielkości urządzeń, które są do niego użyte (i oczywiście węzeł procesu (rozmiar urządzenia), w którym jest wykonany, i jak szybko ten proces faktycznie wykonuje --- TO przechodzi przez fab). Aby przejść do „natychmiastowego” przełączania, musisz użyć logiki kwantowej, a to zakłada, że ​​urządzenia kwantowe mogą się natychmiast przełączać; (Nie jestem pewien).

Logika taktowania sprawia, że ​​DOWODZENIE, że taktowanie w całym procesorze działa w oparciu o oczekiwane zmienne napięcia, temperatury i przetwarzania. Dostępnych jest wiele narzędzi programowych, które pomagają mierzyć ten czas, a proces netto nazywa się „zamykaniem czasu”. Taktowanie może (i z mojego doświadczenia wynika ) , że zajmuje około 1/3 do 1/2 mocy zużywanej przez mikroprocesor.

Dlaczego więc nie projekt asynchroniczny? Istnieje kilka, jeśli w ogóle, narzędzi do zamykania synchronizacji, które wspierają ten styl projektowania. Istnieje niewiele, jeśli w ogóle, zautomatyzowanych narzędzi do wyznaczania miejsc i tras, które mogą poradzić sobie z dużym projektem asynchronicznym i nim zarządzać. Jeśli nic więcej, menedżerowie NIE zatwierdzają niczego, co nie ma prostej, wygenerowanej komputerowo, DOWÓD funkcjonalności.

Komentarz, że projektowanie asynchroniczne wymaga „tony” sygnałów synchronizujących, które wymagały „znacznie większej liczby tranzystorów”, ignoruje koszty routingu i synchronizacji zegara globalnego oraz koszt wszystkich przerzutników wymaganych przez system taktowania. Projekty asynchroniczne są (lub powinny być) mniejsze i szybsze niż ich taktowane odpowiedniki. (Jeden po prostu bierze JEDNĄ najwolniejszą ścieżkę sygnału i wykorzystuje ją do sprzężenia zwrotnego sygnału „gotowości” z poprzednią logiką).

Logika asynchroniczna jest szybsza, ponieważ nigdy nie musi czekać na zegar, który musiał zostać przedłużony o kolejny blok w innym miejscu. Jest to szczególnie prawdziwe w przypadku funkcji rejestracji do logiki do rejestracji. Logika asynchroniczna nie ma wielu problemów z „konfiguracją” i „wstrzymaniem”, ponieważ takie problemy występują tylko w końcowych strukturach ujścia (rejestrach), w przeciwieństwie do zestawów logicznych potokowych z przerzutnikami rozmieszczonymi w przestrzeni, opóźnienia propagacji logicznej opóźniają się w taktowaniu Granic.

Czy da się to zrobić? Z pewnością nawet w przypadku miliarda tranzystorów. Czy to trudniejsze? Tak, ale tylko dlatego, że DOWODZENIE, że działa na całym układzie (lub nawet systemie), jest znacznie bardziej zaangażowane. Ustalenie czasu na papierze jest rozsądnie bezpośrednie dla dowolnego bloku lub podsystemu. Kontrolowanie taktowania w automatycznym systemie miejsc i tras jest znacznie trudniejsze, ponieważ oprzyrządowanie NIE jest skonfigurowane do obsługi znacznie większego potencjalnego zestawu ograniczeń czasowych.

Mikrokontrolery mają również potencjalnie duży zestaw innych bloków, które łączą się z (względnie) wolnymi sygnałami zewnętrznymi, dodając do całej złożoności mikroprocesora. To sprawia, że ​​czas jest trochę bardziej zaangażowany, ale niewiele.

Osiągnięcie mechanizmu „blokowania” jako „pierwszy przybywający” jest problemem związanym z projektowaniem obwodu i istnieją znane sposoby radzenia sobie z tym. Warunki wyścigu są oznaką 1). zła praktyka projektowania; lub 2). sygnały zewnętrzne przychodzące do procesora. W rzeczywistości taktowanie wprowadza warunek wyścigu sygnał-zegar, który jest związany z naruszeniem ustawień i wstrzymania.

Ja osobiście nie rozumiem, w jaki sposób projekt asynchroniczny może utknąć w martwym punkcie lub jakikolwiek inny stan wyścigu. To może być moje ograniczenie, ale chyba że dzieje się to przy wejściu danych do procesora, NIGDY nie powinno być to możliwe w dobrze zaprojektowanym systemie logicznym, a nawet wtedy, ponieważ może się to zdarzyć w momencie wejścia sygnałów, planujesz sobie z tym poradzić.

(Mam nadzieję, że to pomoże).

Wszystko to powiedziało, jeśli masz pieniądze ...


Oczywiście zależy to od budowanego układu - na przykład sprzęt sieci neuronowej ma tendencję do bycia asynchronicznym, ponieważ tak naprawdę jest to najłatwiejsza rzecz - emuluje on asynchronicznie . Budujemy głównie synchroniczny sprzęt sekwencyjny, ponieważ oprogramowanie / oprogramowanie układowe jest również w większości synchroniczne i sekwencyjne (szczególnie w części „sekwencyjnej” - kod asynchroniczny jest coraz częściej wykorzystywany). W rzeczywistości dużo łatwiej jest owinąć głowę sekwencyjnym, synchronicznym systemem, zwłaszcza gdy większość programów jest wykonywana w językach, które zachęcają do sekwencyjnego kodu.
Luaan

Wydarzenia w świecie rzeczywistym zdarzają się w nieprzewidzianych czasach. Jeśli urządzenie ma przycisk i ma wykonać jedną ścieżkę kodu, jeśli zostanie wciśnięte „wystarczająco wcześnie”, i wykonać inną ścieżkę kodu, jeśli tak nie jest, to przy braku ograniczeń kwantowo-mechanicznych między chwilą naciśnięcia przycisku gdzie naciśnięcie przycisku nastąpiłoby wystarczająco szybko, aby uruchomić alternatywną ścieżkę kodu, i moment, w którym naciśnięcie przycisku byłoby „za późno”, byłby dokładny moment, w którym naciśnięcie przycisku spowodowałoby pewne zachowanie „między” tymi dwoma (np. powodując zmianę niektórych bitów licznika programu ...
supercat

... ale nie inni). W przypadku braku ograniczeń kwantowo-mechanicznych, czas między ostatnim momentem, w którym pchnięcie spowodowałoby rozgałęzienie, a pierwszym momentem, w którym pchnięcie nie byłoby w stanie tego zrobić, może być dowolnie mały, ale nie zredukowany do zera. Ograniczenia kwantowo-mechaniczne mogą sprawić, że każde naciśnięcie przycisku nastąpi wystarczająco wcześnie, aby się zarejestrować, lub wystarczająco późno, aby się nie udać, ale udowodnienie, że nigdy nie będzie stanu kwantowego, który pozwoliłby na naciśnięcie przycisku w śmiertelnie pośrednim czasie niemożliwy.
supercat

Zastosowanie logiki synchronicznej znacznie upraszcza analizę sytuacji, w których system będzie musiał zareagować na naprawdę asynchroniczne zdarzenie, zapewniając, że warunki wyścigu będą miały bardzo małe prawdopodobieństwo ucieczki z bardzo małej części całego urządzenia. Analiza tej niewielkiej części urządzenia w celu upewnienia się, że warunki wyścigu prawdopodobnie nie uciekną, może być o wiele łatwiejszym do rozwiązania problemem niż umożliwienie wystąpienia warunków wyścigu niemal wszędzie i próba analizy ich skutków, aby udowodnić, że prawdopodobnie nie powodują problemów.
supercat

10

Mikrokontrolery muszą używać zegara, ponieważ muszą być w stanie reagować na zdarzenia, które mogą wystąpić w dowolnym momencie, w tym prawie jednocześnie z innymi zdarzeniami zewnętrznymi lub zdarzeniami generowanymi przez same kontrolery, i często mają wiele obwodów, które muszą wiedzieć, czy jedno zdarzenie X poprzedza inne zdarzenie Y. Może nie mieć znaczenia, czy wszystkie takie obwody zdecydują, że X poprzedził Y, czy wszystkie takie obwody zdecydują, że X nie poprzedził Y, ale często będzie krytyczne, że jeśli którykolwiek z obwodów zdecyduje, że X poprzedza T, więc wszyscy muszą to zrobić. Niestety, trudno jest zapewnić, aby obwody w ograniczonym czasie osiągnęły gwarantowany konsensus co do tego, czy X poprzedza Y, a nawet osiągnęły konsensus co do tego, czy osiągnęły konsensus. Synchroniczna logika może w tym ogromnie pomóc.

Dodanie zegara do obwodu umożliwia zagwarantowanie, że podsystem nie doświadczy żadnych warunków wyścigu, chyba że dane wejściowe do systemu zmienią się w bardzo małym oknie względem zegara, a także zagwarantuje, że wyjście jednego urządzenia zostanie doprowadzone do innego , wyjście pierwszego urządzenia nie zmieni się w oknie krytycznym drugiego urządzenia, chyba że dane wejściowe do pierwszego urządzenia zmienią się w jeszcze mniejszym oknie krytycznym. Dodanie innego urządzenia przed pierwszym urządzeniem zapewni, że dane wejściowe pierwszego urządzenia nie zmienią się w tym małym oknie, chyba że dane wejściowe nowego urządzenia zmienią się w naprawdę bardzo małym oknie. Z praktycznego punktu widzenia, chyba że ktoś celowo próbuje doprowadzić do konsensusu,

Z pewnością możliwe jest zaprojektowanie w pełni asynchronicznych systemów, które działają „tak szybko, jak to możliwe”, ale chyba, że ​​system jest wyjątkowo prosty, trudno będzie uniknąć sytuacji, w której projekt zostałby zakłócony przez wyścig. Chociaż istnieją sposoby rozwiązania warunków wyścigu bez konieczności korzystania z zegarów, warunki wyścigu można często rozwiązać znacznie szybciej i łatwiej za pomocą zegarów, niż byłoby to możliwe bez nich. Chociaż logika asynchroniczna często byłaby w stanie rozwiązać warunki wyścigu szybciej niż logika taktowana, sytuacje, w których nie jest to możliwe, stanowią poważny problem, zwłaszcza biorąc pod uwagę trudność osiągnięcia części systemu w celu ustalenia, czy osiągnęły one konsensus. System, który może konsekwentnie uruchamiać milion instrukcji na sekcję, będzie ogólnie bardziej przydatny niż jeden, który może czasem wykonywać cztery miliony instrukcji na sekundę, ale może potencjalnie utknąć na milek (lub dłużej) na raz z powodu warunków wyścigu.


Warto zauważyć, że decydowane stany mogą być równie wewnętrzne - na przykład w wyniku operacji arytmetycznej. Opóźnienia wynikające z długości linii mogą spowodować, że jedna część MCU zobaczy wynik i - bez zegara - działając na niego - przed innymi częściami.
Nick Johnson,

@NickJohnson: Jeśli kolejność wykonywania operacji nigdy nie zależy od rzeczy, które nie zostały jeszcze obliczone, problemy te można rozwiązać bez trudu, jeśli każda sekcja jak ALU ma „prawidłowe” dane wejściowe i „prawidłowe” dane wyjściowe oraz rzeczy mogą być ustawione tak, aby miały miejsce w deterministycznej sekwencji. Koła wypadają wtedy, gdy kolejność wykonywania operacji powinna zależeć od czasu (np. Jeśli jeden ma wiele równoległych operacji, które muszą korzystać ze wspólnej magistrali pamięci, a dwa z nich wydają prawie jednoczesne żądania, z których jeden arbitraż powinien iść pierwszy ...
supercat

... i na co należy czekać, może być trudny do rozwiązania. Jeśli ktoś z góry zdecyduje, który z nich pójdzie pierwszy, można uniknąć takich problemów, ale jeśli okaże się, że jednostka, która została wyznaczona jako pierwsza, nie jest gotowa na długo po drugim, wydajność może poważnie ucierpieć .
supercat

Dlatego podróż w kosmos jest tak trudna, prawdopodobieństwo zmienia się niekorzystnie.
Magic Smoke,

6

MCU to tylko jeden bardzo złożony przykład synchronicznego sekwencyjnego obwodu logicznego. Najprostszą formą jest prawdopodobnie taktowany D-flip-flop (D-FF), tj. Synchroniczny 1-bitowy element pamięci.

Istnieją elementy pamięci, które są asynchroniczne, na przykład zatrzask D, który jest (w pewnym sensie) asynchronicznym odpowiednikiem D-FF. MCU to nic innego jak garść milionów takich podstawowych elementów pamięci (D-FF) sklejonych z tonami bramek logicznych (upraszczam).

Przejdźmy teraz do sedna: dlaczego MCU używają D-FF zamiast D-zatrzasków jako elementów pamięci wewnętrznie? Chodzi przede wszystkim o niezawodność i łatwość projektowania: zatrzaski D reagują, gdy tylko zmieniają się wejścia, a wyjścia są aktualizowane tak szybko, jak to możliwe. Pozwala to na nieprzyjemne niepożądane interakcje między różnymi częściami obwodu logicznego (niezamierzone pętle sprzężenia zwrotnego i wyścigi). Projektowanie złożonego układu sekwencyjnego z wykorzystaniem asynchronicznych elementów składowych jest z natury trudniejsze i podatne na błędy. Obwody synchroniczne unikają takich pułapek, ograniczając działanie bloków konstrukcyjnych do chwil, w których wykrywane są krawędzie zegara. Kiedy nadejdzie zbocze, synchroniczny obwód logiczny zbiera dane na swoich wejściach, ale nie aktualizuje jeszcze swoich wyjść. Natychmiast po uzyskaniu danych wejściowych dane wyjściowe są aktualizowane. Pozwala to uniknąć ryzyka, że ​​sygnał wyjściowy jest przekazywany z powrotem na wejście, które nie zostało całkowicie pozyskane, i psuje rzeczy (mówiąc po prostu).

Ta strategia „odsprzęgania” akwizycji danych wejściowych od aktualizacji wyjść umożliwia prostsze techniki projektowania, co przekłada się na bardziej złożone systemy dla danego wysiłku projektowego.


5

To, co opisujesz, nazywa się logiką asynchroniczną . Może działać, a kiedy to robi, jest często szybszy i zużywa mniej energii niż logika synchroniczna (taktowana). Niestety, logika asynchroniczna ma pewne problemy, które uniemożliwiają jej szerokie zastosowanie. Najważniejszy, jaki widzę, polega na tym, że wdrożenie wymaga znacznie więcej tranzystorów, ponieważ potrzebujesz ton niezależnych sygnałów synchronizacji. (Mikrokontrolery wykonują dużo pracy równolegle, podobnie jak procesory). To zwiększy koszty. Brak dobrych narzędzi do projektowania stanowi dużą przeszkodę z góry.

Mikrokontrolery prawdopodobnie zawsze będą potrzebowały zegarów, ponieważ ich urządzenia peryferyjne zwykle muszą mierzyć czas. Timery i PWM działają w stałych odstępach czasu, częstotliwości próbkowania ADC wpływają na ich przepustowość, a asynchroniczne protokoły komunikacyjne, takie jak CAN i USB, wymagają zegarów referencyjnych do odzyskania zegara. Zazwyczaj chcemy, aby procesory działały tak szybko, jak to możliwe, ale nie zawsze tak jest w przypadku innych systemów cyfrowych.


3

W rzeczywistości widzisz MCU jako kompletną jednostkę, ale prawda jest taka, że ​​sama jest zbudowana z różnych bramek i logiki TTL i RTL, często macierzy FF, wszystkie potrzebują indywidualnie sygnału zegarowego,

Aby być bardziej konkretnym, pomyśl o dostępie do adresu z pamięci to proste zadanie może samo w sobie obejmować wiele operacji, takich jak udostępnienie magistrali dla linii danych i linii adresu.
Najlepszym sposobem na powiedzenie jest to, że same instrukcje występują w małych jednostkach operacyjnych, które wymagają cykli zegara, które są połączone dla cykli maszynowych , które uwzględniają różne właściwości MCU, takie jak prędkość (FLOPS ** w skomplikowanych MCU), wykładziny rur itp.

Odpowiedź na Komentarz OP

Aby być bardzo precyzyjnym, podam wam przykład, że istnieje układ o nazwie ALE(Włączenie zatrzasku adresu) zwykle w celu multipleksowania dolnej szyny adresowej do przesyłania zarówno adresu, jak i danych na te same piny, używamy oscylatorów (intel 8051 używa lokalnego oscylatora 11,059 MHz jako zegara), aby pobrać adres, a następnie dane.

Jak być może wiesz, że podstawowymi częściami MCU są CPU, ALU i rejestr wewnętrzny itd., CPU (kontrolujący s / g) wysyła adres do wszystkich pinów adresowych 16 w przypadku 8051, dzieje się to w chwili T1 pomiaru czasu i po adres to odpowiednia matryca przechowywania kondensatorów (ładowanie jako sygnał) ( * mapowanie pamięci * ) jest aktywowana i wybierana.

Po wybraniu sygnał ALE jest aktywowany, tzn. Pin ALE jest ustawiany wysoko przy następnym zegarze, powiedz T2 ( zwykle sygnał High, ale zmienia się zgodnie z konstrukcją jednostki przetwarzającej ), po czym szyny dolnego adresu działają jak linie danych, a dane są zapisywane lub odczytywane (w zależności od wyjścia na styku RD / WR MCU).
Wyraźnie widać, że wszystkie zdarzenia są sekwencyjne na czas

Co by się stało, gdybyśmy nie używali zegara Następnie będziemy musieli zastosować asynchroniczną metodę taktowania ASQC, to spowodowałoby, że każda bramka byłaby zależna od siebie i mogłaby spowodować awarie sprzętowe, Zabija to także wykładanie instrukcji niemożliwe, długo zależne i nieregularne czas na wykonanie zadania.
Jest to więc coś niepożądanego


To ma sens. Ale dlaczego te różne przedziały MCU potrzebują sygnału zegara do działania? Co teoretycznie by się stało, gdyby nie używali zegara?
MR.

1
@ Martin, bramki logiczne zmieniają stan natychmiast, gdy zmienia się ich wejście. Zegarowa sekwencyjna logika ocenia tylko dane wejściowe podczas zdarzenia zegarowego. Jest to podstawowa zasada napędzająca cyfrowe obwody pamięci. Daje nam to możliwość selektywnego przenoszenia danych z jednego miejsca do drugiego z absolutną kontrolą, co pozwala na tworzenie sprzętu ogólnego przeznaczenia, który można programować za pomocą oprogramowania do wykonywania - cóż, wszystkiego.
Sean Boddy,

3
@SeanBoddy: Bramki logiczne nie od razu określają przypadek, istnieje krótkie opóźnienie, które można zobaczyć na oscyloskopie. Jeśli nie użyjemy zegara, różnice w tych momentach między komponentami mogą spowodować, że warunki wyścigowe dadzą złe wyniki.
BlueRaja - Danny Pflughoeft

@BlueRaja - dobre golly gumdrops, co powiesz na to. Może cofnę się o 4 lata notatek z elektroniki energetycznej i 8 lat granatowego szkolenia, żeby dowiedzieć się, gdzie tęskniłem.
Sean Boddy,

2

Podstawowym problemem, który rozwiązuje zegar, jest to, że tranzystory nie są tak naprawdę urządzeniami cyfrowymi: używają analogowych poziomów napięcia na wejściach do określania mocy wyjściowej i potrzebują skończonego czasu na zmianę stanu. O ile, jak wspomniano w innej odpowiedzi, nie dostaniesz się do urządzeń kwantowych, nastąpi okres czasu, w którym wejście przechodzi z jednego stanu do drugiego. Czas potrzebny na to zależy od pojemnościowego obciążenia, które będzie się różnić w zależności od urządzenia. Oznacza to, że różne tranzystory, które tworzą każdą bramkę logiczną, zareagują w nieco innym czasie. Zegar służy do „zatrzaśnięcia” wyjść urządzeń składowych po ich ustabilizowaniu.

Jako analogię weź pod uwagę warstwę transportową komunikacji SPI (Serial Peripheral Interface). Typowa implementacja tego wykorzystuje trzy linie: Data In, Data Out i Clock. Aby wysłać bajt przez tę warstwę transportową, urządzenie nadrzędne ustawi swoją linię wyjścia danych i zapewni linię zegara, aby wskazać, że linia wyjścia danych ma prawidłową wartość. Urządzenie podrzędne będzie próbkować swoje dane w linii tylko wtedy, gdy otrzyma takie polecenie na podstawie sygnału zegara. Gdyby nie było sygnału zegara, skąd niewolnik wiedziałby, kiedy próbkować linię danych? Może to próbkować przed ustawieniem linii przez urządzenie nadrzędne lub podczas przejścia między stanami. Protokoły asynchroniczne, takie jak CAN, RS485, RS422, RS232 itp. Rozwiązują ten problem, wykorzystując wcześniej zdefiniowany czas próbkowania, stałą szybkość transmisji i (narzutowe) bity ramkowania.

Innymi słowy, istnieje pewien rodzaj powszechnej wiedzy wymaganej do ustalenia, kiedy wszystkie tranzystory w zestawie bramek osiągnęły stan końcowy i instrukcja jest kompletna. W łamigłówce (100 niebieskich oczu) podanej w powyższym linku i objaśnionej bardziej szczegółowo w tym pytaniu na temat wymiany stosów Maths, „wyrocznia” działa jak zegar dla mieszkańców wyspy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.