Perché i microcontrollori hanno bisogno di un orologio


31

Perché le istruzioni devono essere elaborate a intervalli di tempo prestabiliti (cioè con l'uso di un orologio)? Non possono essere eseguiti in sequenza - immediatamente dopo il completamento dell'istruzione precedente?

Un'analogia per la necessità di orologi nei microcontrollori si rivelerebbe particolarmente utile.


6
Esistono processori asincroni.
Leon Heller,

6
Come definiresti "quando l'istruzione precedente è stata completata"? Se ci pensate, dovreste sapere quando è stata completata "L'istruzione precedente è stata completata?" il calcolo era stato completato e quando il calcolo "Ha completato l'istruzione precedente?" è stato completato il calcolo "e ........ È molto più semplice dire" Ci vogliono 0,4 nanosecondi per completare un'istruzione ".
user253751

4
Le porte logiche non dicono quando hanno finito. Il segnale è semplicemente indeterminato per un certo periodo di tempo prima di stabilirsi su un valore stabile. In sostanza, l'orologio consente al progetto di sapere quando la logica si è stabilita su un valore corretto. Strategie avanzate come le microistruzioni aiutano rompendo le istruzioni della macchina in pezzi più piccoli, quindi un ADD può prendere 4 tick di clock, mentre l'accesso alla memoria potrebbe richiedere centinaia di tick.

Risposte:


31

Un esempio o due illustrativi possono essere d'aiuto qui. Dai un'occhiata al seguente ipotetico circuito:

schematico

simula questo circuito - Schema creato usando CircuitLab

Supponiamo di iniziare sia A che B sono alti (1). L'output di AND è quindi 1 e poiché entrambi gli input per XOR sono 1, l'output è 0.

Gli elementi logici non cambiano il loro stato all'istante - c'è un piccolo ma significativo ritardo di propagazione quando viene gestita la modifica dell'input. Supponiamo che B diventi basso (0). XOR vede immediatamente il nuovo stato sul suo secondo input, ma il primo input vede ancora il 'vecchio' 1 dal gate AND. Di conseguenza, l'uscita aumenta brevemente, ma solo fino a quando il segnale non si propaga attraverso la porta AND, rendendo entrambi gli ingressi di XOR bassi e causando nuovamente una riduzione dell'uscita.

Il problema tecnico non è una parte desiderata del funzionamento del circuito, ma problemi del genere si verificano ogni volta che c'è una differenza nella velocità di propagazione attraverso diverse parti del circuito, a causa della quantità di logica, o anche solo della lunghezza dei fili .

Un modo davvero semplice per gestirlo è quello di mettere un flip-flop innescato sull'uscita della tua logica combinatoria, in questo modo:

schematico

simula questo circuito

Ora, tutti i glitch che si verificano sono nascosti dal resto del circuito dal flipflop, che aggiorna il suo stato solo quando l'orologio passa da 0 a 1. Finché l'intervallo tra i bordi di clock in aumento è abbastanza lungo da consentire ai segnali di propagare attraverso le catene logiche combinatorie, i risultati saranno attendibilmente deterministici e privi di glitch.


6
Grazie per aver effettivamente menzionato il ritardo di propagazione quasi immediatamente, che è probabilmente il 99% della risposta.

1
Un esempio funzionante di ciò in azione può essere osservato sulle periferiche di I / O digitali dei microcontrollori (e altri). Se si utilizzano i registri PORT per aggiornare le uscite (anziché il LATCH) utilizzando le istruzioni consecutive di lettura-modifica-scrittura, è possibile leggere lo stato del pin mentre sta cambiando stato. Vedere la sezione 10.2.2 della documentazione dsPIC33E / 24E per maggiori dettagli.
Evil Dog Pie,

Capisco bene che i circuiti sequenziali hanno un bisogno critico di clock non solo perché avranno problemi, ma anche perché, a causa di questo problema, alcuni flip-flop potrebbero finire per memorizzare il valore sbagliato?
Lakesare

20

Sento che molte di queste risposte non stanno esattamente colpendo la domanda principale. Il microcontrollore ha un orologio semplicemente perché esegue (ed è guidato da) una logica sequenziale .

Nella teoria dei circuiti digitali, la logica sequenziale è un tipo di circuito logico la cui uscita dipende non solo dal valore attuale dei suoi segnali di ingresso ma dalla sequenza degli ingressi passati, dalla cronologia degli ingressi. Ciò è in contrasto con la logica combinatoria, il cui output è una funzione del solo input presente. Cioè, la logica sequenziale ha stato (memoria) mentre la logica combinatoria no. O, in altre parole, la logica sequenziale è la logica combinatoria con la memoria.

Anche:

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.


15

Risposta breve: i manager vogliono una PROVA semplice, testabile, prima di impegnarsi in milioni (o più) di dollari per un progetto. Strumenti attuali, semplicemente non danno risposte asincrone a quelle risposte.

I microcomputer e i microcontrollori utilizzano in genere uno schema di clock per assicurare il controllo della temporizzazione. Tutti gli angoli del processo devono mantenere i tempi attraverso tutti gli effetti di tensione, temperatura, processo, ecc. Sulle velocità di propagazione del segnale. Ci sono no porte logiche correnti cambiano istantaneamente: ciascuna porta commuta in funzione della tensione viene fornita, l'azionamento ottiene, il carico guida, e le dimensioni dei dispositivi che vengono utilizzati per rendere, (e, naturalmente, il nodo di processo (dimensione del dispositivo) in cui è realizzato e quanto velocemente quel processo sta effettivamente eseguendo --- QUESTO passa attraverso il fab). Per arrivare alla commutazione "istantanea", dovresti usare la logica quantistica e questo presuppone che i dispositivi quantistici possano passare all'istante; (Non sono sicuro).

La logica con clock fa PROVARE che i tempi sull'intero processore funzionano attraverso la tensione, la temperatura e le variabili di elaborazione previste. Ci sono molti strumenti software disponibili che aiutano a misurare questo timing, e il processo netto è chiamato "chiusura del timing". L'orologio può (e, nella mia esperienza, non ) prendere da qualche parte tra 1/3 a 1/2 della potenza utilizzata in un microprocessore.

Quindi, perché non un design asincrono? Esistono pochi, se non nessuno, strumenti di chiusura dei tempi per supportare questo stile di progettazione. Esistono pochi, se non nessuno, strumenti automatici di localizzazione e percorso in grado di gestire e gestire un grande progetto asincrono. Se non altro, i gestori NON approvano nulla che non abbia una PROVA semplice, generata da computer, di funzionalità.

Il commento secondo cui il design asincrono richiede "una tonnellata di" segnali di sincronizzazione, che richiedevano "molti più transistor", ignora i costi di routing e sincronizzazione di un clock globale e il costo di tutti i flip-flop richiesti dal sistema di clock. I progetti asincroni sono (o dovrebbero essere) più piccoli e più veloci delle loro controparti con clock. (Uno prende semplicemente il percorso del segnale ONE più lento e lo utilizza per inviare un segnale "pronto" alla logica precedente).

La logica asincrona è più veloce, perché non deve mai aspettare un orologio che doveva essere esteso per un altro blocco da qualche altra parte. Ciò è particolarmente vero nelle funzioni da registro a logica da registrare. La logica asincrona non presenta più problemi di "impostazione" e "blocco", poiché solo le strutture (registri) finali hanno tali problemi, al contrario di un insieme di logica pipeline con flip-flop intervallati nello spazio che la propagazione della logica ritarda al clock confini.

Si può fare? Certamente, anche su un miliardo di progetti di transistor. È più difficile? Sì, ma solo perché PROVARE che funziona su un intero chip (o anche sul sistema), è molto più coinvolto. Ottenere i tempi sulla carta è ragionevolmente diretto per ogni blocco o sottosistema. Ottenere il controllo della temporizzazione in un sistema di percorso e percorso automatizzato è molto più difficile, poiché gli strumenti NON sono impostati per gestire il potenziale più ampio insieme di vincoli di temporizzazione.

I microcontrollori hanno anche un insieme potenzialmente ampio di altri blocchi che si interfacciano a segnali esterni (relativamente) lenti, aggiunti a tutta la complessità di un microprocessore. Ciò rende i tempi un po 'più coinvolti, ma non molto.

Il raggiungimento di un meccanismo di "blocco" del "primo arrivato" è un problema di progettazione del circuito, e ci sono modi noti per affrontarlo. Le condizioni di gara sono un segno di 1). cattiva pratica di progettazione; o 2). segnali esterni che entrano nel processore. Il clocking in realtà introduce una condizione di competizione segnale-orologio che è correlata alle violazioni di "impostazione" e "blocco".

Personalmente, non capisco come un progetto asincrono possa entrare in una situazione di stallo o in qualsiasi altra condizione di gara. Questa potrebbe essere la mia limitazione, ma a meno che non accada quando i dati entrano nel processore, non dovrebbe MAI essere possibile in un sistema logico ben progettato, e anche allora, poiché può accadere quando i segnali entrano, si progetta di gestirlo.

(Spero che aiuti).

Detto questo, se hai i soldi ...


Certo, dipende dal chip che stai costruendo - ad esempio, l'hardware di rete neurale tende ad essere asincrono, perché in realtà è la cosa più semplice - la cosa che emulano è asincrona . Costruiamo principalmente hardware sequenziale sincrono, perché il software / firmware è anche per lo più sincrono e sequenziale (specialmente nella parte "sequenziale" - il codice asincrono viene usato sempre più comunemente). In effetti, è molto più facile avvolgere la testa attorno a un sistema sequenziale e sincrono, specialmente quando la maggior parte della programmazione viene eseguita in linguaggi che incoraggiano il codice sequenziale.
Luaan,

Gli eventi nel mondo reale accadono in tempi imprevedibili. Se un dispositivo ha un pulsante e si suppone che esegua un percorso di codice se viene premuto "abbastanza presto" ed esegue un altro percorso di codice se non lo è, quindi in assenza di limitazioni quantistiche-meccaniche, tra un momento quando si preme il pulsante dove una pressione di un pulsante avverrebbe abbastanza presto da innescare il percorso del codice alternativo e un momento in cui una pressione di un pulsante sarebbe "troppo tardi", ci sarebbe un momento preciso in cui una pressione di un pulsante causerebbe un comportamento "tra" i due (ad es. causando la modifica di alcuni bit del contatore del programma ...
supercat

... ma non altri). In assenza di limitazioni quantomeccaniche, il tempo che intercorre tra l'ultimo momento in cui la spinta causerebbe il ramo e il primo momento in cui una spinta non riuscirebbe a farlo in modo pulito, potrebbe essere arbitrariamente ridotto ma non ridotto a zero. Limiti quantomeccanici possono rendere probabile che qualsiasi pressione di un pulsante accada o abbastanza prima di registrarsi o abbastanza tardi per fallire in modo pulito, ma dimostrando che non ci sarà mai uno stato quantico che consentirebbe una pressione di un pulsante nel tempo intermedio mortale sarebbe generalmente infattibile.
supercat,

L'uso della logica sincrona semplifica notevolmente l'analisi delle situazioni in cui il sistema dovrà rispondere a un evento veramente asincrono, garantendo che le condizioni di gara abbiano una probabilità molto bassa di sfuggire a una porzione molto piccola del dispositivo complessivo. Analizzare quella piccola parte del dispositivo per assicurarsi che le condizioni di gara difficilmente possano sfuggire è probabilmente un problema molto più trattabile che consentire che si verifichino condizioni di gara quasi ovunque e provare ad analizzare i loro effetti per dimostrare che è improbabile che possano causare problemi.
supercat,

10

I microcontrollori devono utilizzare un orologio perché devono essere in grado di rispondere agli eventi che possono verificarsi in qualsiasi momento, anche quasi simultaneamente con altri eventi esterni o eventi generati dai controller stessi, e spesso avranno più circuiti che devono sapere se un evento X precede un altro evento Y. Potrebbe non importare se tutti questi circuiti decidono che X ha preceduto Y, oppure tutti tali circuiti decidono che X non ha preceduto Y, ma sarà spesso fondamentale che se uno qualsiasi dei circuiti decida che X ha preceduto Sì, allora tutti devono farlo. Sfortunatamente, è difficile garantire che i circuiti entro un tempo limitato raggiungano un consenso garantito sul fatto che X preceda Y o addirittura raggiungano un consenso sul fatto che abbiano raggiunto o meno un consenso. La logica sincrona può aiutare enormemente in questo.

L'aggiunta di un orologio a un circuito consente di garantire che un sottosistema non subisca alcuna condizione di competizione a meno che un ingresso al sistema non cambi in una finestra molto piccola rispetto all'orologio, e garantisce anche se l'uscita di un dispositivo viene immessa in un altro , l'output del primo dispositivo non cambierà nella finestra critica del secondo dispositivo a meno che l'ingresso al primo dispositivo non cambi all'interno di una finestra critica ancora più piccola. L'aggiunta di un altro dispositivo prima di quel primo dispositivo assicurerà che l'ingresso al primo dispositivo non cambierà in quella piccola finestra a meno che l'ingresso al nuovo dispositivo non cambi all'interno di una finestra davvero molto piccola. Da un punto di vista pratico, a meno che uno non stia deliberatamente cercando di causare un fallimento del consenso,

È certamente possibile progettare sistemi completamente asincroni che funzionano "il più velocemente possibile", ma a meno che un sistema non sia estremamente semplice, sarà difficile evitare che un progetto venga fatto scattare da una condizione di competizione. Mentre ci sono modi per risolvere le condizioni di gara senza la necessità di orologi, le condizioni di gara possono spesso essere risolte molto più rapidamente e facilmente usando gli orologi di quanto sarebbe il caso senza di essi. Sebbene la logica asincrona sia spesso in grado di risolvere le condizioni di gara più velocemente della logica con clock, le occasioni in cui non può farlo rappresentano un grave problema, soprattutto vista la difficoltà di ottenere il consenso di parti di un sistema sul fatto che abbiano raggiunto il consenso o meno. Un sistema in grado di eseguire costantemente un milione di istruzioni per sezione sarà generalmente più utile di uno che a volte può eseguire quattro milioni di istruzioni al secondo, ma potrebbe potenzialmente arrestarsi per millecondi (o più) alla volta a causa delle condizioni di gara.


Vale la pena notare che gli stati che vengono decisi possono essere ugualmente interni - come il risultato di un'operazione aritmetica. I ritardi dovuti alla lunghezza della linea possono far sì che una parte dell'MCU veda il risultato - e, senza un orologio, che agisca su di esso - prima di altre parti.
Nick Johnson,

@NickJohnson: se la sequenza in cui vengono eseguite le operazioni non dipende mai da cose che non sono ancora state calcolate, tali problemi possono essere risolti senza difficoltà se ogni sezione come una ALU ha input "validi" e un output "valido", e cose può essere organizzato in modo da avvenire in sequenza deterministica. Il punto in cui le ruote cadono è quando l'ordine in cui si verificano le operazioni dovrebbe dipendere dalla tempistica (ad es. Se si hanno un numero di operazioni parallele che devono utilizzare un bus di memoria condiviso e due di esse emettono richieste quasi simultanee, di cui l'arbitrato dovrebbe andare per primo ...
supercat

... e quale si dovrebbe aspettare potrebbe essere intrattabile. Se uno decide in anticipo quale andrà per primo, tali problemi possono essere evitati, ma se si scopre che l'unità designata per andare prima non è pronta fino a molto tempo dopo l'altra, le prestazioni potrebbero soffrire gravemente di conseguenza .
supercat

Ecco perché andare nello spazio è così difficile, le probabilità cambiano sfavorevolmente.
Magic Smoke,

6

Le MCU sono solo un esempio molto complesso di un circuito logico sequenziale sincrono. La forma più semplice è probabilmente il D-flip-flop con clock (D-FF), ovvero un elemento di memoria sincrono a 1 bit.

Esistono elementi di memoria asincroni, ad esempio il D-latch, che è (in un certo senso) l'equivalente asincrono del D-FF. Un MCU non è altro che un mucchio di milioni di tali elementi di memoria di base (D-FF) incollati insieme a tonnellate di porte logiche (sto semplificando eccessivamente).

Ora arriviamo al punto: perché le MCU usano D-FF invece di D-latch come elementi di memoria internamente? È essenzialmente per affidabilità e facilità di progettazione: i D-latch reagiscono non appena i loro ingressi cambiano e le loro uscite vengono aggiornate il più rapidamente possibile. Ciò consente cattive interazioni indesiderate tra le diverse parti di un circuito logico (circuiti di feedback e razze non intenzionali). La progettazione di un circuito sequenziale complesso utilizzando blocchi asincroni è intrinsecamente più difficile e soggetta a errori. I circuiti sincroni evitano tali trappole limitando il funzionamento dei blocchi costitutivi agli istanti di tempo in cui vengono rilevati i bordi dell'orologio. Quando arriva il fronte, un circuito logico sincrono acquisisce i dati ai suoi ingressi, ma non aggiorna ancora i suoi output. Non appena vengono acquisiti gli ingressi, le uscite vengono aggiornate. Questo evita il rischio che un segnale di uscita sia ricondotto a un ingresso che non è stato completamente acquisito e rovina le cose (detto semplicemente).

Questa strategia di "disaccoppiamento" dell'acquisizione dei dati di input dall'aggiornamento degli output consente tecniche di progettazione più semplici, che si traducono in sistemi più complessi per un determinato sforzo di progettazione.


5

Quello che stai descrivendo si chiama logica asincrona . Può funzionare e quando lo fa è spesso più veloce e consuma meno energia della logica sincrona (con clock). Sfortunatamente, la logica asincrona presenta alcuni problemi che ne impediscono l'ampio utilizzo. Il principale che vedo è che ci vogliono molti più transistor per implementare, dal momento che hai bisogno di una tonnellata di segnali di sincronizzazione indipendenti. (I microcontrollori svolgono molto lavoro in parallelo, così come le CPU.) Questo aumenterà i costi. La mancanza di buoni strumenti di progettazione è un grande ostacolo iniziale.

I microcontrollori probabilmente avranno sempre bisogno di orologi poiché le loro periferiche di solito devono misurare il tempo. Timer e PWM funzionano a intervalli di tempo fissi, le frequenze di campionamento ADC influiscono sulla loro larghezza di banda e i protocolli di comunicazione asincroni come CAN e USB necessitano di clock di riferimento per il ripristino del clock. Di solito vogliamo che le CPU funzionino il più velocemente possibile, ma non è sempre il caso di altri sistemi digitali.


3

In realtà stai vedendo l'MCU come un'unità completa, ma la verità è che è fatta di porte diverse e logiche TTL e RTL, spesso array FF, tutte hanno bisogno del segnale di clock individualmente,

per essere più specifici pensa semplicemente all'accesso a un indirizzo dalla memoria, questo semplice compito può implicare operazioni multiple come rendere il BUS disponibile per le linee dati e le linee indirizzo.
Il modo migliore per dire è che le istruzioni stesse si presentano in piccole unità operative che richiedono cicli di clock, combinate per cicli macchina , che tengono conto di varie proprietà MCU come la velocità (FLOPS ** in MCU complicate), il rivestimento del tubo, ecc.

Risposta a Commento di OP

Per essere molto precisi, vi faccio un esempio che esiste un chip chiamato ALE(Abilitazione del latch dell'indirizzo) di solito allo scopo di multiplexare il bus dell'indirizzo inferiore per trasmettere sia l'indirizzo che i dati sugli stessi pin, usiamo un oscillatore (l'intel 8051 utilizza l'oscillatore locale 11.059MHz come clock) per recuperare l'indirizzo e quindi i dati.

Come forse saprai che le parti di base dell'MCU sono CPU, ALU e registro interno e così via, la CPU (controllando s / g) invia l'indirizzo a tutti i pin di indirizzo 16 in caso di 8051, ciò si verifica all'istante di temporizzazione T1 e dopo l'indirizzo è la matrice corrispondente di memorizzazione del condensatore (carica come segnale) ( * mappatura della memoria * ) attivata e selezionata.

Dopo la selezione, viene attivato il segnale ALE, ovvero il pin ALE viene elevato al clock successivo, ad esempio T2 (di solito un segnale alto ma cambia secondo la progettazione dell'unità di elaborazione ), dopo che i bus dell'indirizzo inferiore si comportano come linee di dati e i dati vengono scritti o letti (a seconda dell'uscita sul pin RD / WR dell'MCU).
Puoi vedere chiaramente che tutti gli eventi sono in sequenza tempestiva

Cosa accadrebbe se non usassimo il clock Quindi dovremo usare il metodo di clock asincrono ASQC questo renderebbe ogni gate dipendente dall'altro e potrebbe causare guasti hardware, Inoltre questo uccide il rivestimento del tubo delle istruzioni impossibile, dipendente da lungo e irregolare tempo per completare l'attività.
Quindi è qualcosa di indesiderabile


Questo tipo di senso ha senso. Ma perché questi vari scomparti dell'MCU necessitano del segnale di clock per funzionare? Cosa teoricamente accadrebbe se non usassero un orologio?
MR

1
@Martin, i gate logici cambiano stato immediatamente quando cambia il loro input. La logica sequenziale con clock valuta solo i suoi input durante un evento di clock. Questo è il principio di base che guida i circuiti di memoria digitale. Ci dà la possibilità di spostare selettivamente i dati da un luogo all'altro con un controllo assoluto, consentendo la creazione di hardware per scopi generici che può essere programmato tramite softaware per fare - bene, qualsiasi cosa.
Sean Boddy,

3
@SeanBoddy: le porte logiche non si attivano immediatamente, c'è un breve ritardo che è visibile su un oscilloscopio. Se non utilizzassimo un orologio, le differenze di questi tempi tra i componenti potrebbero causare condizioni di gara che producono risultati errati.
BlueRaja - Danny Pflughoeft,

@BlueRaja - bene buone gumdrops golose, che ne dici. Forse tornerò attraverso 4 anni di note sull'elettronica di potenza e 8 anni di addestramento della marina per scoprire dove mi sono perso quella cosa.
Sean Boddy,

2

Il problema fondamentale che un orologio risolve è che i transistor non sono realmente dispositivi digitali: usano livelli di tensione analogici sugli ingressi per determinare l'uscita e impiegano un tempo limitato per cambiare stato. A meno che, come è stato menzionato in un'altra risposta, si arrivi a dispositivi quantistici, ci sarà un periodo di tempo in cui l'ingresso passa da uno stato a un altro. Il tempo necessario è influenzato dal caricamento capacitivo, che sarà diverso da un dispositivo all'altro. Ciò significa che i diversi tranisistor che compongono ciascuna porta logica risponderanno in tempi leggermente diversi. L'orologio viene utilizzato per "bloccare" le uscite dei dispositivi componenti una volta che si sono stabilizzate tutte.

Come analogia, considerare il livello di trasporto delle comunicazioni SPI (Serial Peripheral Interface). Una tipica implementazione di questo utilizzerà tre linee: Data In, Data Out e Clock. Per inviare un byte su questo livello di trasporto, il master imposterà la sua linea Data Out e affermerà la linea Clock per indicare che la linea Data Out ha un valore valido. Il dispositivo slave campionerà i suoi dati in linea solo quando richiesto dal segnale Clock. Se non vi fosse alcun segnale di clock, come farebbe lo slave a sapere quando campionare la linea Data In? Potrebbe campionarlo prima che la linea fosse impostata dal master o durante la transizione tra stati. Protocolli asincroni, come CAN, RS485, RS422, RS232, ecc. Risolvono questo problema utilizzando un tempo di campionamento predefinito, bit rate fisso e bit di frame (overhead).

In altre parole, c'è una specie di conoscenza comune per determinare quando tutti i transistor in una serie di porte hanno raggiunto il loro stato finale e l'istruzione è completa. Nel puzzle (100 occhi blu) indicato nel link sopra, e spiegato in dettaglio in questa domanda su Maths Stack Exchange, l '"oracolo" funge da orologio per le persone sull'isola.

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.