Dlaczego zegary są używane w komputerach?

22

Jak wiem, zegar kontroluje wszystkie operacje logiczne, ale także ogranicza prędkość komputera, ponieważ bramki muszą czekać na zmianę zegara z niskiej na wysoką lub z wysokiej na niską w zależności od komponentu. Gdyby nie włączono zegara, bramki zmieniałyby się tak szybko, jak to możliwe, za każdym razem, gdy otrzymano polecenie, więc dlaczego nie zwiększyłoby to szybkości komputerów i dlaczego używane są zegary?

skyler
źródło
Nie mam czasu na właściwą odpowiedź, ale na najbardziej podstawowym poziomie, więc wszystkie cyfrowe rzeczy maszerują w rytm tego samego perkusisty. Wyszukaj synchroniczne vs. asynchroniczne.
Matt Young,
możliwy duplikat sygnałów zegarowych w komputerach i maszynach (i to pytanie zostało zamknięte, ponieważ nie jest prawdziwym pytaniem ...)
amadeus
W przypadku wąskiego zakresu zadań komputery analogowe mogą być szybsze niż komputery cyfrowe.
Nick Alexeev
1
Więc wiedzą, która jest godzina! (przepraszam, nie mogłem się oprzeć)
Scott Seidman

Odpowiedzi:

32

Zegary są używane w komputerach z tego prostego powodu, że większość, jeśli nie cała cyrkulacja, to synchroniczna logika sekwencyjna .

W obwodzie synchronicznym elektroniczny oscylator zwany zegarem generuje sekwencję powtarzalnych impulsów zwanych sygnałem zegarowym, który jest dystrybuowany do wszystkich elementów pamięci w obwodzie.

Teraz, co może nie wydawać się satysfakcjonujące i przyznane, rozsądnie zapytasz „dlaczego obwody synchroniczne są używane w komputerach?” ale na to pytanie również łatwo odpowiedzieć :

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.

Aktywnym obszarem badań jest obliczenia asynchroniczne, w których większość, jeśli nie całość obwodów, to asynchroniczna logika sekwencyjna .

Alfred Centauri
źródło
Artykuł w Wikipedii na temat asynchronicznej logiki sekwencyjnej jest raczej krótki; pomocne może być rozróżnienie logiki, która nie ma pojedynczego zegara, ale może zagwarantować, że wejścia obwodów nie spowodują warunków wyścigu lub, w najgorszym przypadku, że wyjścia dowolnego obwodu, którego wejście mogło mieć warunki wyścigu, nie będą używany.
supercat
Myślę, że warto zauważyć, że był w pełni asynchroniczny komputer zbudowany przez Jacka Karpińskiego o nazwie KAR-65. Niestety nie mogę nic na ten temat znaleźć w języku angielskim.
elmo
6

Wyobraź sobie, że masz 8-bitową liczbę całkowitą wysyłaną z pamięci do ALU w celu obliczeń i (przynajmniej w tym przykładzie), że obwód pamięci dostarcza sygnały na 8 liniach danych, zanim ALU będzie ich wymagała i w nieco innym czasie.

Zastosowanie zegara zapewniłoby, że 8 linii danych zawiera prawidłową wartość liczby całkowitej reprezentowanej dla jednego cyklu zegara i że ALU „zbierze” te dane w tym samym cyklu zegara.

Zdaję sobie sprawę, że prawdopodobnie nie był to najlepszy opis, w zasadzie bez zegara, który zapewniłby, że spójność danych byłaby znacznie trudniejsza niż jakikolwiek możliwy wzrost prędkości sprawiłby, że warto, miałbyś wiele problemów z wyścigami.


źródło
6

Obwód podobny do arytmetycznej jednostki logicznej pobierze kilka liczb jako dane wejściowe i wygeneruje liczbę w postaci wyjściowej. Może zagwarantować, że w pewnym okresie czasu wszystkie bity wyjściowe osiągną prawidłowe stany końcowe, ale faktyczny czas na bity wyjściowe może być ważny, może się znacznie różnić w zależności od różnych czynników.

Możliwe byłoby skonstruowanie ALU z „prawidłowym” wejściem i „prawidłowym” wyjściem i określenie, że pod warunkiem, że „prawidłowy” sygnał wejściowy jest niski przez wystarczający czas przed wykonaniem obliczeń, a dane wejściowe zawierają pożądane wartości, zanim „prawidłowe” wejście osiągnie stan wysoki, „prawidłowe” wyjście nie wzrośnie, dopóki bity wyjściowe nie będą w rzeczywistości poprawne. Taki projekt prawdopodobnie wymagałby około dwa razy więcej obwodów niż konwencjonalny ALU [w zasadzie musiałby śledzić, czy każdy bit był „znany” jako zero, czy „znany” jako jeden; jego „prawidłowe” wyjście byłoby prawdziwe, gdy stan każdego bitu wyjściowego był znany].

Co gorsza, zezwolenie na te części procesora, które mogłyby działać szybciej, będą pomocne tylko wtedy, gdy nie będą cały czas czekać, aż wolniejsze części zaczną nadrabiać zaległości. Aby tak się stało, musi istnieć logika, aby zdecydować, która część maszyny jest „do przodu” w danym momencie, i na tej podstawie wybrać kierunek działania. Niestety, tego rodzaju decyzja jest jedną z najtrudniejszych do podjęcia przez elektronikę w sposób niezawodny. Rzetelne podjęcie decyzji, które z dwóch zdarzeń miały miejsce jako pierwsze, jest na ogół łatwe tylko wtedy, gdy można zagwarantować, że nigdy nie będzie żadnych „bliskich połączeń”. Załóżmy, że sekwencer pamięci obsługuje żądanie z jednostki przetwarzającej nr 1, a następnie jednostka nr 1 oczekuje na kolejne żądanie. Jeśli jednostka nr 2 prześle żądanie przed zakończeniem pierwszego żądania z nr 1, jednostka pamięci powinna to obsłużyć; w przeciwnym razie powinien obsłużyć następne żądanie z jednostki nr 1. Wydawałoby się to rozsądnym projektem, ale okazuje się, że jest zaskakująco problematyczny. Problem polega na tym, że jeśli jest taki moment, że żądanie otrzymane przed tą chwilą zostanie przetworzone natychmiast, a żądanie otrzymane później będzie musiało poczekać, ilość czasu potrzebna do ustalenia, czy wniosek przekroczy termin z grubsza odwrotnie proporcjonalna do różnicy między czasem otrzymania wniosku a terminem. Czas wymagany do ustalenia przez moduł pamięci, że żądanie z nr 2 przekroczyło termin o jeden femptosekunda, może znacznie przekroczyć czas, który byłby wymagany do obsługi drugiego żądania z urządzenia nr 1, ale urządzenie nie może obsłużyć albo żądaj, aż zdecyduje, który z nich będzie obsługiwany jako pierwszy.

Dzięki temu, że wszystko przebiega przez wspólny zegar, nie tylko eliminuje potrzebę określania przez układ, kiedy dane wyjściowe obliczeń są prawidłowe, ale także pozwala wyeliminować czasowe „bliskie wywołania”. Jeśli wszystko w systemie kończy się na zegarze 100 MHz, żaden sygnał nie zmienia się w reakcji na zegar do 1 ns po zboczu zegara, a wszystko, co wydarzy się w odpowiedzi na zbocze zegara, nastąpi w ciągu 7 ns, wtedy wszystko, co nastąpi przed konkretna krawędź zegara „wygra” o co najmniej 3ns, a wszystko, co się nie stanie, dopóki krawędź zegara nie „straci” o co najmniej 1ns. Ustalenie, czy sygnał ma szansę przed zegarem, czy po nim, gdy jest gwarantowane, że nie będzie „blisko”, jest znacznie łatwiejsze niż ustalenie, który z dwóch sygnałów o dowolnym czasie nastąpi najpierw.

supercat
źródło
4

Systemy cyfrowe mogą być synchroniczne lub asynchroniczne . W systemach asynchronicznych moc wyjściowa może się zmieniać w dowolnym momencie, inaczej niż w systemach synchronicznych, które zależą od zegara w celu zmiany mocy wyjściowej.

Większość systemów cyfrowych jest synchroniczna (chociaż mogą mieć pewne asynchroniczne części), ponieważ projekt i analizę defektów można wykonać z większą łatwością, ponieważ wyjścia mogą się zmieniać tylko z zegarem.

Prawie to skopiowałem Digital Systems: Principles and Applications, 10th edition by R. J. Tocci et al.

gabrieljcs
źródło
3

Cóż, jeśli projektujesz system synchroniczny, masz docelową częstotliwość zegara i projektujesz logikę, aby ukończyć wszystkie obliczenia podczas cyklu w ciągu jednego okresu zegarowego. Oznacza to również, że musisz uwzględnić margines bezpieczeństwa, aby uwzględnić różne warunki, takie jak niskie napięcie zasilania, wysoka temperatura i „wolny” układ. Synchroniczne układy scalone są zaprojektowane tak, aby najdłuższa ścieżka logiczna (najwolniejsze obliczenie) zakończyła się w czasie w tych wszystkich niekorzystnych warunkach. W rezultacie, gdy warunki nie są straszne, będziesz miał znacznie więcej czasu / marginesu między zakończeniem działania logiki a następnym zegarem zatrzaskującym wynik. Ponieważ (zwykle) nie możesz zmienić częstotliwości zegara, tracisz tę prędkość.

Jest to całkowicie logiczne asynchroniczne paradygmaty, które istnieją, na przykład jeden, że jestem obeznany z logiką konferencyjnym jest NULL. Za pomocą szerokich pociągnięć, aby opisać, co się dzieje, obwód logiczny jest w stanie zidentyfikować, kiedy obliczenia zostały zakończone, i jest w stanie skutecznie tworzyć własne sygnały „zegara”. Dzięki temu obwód działa tak szybko, jak to możliwe, i ma niewielkie korzyści w zakresie mocy i EMI. Niestety płacisz karę za charakter asynchroniczny pod względem gęstości projektowej oraz najwyższej wydajności. Ponadto, chociaż narzędzia programowe do projektowania synchronicznego i sprawdzania poprawności są dojrzałe, wiele projektów i sprawdzania poprawności projektów asynchronicznych jest nadal ręcznych, co wymaga większego wysiłku wymaganego do zaprojektowania i zbudowania projektu asynchronicznego.

To również całkowicie pomija przypadek, w którym czasami potrzebny jest zegar, aby określona aplikacja była odniesieniem czasowym. Na przykład karta dźwiękowa nie może działać asynchronicznie, ponieważ musi aktualizować przetwornik ADC lub DAC z określoną, precyzyjną częstotliwością próbkowania, w przeciwnym razie dźwięk zostanie zniekształcony.

W5VO
źródło
1

Gdyby nie włączono zegara, bramki zmieniałyby się tak szybko, jak to możliwe, za każdym razem, gdy otrzymano polecenie, więc dlaczego nie zwiększyłoby to szybkości komputerów i dlaczego używane są zegary?

Mówiąc prościej: ponieważ ludzie nie są istotami superinteligentnymi i muszą zastosować skróty, aby umożliwić projektowanie obwodów miliardowych.

Kiedy nasi władcy maszyn wznoszą się, mogą równie dobrze pozbyć się zegara, pokonać dręczące minuty, jak wytwarzanie obwodu bez zegara, pomimo zmienności procesu, i skorzystać z pewnych przyrostów prędkości.

Aby nieco rozszerzyć: dyskretne, przewidywalne rzeczy są łatwiejsze do racjonalnej analizy i projektowania. Jako ogromna dodatkowa korzyść, dokonują one samokorekty (w tym przypadku samokorekta czasu). Właśnie dlatego korzystamy z logiki cyfrowej. (Podobnie w programowaniu często używamy liczb całkowitych zamiast liczb zmiennoprzecinkowych, znanych struktur sterujących zamiast goto-spaghetti oraz języków z kilkoma jasnymi regułami zamiast bardzo „elastycznych” języków, w których nigdy nie jesteś do końca pewien, co się stanie aż do uruchomienia kodu).

Aleksandr Dubinsky
źródło
Nawet poza tym, że logika synchroniczna jest łatwiejsza do zaprojektowania, komputer z zegarem o częstotliwości 10 MHz będzie na ogół zaprojektowany tak, aby w każdym miejscu, w którym musi ustalić, czy zdarzenie X nastąpi przed Y, jedno lub oba zdarzenia zostaną opóźnione, ponieważ konieczne jest zachowanie szczególnego związku z zegarem głównym, aby zdarzenia nigdy nie miały miejsca jednocześnie. Ponadto, w kilku przypadkach, w których możliwa byłaby możliwość jednoczesnego działania, dopuszczalne będzie dodanie ustalonego opóźnienia dwu- lub trzykrotnego w celu wymuszenia jednego lub obu sygnałów w stałej relacji zegara.
supercat
Gdyby projekt był asynchroniczny, można by stwierdzić, że losowe 99% instrukcji bierze 5ns, 0,9% losowo bierze 10ns, 0,09% bierze 30ns, 0,009% 100ns, 0,0009% 300ns, 0,00009% 1us, 0,000009% 3us itp. Bez stanowcza gwarancja, ile czasu może zająć system, aby rozwiązać niejednoznaczność czasową. W większości przypadków posiadanie wydajności, która nie jest optymalna, ale przewidywalna, jest lepsza niż wydajność, która jest średnio szybsza, ale ma nieprzewidywalne zmiany, które są czasami poważne.
supercat
@ superupat 1) Czy nie można zaprojektować obwodu, w którym nigdy nie występują zdarzenia jednoczesne? (przynajmniej jeśli wejścia są wystarczająco regularne) 2) Czy nie można zaprojektować obwodu, w którym nie ma znaczenia, czy wystąpią jednoczesne zdarzenia?
Aleksandr Dubinsky,
Jeśli znany jest względny czas dwóch zdarzeń, można zapobiec ich jednoczesnemu wystąpieniu, opóźniając jedno lub drugie. Im dokładniej znany jest ich względny czas, tym mniejsze opóźnienie będzie wymagane. Jeśli względny czas nie jest znany, możliwe jest rozwiązanie dwóch zdarzeń, które mogą wystąpić jednocześnie, w celu wskazania, które zdarzyły się pierwsze, ale aby zminimalizować zachowanie w najgorszym przypadku, należy zaakceptować dość poważne kompromisy w zachowaniu w najlepszym przypadku. Kompromisy, które byłyby konieczne do działania komputera bez zegara, byłyby gorsze niż używanie zegara.
supercat