Perché gli orologi sono usati nei computer?


22

Come so, un orologio controlla tutte le operazioni logiche, ma limita anche la velocità di un computer perché le porte devono attendere che l'orologio passi da basso ad alto o da alto a basso a seconda del componente. Se nessun orologio fosse incorporato, le porte cambieranno il più velocemente possibile ogni volta che viene dato il comando, quindi perché non aumenterebbe la velocità del computer e perché vengono usati gli orologi?


Non ho tempo per una risposta adeguata, ma al livello più elementare, quindi tutte le cose digitali stanno marciando al ritmo dello stesso batterista. Cerca sincrono vs asincrono.
Matt Young,

possibile duplicato di segnali di clock in computer e macchine , (e quella domanda è stata chiusa come non una vera domanda ...)
amadeus

Per una gamma ristretta di attività, i computer analogici possono essere più veloci dei computer digitali.
Nick Alexeev

1
Quindi sanno che ore sono! (scusate, non ho resistito)
Scott Seidman,

Risposte:


32

Gli orologi vengono utilizzati nei computer per il semplice motivo che la maggior parte, se non tutta la circuità, è una logica sequenziale sincrona .

In un circuito sincrono, un oscillatore elettronico chiamato orologio genera una sequenza di impulsi ripetitivi chiamati segnale di orologio che viene distribuito a tutti gli elementi di memoria nel circuito.

Ora, ciò potrebbe non sembrare soddisfacente e scontato, si potrebbe ragionevolmente chiedere "perché i circuiti sincroni vengono utilizzati nei computer?" ma anche questa è una domanda facile a cui rispondere :

Il vantaggio principale della logica sincrona è la sua semplicità. Le porte logiche che eseguono le operazioni sui dati richiedono una quantità limitata di tempo per rispondere alle modifiche ai loro input. Questo si chiama ritardo di propagazione. L'intervallo tra gli impulsi di clock deve essere abbastanza lungo in modo che tutte le porte logiche abbiano il tempo di rispondere ai cambiamenti e le loro uscite si "stabilizzino" su valori logici stabili, prima che si verifichi l'impulso di clock successivo. Finché questa condizione è soddisfatta (ignorando alcuni altri dettagli) il circuito è garantito per essere stabile e affidabile. Ciò determina la massima velocità operativa di un circuito sincrono.

Un'area di ricerca attiva è il calcolo asincrono, dove la maggior parte se non tutti i circuiti è la logica sequenziale asincrona .


Il pezzo di Wikipedia sulla logica sequenziale asincrona è piuttosto breve; potrebbe essere stato utile distinguere tra la logica che non ha un singolo clock ma può garantire che gli ingressi dei circuiti non causino condizioni di gara o, nel peggiore dei casi, che le uscite di qualsiasi circuito il cui ingresso possa aver avuto una condizione di gara non siano Usato.
supercat

Penso che valga la pena notare che c'era un computer completamente asincrono costruito da Jacek Karpiński che si chiamava KAR-65. Purtroppo non riesco a trovare nulla in inglese.
elmo,

6

Immagina di avere un numero intero a 8 bit inviato dalla memoria a un ALU per un calcolo e (almeno per questo esempio) che il circuito di memoria fornisce i segnali sulle 8 linee di dati prima che l'ALU li richieda e in tempi leggermente diversi.

L'uso di un orologio qui garantirebbe che le 8 righe di dati mantengano il valore corretto per l'intero rappresentato per un ciclo di clock e che l'ALU "raccolga" quei dati all'interno dello stesso ciclo di clock.

Mi rendo conto che probabilmente questa non era la migliore descrizione, essenzialmente senza un orologio che garantisse la coerenza dei dati sarebbe molto più difficile di quanto valga la pena qualsiasi aumento possibile della velocità, si verificherebbero molti problemi di condizioni di gara.


6

Un circuito come un'unità logica aritmetica prenderà un paio di numeri come input e produrrà un numero come risultato. Può garantire che entro un certo periodo di tempo, tutti i bit dell'uscita avranno raggiunto i loro stati finali corretti, ma l'effettivo tempo di validità dei bit di uscita potrebbe variare considerevolmente in base a una varietà di fattori.

Sarebbe possibile costruire un ALU con un input "valido" e un output "valido" e specificare che purché l'input "valido" sia basso per un periodo di tempo sufficiente prima che venga eseguito un calcolo, e gli input di dati contengano il valori desiderati prima che l'ingresso "valido" diventi alto, l'uscita "valida" non aumenterà fino a quando i bit di uscita non saranno effettivamente corretti. Un tale progetto richiederebbe probabilmente circa il doppio dei circuiti rispetto a un ALU convenzionale [in pratica dovrebbe tenere traccia del fatto che ogni bit fosse "noto" come zero o "noto" come uno; il suo output "valido" diventerebbe vero una volta che lo stato di ogni bit di output fosse noto].

A peggiorare le cose, consentire a quelle parti di una CPU che sarebbero in grado di funzionare più velocemente di farlo sarà utile solo se non stanno aspettando tutto il tempo che parti più lente vengano recuperate. Per far sì che ciò accada, ci deve essere una logica per decidere quale parte della macchina è "avanti" in un dato momento nel tempo e selezionare una linea d'azione basata su quella. Sfortunatamente, questo tipo di decisione è una delle più difficili da prendere in modo affidabile per l'elettronica. Decidere in modo affidabile quale dei due eventi è accaduto per primo è generalmente facile solo se si può garantire che non ci saranno mai "chiamate ravvicinate". Supponiamo che un sequencer di memoria stia gestendo una richiesta dall'unità di elaborazione n. 1 e che l'unità n. 1 abbia un'altra richiesta in sospeso successivamente. Se l'unità # 2 invia una richiesta prima che la prima richiesta sia completata, l'unità di memoria dovrebbe gestirla; altrimenti dovrebbe gestire la richiesta successiva dall'unità n. 1. Sembrerebbe un design ragionevole, ma finisce per essere sorprendentemente problematico. Il problema è che se c'è un momento nel tempo tale che una richiesta ricevuta prima di quel momento che verrà elaborata immediatamente e una richiesta ricevuta dopo quella dovrà attendere, il tempo necessario per determinare se una richiesta supera la scadenza sarà approssimativamente inversamente proporzionale alla differenza tra il momento in cui la richiesta è stata ricevuta e la scadenza. Il tempo richiesto dall'unità di memoria per determinare che una richiesta da # 2 superi la scadenza di un secondo potrebbe superare sostanzialmente il tempo che sarebbe stato necessario per soddisfare una seconda richiesta dall'unità # 1, ma l'unità non può servire richiedere fino a quando non decide quale per primo servire.

Far funzionare tutto da un clock comune non solo elimina la necessità che i circuiti determinino quando l'output di un calcolo è valido, ma consente anche di eliminare le "chiamate chiuse" di temporizzazione. Se tutto nel sistema funziona con un clock di 100 Mhz, nessun segnale cambia in risposta a un orologio fino a 1 ns dopo il limite dell'orologio e tutto ciò che accadrà in risposta a un fronte dell'orologio avviene entro 7 ns, quindi tutto ciò che accadrà prima di un un particolare fronte di orologio "vincerà" di almeno 3 ns, e tutto ciò che non accadrà fino a quando dopo un bordo di un orologio "perderà" di almeno 1 ns. Determinare se un segnale varia prima o dopo l'orologio, quando è garantito che non sia "vicino", è molto più facile che determinare quale dei due segnali a tempo arbitrario si verifica per primo.


4

I sistemi digitali possono essere sincroni o asincroni . Sui sistemi asincroni, l'output può cambiare in qualsiasi momento, diverso dai sistemi sincroni, che dipendono dall'orologio per cambiare i suoi output.

La maggior parte dei sistemi digitali sono sincroni (anche se possono avere parti asincrone) perché il progetto e l'analisi dei difetti possono essere eseguiti con maggiore facilità, poiché le uscite possono cambiare solo con l'orologio.

Ho praticamente copiato questo da Digital Systems: Principles and Applications, 10th edition by R. J. Tocci et al.


3

Bene, se stai progettando un sistema sincrono, hai una frequenza di clock target e progetti la logica per completare tutti i calcoli durante un ciclo entro un periodo di clock. Ciò significa anche che è necessario incorporare un margine di sicurezza per consentire varie condizioni, come bassa tensione di alimentazione, alta temperatura e un chip "lento". I chip sincroni sono progettati in modo tale che il percorso logico più lungo (calcolo più lento) finisca in tempo in tutte queste condizioni avverse. Di conseguenza, quando le condizioni non sono terribili, avrai molto più tempo / margine tra quando la logica completa il suo funzionamento e l'orologio successivo blocca il risultato. Poiché (di solito) non è possibile modificare la frequenza di clock, si perde questa velocità.

Ci sono completamente paradigmi logici asincrone che esistono, per esempio uno che ho familiarità con la logica è NULL convenzione. Utilizzando ampi tratti per descrivere ciò che sta accadendo, il circuito logico è in grado di identificare quando un calcolo è stato completato ed è in grado di creare in modo efficace i propri segnali "clock". Ciò consente al circuito di funzionare il più velocemente possibile e presenta alcuni vantaggi in termini di potenza e EMI. Sfortunatamente, paghi una penalità per la natura asincrona in termini di densità del design e prestazioni al top. Inoltre, mentre gli strumenti software per la progettazione e la convalida sincroni sono maturi, gran parte della progettazione e della convalida per i progetti asincroni è ancora manuale, con il risultato di un maggiore sforzo richiesto per la progettazione e la costruzione di un progetto asincrono.

Ciò trascura anche completamente il caso in cui a volte sia necessario un orologio per un'applicazione specifica come riferimento temporale. Ad esempio, la scheda audio non può funzionare in modo asincrono perché deve aggiornare l'ADC o il DAC a una frequenza di campionamento specifica e precisa o l'audio verrà distorto.


1

Se nessun orologio fosse incorporato, le porte cambieranno il più velocemente possibile ogni volta che viene dato il comando, quindi perché non aumenterebbe la velocità del computer e perché vengono usati gli orologi?

Per dirla semplicemente: perché gli esseri umani non sono esseri super-intelligenti e devono prendere scorciatoie per rendere possibile la progettazione di circuiti da miliardi di elementi.

Quando i nostri signori della macchina salgono, possono benissimo sbarazzarsi del tempo, superare minuziosi come fare un circuito senza orologio producibile nonostante le variazioni di processo e trarre vantaggio da alcuni guadagni di velocità.

Espandersi un po ': le cose discrete e prevedibili sono più facili da analizzare e progettare razionalmente. Come enorme vantaggio aggiunto, si auto-correggono (in questo caso, i tempi si auto-correggono). Questo è il motivo per cui usiamo la logica digitale in primo luogo. (Allo stesso modo, nella programmazione, usiamo spesso numeri interi anziché strutture di controllo familiari, a virgola mobile invece di goto-spaghetti, e linguaggi con poche regole chiare invece di linguaggi molto "flessibili" in cui non si è mai abbastanza sicuri di cosa accadrà fino a quando il codice non viene eseguito.)


Anche oltre al fatto che la logica sincrona è più facile da progettare, un computer che funziona con un clock a 10 MHz sarà generalmente progettato in modo tale che ovunque debba determinare se l'evento X si verifica prima di Y, uno o entrambi gli eventi verranno ritardati come necessario avere una relazione particolare con l'orologio principale in modo che gli eventi non si verifichino mai contemporaneamente. Inoltre, nei pochi casi in cui sarebbe possibile la possibilità di un'azione simultanea, sarà accettabile aggiungere un ritardo fisso a due o tre cicli per forzare uno o entrambi i segnali in una relazione di clock fissa.
supercat

Se il design fosse asincrono, si potrebbe scoprire che un 99% casuale di istruzioni prende 5 ns, lo 0,9% prende casualmente 10 ns, lo 0,09% prende 30 ns, 0,009% 100 ns, 0,0009% 300 ns, 0,00009% 1 °, 0,000009% 3 °, ecc. Senza garanzia ferma su quanto tempo il sistema potrebbe impiegare per risolvere un'ambiguità temporale. Nella maggior parte dei casi, avere prestazioni non ottimali ma prevedibili è meglio delle prestazioni che sono in media più veloci ma presentano variazioni imprevedibili a volte gravi.
supercat

@supercat 1) Non è possibile progettare un circuito in cui non si verificano mai eventi simultanei? (almeno se gli ingressi sono sufficientemente regolari) 2) Non è possibile progettare un circuito in cui non importa se si verificano eventi simultanei?
Aleksandr Dubinsky,

Se è noto il tempo relativo di due eventi, uno potrebbe impedire che si verifichino contemporaneamente ritardando l'uno o l'altro. Più accuratamente è noto il loro tempo relativo, minore sarà il ritardo richiesto. Se il relativo timing non è noto, è possibile risolvere due eventi che potrebbero accadere simultaneamente in un'indicazione di ciò che è accaduto per primo, ma per ridurre al minimo il comportamento nel caso peggiore, è necessario accettare alcuni compromessi piuttosto gravi nel comportamento nel caso migliore. I compromessi che sarebbero necessari per far funzionare un computer senza clock sarebbero peggiori dell'uso di un orologio.
supercat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.