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?
22
Odpowiedzi:
Zegary są używane w komputerach z tego prostego powodu, że większość, jeśli nie cała cyrkulacja, to synchroniczna logika sekwencyjna .
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ć :
Aktywnym obszarem badań jest obliczenia asynchroniczne, w których większość, jeśli nie całość obwodów, to asynchroniczna logika sekwencyjna .
źródło
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
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.
źródło
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.
źródło
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.
źródło
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).
źródło