Come possiamo essere sicuri che i computer non cambieranno mai accidentalmente uno 0 con un 1?


63

Ho letto un po 'della costruzione di un computer digitale in Shocken / Nisan: The Elements of Computing Systems . Ma questo libro non dice nulla su alcuni aspetti elettrici nei computer, per esempio: spesso si dice che 0 e 1 sono rappresentati dalla tensione, se la tensione è nell'intervallo [0, 0,9), allora è uno 0. Se la tensione è nell'intervallo [0.9, 1.5), quindi è un 1 (le tensioni possono variare, sto solo facendo un esempio).

Ma non ho mai letto ciò che mantiene "ben educate" le tensioni elettriche in modo che uno 0 non possa mai accidentalmente diventare un 1 a causa della volatilità elettrica [1] all'interno del computer. Forse è possibile che la tensione sia molto vicina allo 0,9, quindi cosa si fa per evitare che passi la soglia?

[1]: Supponendo che esista.


7
La corrente non è mai molto vicino allo 0,9, perché nulla rende mai la corrente molto vicino allo 0,9.
user253751

7
Perché le cose sono progettate per non generare correnti molto vicine allo 0,9. Potresti anche chiedere "Ho una solida prova empirica che il mio laptop non è carico di 50 gigavolt; perché non lo è?" Semplicemente perché non c'è motivo per cui sarebbe.
user253751

13
Nitpick: la maggior parte della logica digitale utilizza tensioni, non correnti, per rappresentare stati logici.
duskwuff,

11
prove aneddotiche: nel 2011 sono stato scambiato un po 'in un file su un hdd che funzionava benissimo da 5 anni.
PlasmaHH,

7
Questi interruttori accidentali sono sfruttabili. La spiegazione di Google è un caso interessante per questo. Rende sicuramente la sicurezza molto più dura quando la vera API per "Imposta bit X su 1" è "Imposta bit X su 1 e talvolta imposta accidentalmente il bit Y su 1". Questo diventa anche molto comune nel caso di macchine overcloccate. Ricordo che una società ha effettivamente aggiunto un sacco di calcoli (ogni frame) con risultati noti per vedere se l'hardware era abbastanza affidabile per eseguire il gioco.
Brian,

Risposte:


100

Si dice spesso che 0 e 1 sono rappresentati dalla tensione, se la tensione è nell'intervallo [0, 0,9), allora è uno 0. Se la tensione è nell'intervallo [0,9, 1,5), allora è un 1 ( le tensioni possono variare, sto solo facendo un esempio).

In una certa misura, hai principalmente creato questo problema usando un esempio non realistico. C'è un divario molto più grande tra basso logico e alto nei circuiti reali.

Ad esempio, la logica CMOS a 5 V emetterà 0-0,2 V per la logica bassa e 4,7-5 V per la logica alta e accetterà costantemente qualsiasi cosa inferiore a 1,3 V o superiore a 3,7 V. Cioè, ci sono margini molto più stretti sulle uscite rispetto agli ingressi, e c'è un enorme divario tra le tensioni che potrebbero essere usate per segnali logici bassi (<1.3 V) e quelli che potrebbero essere usati per logici alti (> 3.7 V) . Tutto questo è specificamente progettato per tenere conto del rumore e per prevenire il tipo di commutazione accidentale che stai descrivendo.

Ecco una rappresentazione visiva delle soglie per una varietà di standard logici, che ho preso in prestito da interfacebus.com :

Soglie a livello logico] [1]

Ogni colonna rappresenta uno standard logico e l'asse verticale è la tensione. Ecco cosa rappresenta ogni colore:

  • Arancione: le tensioni in questo intervallo vengono emesse per il livello logico alto e verranno accettate come valore logico alto.
  • Verde chiaro: le tensioni in questo intervallo saranno accettate come logiche alte.
  • Rosa / blu: le tensioni in questo intervallo non saranno interpretate in modo coerente, ma quelle nell'area rosa finiranno per essere interpretate come alte e quelle nell'area blu saranno generalmente basse.
  • Verde bluastro: le tensioni in questo intervallo saranno accettate come basse logiche.
  • Giallo: le tensioni in questo intervallo vengono emesse per il livello logico basso e verranno interpretate come valore logico basso.

4
Buona risposta, anche se penso che potrebbe essere più completa: copri solo l'immunità (o meglio, la protezione contro) il rumore. Esistono molti altri meccanismi responsabili degli errori digitali e altrettanti mezzi di protezione. La cosa buona è che non ho coperto l'immunità al rumore nella mia risposta :)
Mister Mystère,

1
@ MisterMystère È vero! Tuttavia, la correzione degli errori è un argomento piuttosto vasto, e non ho potuto affrontarlo in una sola risposta.
duskwuff,

1
@ MisterMystère: "rumore" è un termine che copre tutti i tipi di fonti di errore stocastiche. I tuoi esempi di interferenza EM e radiazione cosmica rientrano nella categoria del "rumore". L'unica altra causa di errore digitale è deterministica, che chiamiamo "bug". Ma questa domanda riguarda solo gli errori accidentali.
Ben Voigt,

Nel tuo terzo proiettile, credo che tu abbia cambiato i colori o la logica. il rosa dovrebbe essere basso e il blu dovrebbe essere alto.
Guill,

@Guill Huh? La regione rosa è sopra V_T, quindi verrà trattata in modo sgradevole come alta logica.
duskwuff,

65

Non possiamo. Stiamo solo diminuendo la probabilità di errori aggiungendo controlli ai dati. A seconda del tipo di dati da controllare, può essere eseguito tramite hardware o software e può assumere qualsiasi forma da semplici bit di checksum in flussi seriali a macchine a stati ciclici che consentono di eseguire solo transizioni specifiche in un determinato momento.

Ma è un circolo vizioso, no? Come possiamo garantire che il circuito incaricato del controllo dei dati non sia influenzato dagli stessi disturbi dei dati e dare un falso positivo? Aggiungine un altro? Puoi vedere come questo può diventare piuttosto costoso per un guadagno molto piccolo alla fine.

La domanda è: quanto vuoi che sia affidabile il tuo sistema? I satelliti, che incorporano alcuni dei sistemi informatici più affidabili disponibili, ad esempio a volte ricorrono alla ridondanza incrociata di sistemi non identici e ai voti: tre computer diversi eseguono lo stesso algoritmo codificato da tre persone diverse in tre modi diversi, e se uno dei computer dà un risultato diverso dagli altri due, viene riavviato (e se succede di nuovo, isolato). Ma di nuovo, se due computer sono difettosi contemporaneamente, il computer sbagliato verrà riavviato / isolato. Di solito, la "ridondanza a freddo" è sufficiente: vengono implementati un circuito primario e uno secondario, il primario funziona fino a quando viene rilevato un errore da una sorta di circuito di monitoraggio (non protetto) e il circuito secondario viene scambiato. Se si tratta solo di un errore in RAM, il codice può essere rieseguito per aggiornare i dati. Devi solo decidere saggiamente dove tracciare la linea, è impossibile realizzare un circuito di rilevamento errori affidabile al 100%.

I satelliti (specialmente ad alta quota o nella cintura di Van Allen) e i computer nelle centrali nucleari o in altri ambienti radioattivi sono particolarmente soggetti a (parola chiave :) I ribaltamenti o i latchup di singoli eventi a causa di particelle ad alta energia che si scontrano o vengono assorbite dai reticoli cristallini dei semiconduttori . I libri che coprono questi campi saranno sicuramente la soluzione migliore. La vernice viene degradata dai danni da spostamento dovuti alle radiazioni, quindi è del tutto comprensibile che anche i semiconduttori possano essere danneggiati o turbati dalle radiazioni in arrivo.


2
Non sono sicuro che tu abbia intenzione di scrivere "circolo vizioso", ma "circolo viscoso" sembra altrettanto divertente.
svavil,

1
In realtà era un circolo visivo ma un circolo viscoso mi ha fatto ridere :)
Mister Mystère,

1
Sono necessari solo i log n bit per individuare e correggere un errore bit singolo in n bit.
Thorbjørn Ravn Andersen,

1
Questo mi ricorda una recente interrogazione sulla scrittura di programmi per tenere conto di errori hardware nei computer esposti a composti radioattivi: stackoverflow.com/questions/36827659/...
Pharap

Non sapevo della cosa dei satelliti che tre diversi "gruppi" (o più) stanno codificando la stessa cosa in modo diverso. Sembra fantastico :)
kalmanIsAGameChanger

33

I turbamenti di singoli eventi non sono più una questione di spazio né di aerei; li vediamo accadere in superficie da oltre un decennio, forse due ormai.

Come accennato però, almeno nelle applicazioni spaziali ci occupiamo di sconvolgimenti usando il triplo voto (ogni bit è davvero tre, e un voto dei due terzi vince, quindi se ce n'è uno che cambia gli altri due lo copriranno). E poi ECC o EDAC , con scrubber che attraversano la RAM ad una velocità superiore alla velocità di aggiornamento prevista per singolo evento per eliminare i turbamenti di singolo evento (quelli che spingono effettivamente i due terzi a votare in modo errato).

Quindi c'è la dose totale; nel tempo il materiale diventa troppo radioattivo per funzionare, quindi usi abbastanza materiale per superare la vita del veicolo. Non qualcosa di cui ci preoccupiamo in superficie normalmente. (E latchup) L'uso di tre / più insiemi di logica in parallelo è / è stato un modo per provare a non dover usare la tradizionale tecnologia rad-hard e, bene, puoi scoprire quanto bene stia funzionando.

Le persone che erano abituate a fare cose per lo spazio si sono ritirate per la maggior parte o sono andate avanti, quindi ora abbiamo un certo numero di programmi che fanno trash nello spazio. O trattando lo spazio come prodotti legati alla terra, invece di provare a fare tutto il lavoro e avere un rientro e un burnup controllati, ora ci aspettiamo che una certa quantità di spazio venga spazzata via da ogni costellazione.

Vediamo sconvolgimenti in superficie. Qualsiasi memory stick ( DRAM ) che acquisti ha un FIT, Failures In Time e qualsiasi chip con RAM (tutti i processori, molti altri), avrà anche una specifica FIT (per i blocchi RAM (SRAM)). La RAM è più densa e utilizza transistor più piccoli, quindi è più suscettibile ai disturbi, creati internamente o esterni. La maggior parte delle volte non ci accorgiamo o ci preoccupiamo perché la memoria che usiamo per i dati, la visione di un video, ecc. Viene scritta, letta e non riutilizzata prima che rimanga abbastanza a lungo da essere sconvolta. Parte della memoria, come quella che contiene un programma o il kernel, è più rischiosa. Ma da tempo siamo abituati all'idea di riavviare semplicemente il nostro computer o ripristinare / riavviare il nostro telefono (alcuni telefoni / marchi dovresti rimuovere periodicamente la batteria periodicamente). Erano questi sconvolgimenti o software difettoso o una combinazione?

I numeri FIT per il tuo singolo prodotto possono superare la vita di quel prodotto, ma prendi una server farm di grandi dimensioni, tieni conto di tutta la RAM o chip o qualsiasi altra cosa e l'MTBF passa da anni o ordini che, a giorni o ore, da qualche parte in la Fattoria. E hai ECC per coprire ciò che puoi di quelli. Quindi si distribuisce il carico di elaborazione con i failover per coprire le macchine o il software che non riescono a completare un'attività.

Il desiderio di archiviazione a stato solido e il passaggio dai media in rotazione ha creato un problema correlato a questo. Lo spazio di archiviazione utilizzato per gli SSD (e altri tipi di archiviazione non volatile) per diventare più veloce ed economico, è molto più volatile di quanto vorremmo e si basa su EDAC, perché perderemmo dati senza di essa. Aggiungono molti bit extra ed ecc il tutto, facendo i conti con la matematica per bilanciare velocità, costi e longevità di conservazione. Non ci vedo tornare indietro; la gente vuole più spazio di archiviazione non volatile ovunque che si adatta in un pacchetto minuscolo e non domina il prezzo del prodotto.

Per quanto riguarda i circuiti normali, dagli inizi dell'uso dei transistor per i circuiti digitali al presente, passiamo attraverso la porzione lineare del transistor e lo usiamo come interruttore, lo facciamo sbattere tra le rotaie con un eccesso per assicurarci che si attacchi . Come l'interruttore della luce sul tuo muro, lo fai girare più della metà di una molla aiuta il resto e lo tiene lì. Questo è il motivo per cui usiamo il digitale e non proviamo a vivere nella regione lineare; hanno provato all'inizio, ma non ci sono riusciti. Non potevano rimanere calibrati.

Quindi colpiamo semplicemente il transistor nelle sue rotaie e entrambi i lati di un segnale si stabilizzeranno al prossimo ciclo di clock. Sono stati fatti grandi problemi e gli strumenti attuali sono significativamente migliori di quelli che erano, nel fare l'analisi del design del chip, per vedere che dal design c'è un margine sui tempi. Quindi testare ogni dado su ciascun wafer (quello e / o dopo l'imballaggio), per vedere che ogni chip è buono.

La tecnologia dei chip si basa fortemente su statistiche basate su esperimenti. Quando overclocchi la tua CPU, stai spingendo quel margine, mantieni la frequenza, la temperatura, ecc. Pubblicizzate e le tue probabilità sono significativamente inferiori di avere problemi. Un processore xyz a 3 GHz è semplicemente un chip a 4 GHz che è fallito a 4 GHz ma passato a 3 GHz. Le parti sono classificate in base alla velocità sostanzialmente da una linea di produzione.

Poi ci sono le connessioni tra chip o schede, e anche quelle sono soggette a problemi, e molto tempo e fatica vanno nel fare standard e design delle schede, ecc., Per mitigare l'errore su quelle interfacce. USB , tastiera, mouse, HDMI , SATA e così via. Oltre a tutte le tracce sul tabellone. Dentro e fuori dal tabellone hai problemi di crosstalk; ancora una volta, sono disponibili molti strumenti se li usi e l'esperienza nell'evitare i problemi in primo luogo, ma ancora un altro modo in cui potremmo non vedere quelli e gli zeri essere pienamente coinvolti.

Nessuna delle tecnologie, nemmeno lo spazio, è perfetta. Deve solo essere abbastanza buono, abbastanza di una percentuale del prodotto deve coprire abbastanza della durata prevista del prodotto. Una certa percentuale di smartphone deve durare almeno due anni, e basta. Le fonderie o la tecnologia più vecchie hanno più dati sperimentali e possono produrre un prodotto più affidabile, ma è più lento e potrebbero non essere nuovi progetti, quindi ecco qua. Il vantaggio è proprio questo, una scommessa per tutti.

Alla tua domanda specifica, i transistor su ciascuna estremità di un segnale vengono spinti rapidamente attraverso la loro regione lineare e si inclinano in una delle rotaie. L'analisi viene eseguita su ogni percorso combinatorio per determinare che si stabilizzerà prima che l'orologio alla fine del percorso lo agganci, in modo che sia veramente fatto uno zero o uno. L'analisi si basa su esperimenti. I primi chip di una linea di prodotti vengono spinti oltre i confini del design, vengono creati grafici schmoo per determinare la presenza di un margine nel design. Vengono apportate variazioni al processo e / o vengono individuati singoli candidati che rappresentano i chip lenti e veloci. È un processo complicato e alcuni hanno più materiale, altri ne hanno di meno, corrono più velocemente ma usano più energia o corrono più lentamente, ecc.

Li spingi anche ai margini. E fondamentalmente ha la calda sensazione che il design sia ok per andare in produzione. La scansione JTAG / perimetrale viene utilizzata per eseguire modelli casuali attraverso i chip tra ciascuno stato bloccato per vedere i percorsi combinatori sono tutti solidi per un progetto. E in caso di dubbi, possono anche verificarsi alcuni test funzionali diretti. Ulteriori test del primo silicio e forse test casuali per assicurarsi che il prodotto sia buono. Se / quando si verificano guasti, ciò potrebbe farti tornare a test più funzionali sulla linea di produzione. Dipende fortemente da statistiche / percentuali. 1/1000000 quelli cattivi che escono possono andare bene o 1/1000 o altro; dipende da quanti pensi che produrrai da quel chip.

Le vulnerabilità sono come menzionato qui e con gli altri. Innanzitutto il chip stesso, quanto è stato buono il design e il processo, quanto vicino al margine è il percorso più debole di un chip specifico nel prodotto acquistato. Se troppo vicino al bordo, il cambiamento di temperatura o altro può causare problemi di temporizzazione e i bit bloccheranno i dati che non si sono stabilizzati in uno o zero. Quindi ci sono sconvolgimenti a singolo evento. E poi c'è rumore. di nuovo cose già menzionate ...


4
Il tuo primo paragrafo fa sembrare che non ci siano più problemi con gli ambienti aerospaziali, mentre penso che intendevi dire che i SEU non sono più solo sperimentati in quegli ambienti.
W5VO

Si noti che le SEU possono essere causate dalla saldatura SnPb su BGA a causa del fatto che parte del piombo fa parte della catena di decadimento dell'uranio a parte l'attività dei neutroni liberi.
Peter Smith,

@ W5VO, sì, intendevo dire che i disturbi dovuti alle radiazioni non sono più solo un problema di spazio, ma un problema fino alla superficie. Non male come nello spazio, ma presente.
old_timer

1
Mi sembra di ricordare che alcuni autobus per minicomputer DEC avessero in pratica problemi di metastabilità. Questo è un meccanismo distinto per errori di bit rispetto a quelli che hai nominato, giusto? O no?
davidbak,

2
@davidbak: la metastabilità è un brutto problema il cui effetto più comune è che nei casi in cui i valori di più bit dipendono dal fatto che alcuni input siano stati bassi o alti in qualche momento nel recente passato, potrebbe non passare tutti insieme in modo coerente con l'input essere basso, né in modo coerente con esso, ma potrebbe invece produrre una miscela arbitraria dei due comportamenti. Ad esempio, se si suppone che il codice si ramifichi quando viene premuto un pulsante, i bit del contatore del programma potrebbero finire per contenere un mix arbitrario dei valori che avrebbero avuto se il pulsante fosse premuto o in caso contrario.
supercat,

12

Se stai cercando una risposta semplice:

Ogni componente digitale in un computer è più limitato nelle uscite che produce, rispetto agli ingressi che accetta. Ad esempio, qualsiasi valore di "input" da 0 V a 2 V verrà accettato come 0, ma un "output" di 0 sarà sempre compreso tra 0 e 0,5 V. (Vedi la risposta di duskwuff per alcuni valori reali.)

Ciò significa che ogni componente aiuta a "correggere" parte della deviazione o del rumore che si è verificato lungo la linea. Naturalmente, se il rumore è abbastanza grande, il sistema non può compensare. I computer in ambienti ad alta radiazione possono essere frequentemente influenzati da 1 che passa a 0 e viceversa.

Fondamentalmente, i computer sono progettati per tollerare determinati livelli di rumore / interferenza , il che è abbastanza buono per la maggior parte degli scopi pratici.


8

È teoricamente possibile che i segnali cambino tra uno 0 e un 1 a causa del rumore termico (e altro), tuttavia è estremamente improbabile.

I circuiti digitali sono progettati con un attributo chiamato "noise margin". Questa è la quantità con cui il suo input deve cambiare prima che lo stato di output capovolga. Generalmente nei circuiti CMOS questo rappresenta circa il 50% della tensione di alimentazione. Il rumore termico inevitabile (proveniente da elettroni che si muovono a qualsiasi temperatura superiore a 0 kelvin) in questi circuiti genera << 1 mV di rumore e la probabilità che questi picchi possano superare (diciamo) 500 mV, è estremamente piccola.

Le porte digitali (ad es. CMOS) presentano caratteristiche di guadagno e saturazione. Ciò significa che quando il segnale di ingresso è vicino al centro dell'intervallo, l'uscita cambia rapidamente (alto guadagno), ma quando è vicino agli estremi dell'intervallo, cambia lentamente. Il risultato di ciò è che quando un segnale di ingresso è "vicino" alle rotaie, l'uscita è ancora più vicina - questo significa che il rumore non viene amplificato.

Altre caratteristiche sopra menzionate (correzione degli errori, ecc.) Indicano che gli errori, anche se si verificano, non si propagano.


4

In sistemi soggetti a errori come canali di comunicazione e archiviazione magnetica (e talvolta anche RAM), viene archiviato un checksum, CRC o ECC per rifiutare dati errati o correggere piccoli errori.

Generalmente i sistemi binari sono progettati in modo che ciò non sia possibile, ma una volta ogni pochi milioni o miliardi di volte * un raggio cosmico o un bip di rumore spingeranno le cose oltre la linea, il rilevamento / correzione dell'errore è necessario per mantenere la corruzione dall'influenzare gravemente il computer.

* I canali di comunicazione possono avere un tasso di errore molto, molto più alto!


4

L'hardware del computer è diventato più robusto e affidabile. Ma l'hardware è troppo vasto per una risposta semplice. Tuttavia, potrebbe essere interessante sapere che esiste una differenza di affidabilità tra un computer desktop comune e un computer server aziendale. Ho trovato questo thread di domande / risposte sull'hardware del server. Un server costerà molte volte quello di un desktop simile. Il costo è il risultato di un hardware migliore che è probabilmente più volte meno probabile che "commuti a 1 e 0" inaspettatamente.

Ma l'hardware è solo metà della storia. I computer possono anche proteggere i dati da errori imprevisti utilizzando il software. Il codice di hamming è un esempio in cui, aggiungendo una piccola quantità di dati aggiuntivi, un piccolo numero di errori può non solo essere rilevato ma anche corretto.


con l'eccezione del flash MLC, in cui l'affidabilità viene scambiata per densità,
Jasen

3

Esistono due modi comunemente utilizzati per ridurre al minimo la probabilità che un bit logico venga commutato accidentalmente (da 0 a 1 o da 1 a 0).
Il primo è quello di fornire uno spazio più ampio , tra i livelli di tensione definiti per uno 0 e un 1, il più possibile . Come accennato, uno 0 è definito come un livello di tensione <.9v, mentre 1 è definito come un livello di tensione> 2,9 v (non come dici tu da 9 a 1,5). Questo lascia un gap di tensione di 2v. Ciò significa che la tensione del segnale dovrebbe variare del 200% , prima di cambiare "accidentalmente" lo stato del bit (molto improbabile).
Il secondo è "clocking"i segnali logici. Poiché la tensione / rumore "accidentale" è casuale e di breve durata, consentendo cambiamenti di stato solo a intervalli particolari (e brevi), la probabilità della "variazione" che colpisce al momento dell'orologio è ridotta al minimo.

Esistono ovviamente altri mezzi e metodi utilizzati, a seconda del grado di affidabilità richiesto (ECD, ECC, ecc.).


2

Buona ingegneria.

Un grande sforzo viene impiegato nella progettazione per prevenire la corruzione dei dati o per correggerli quando non possono essere sufficientemente prevenuti (ad es. Memoria ECC ).

Le cose che possono causare il danneggiamento dei dati includono:

  • ambienti elettricamente rumorosi
  • problemi relativi all'alimentazione
  • problemi di temporizzazione (ad es. tra clock e linee dati o tra due linee differenziali)
  • cross-talk elettrico

In breve, un sacco di ingegneria è passata ai progetti digitali in modo che gli ingegneri del software possano ipotizzare semplicemente che "0" significa "0" e "1" significa "1".


E, naturalmente, la memoria ECC può anche fare cose divertenti come innescare un interrupt non mascherabile (NMI) se vengono danneggiati più bit di quelli che è possibile riparare. Penso che per la moderna RAM ECC si tratti di più di un errore a 64 bit (le codifiche possono correggere errori a singolo bit e rilevare ma non correggere errori a due bit), ma potrei sbagliarmi. In situazioni in cui ti interessano i tuoi dati, arrestare immediatamente il sistema se qualcosa non va oltre la riparazione potrebbe benissimo essere preferibile a zoppicare senza sapere se i dati possono essere attendibili (o peggio, sapendo che non possono essere affidabili).
un CVn

2

I due aspetti fondamentali dei computer elettronici pratici sono:

  1. Un alimentatore molto stabile

  2. Tempo (generalmente definito come frequenza di clock o ritardo)

Gli alimentatori per i sistemi informatici sono specificati e regolamentati in modo molto rigoroso. In effetti, per qualsiasi sistema informatico l'alimentatore è in genere regolato più volte: all'alimentatore (o al caricabatterie), all'ingresso principale della scheda madre, all'ingresso delle schede figlie e infine sul chip stesso.

Questo elimina molto rumore (volatilità elettrica). Ciò che la CPU vede è una sorgente di tensione molto stabile e non volatile che può utilizzare per elaborare la logica.

La successiva fonte principale di valori intermedi (tensioni tra ciò che è considerato 0 o 1) viene quando la transizione di valori. 1 cambia in 0 (tempo di caduta) o 0 passa in 1 (tempo di salita). Non puoi davvero fare molto al riguardo, tranne aspettare che la transizione finisca prima di accettare l'uscita del circuito. Prima del completamento della transizione, l'output del circuito è considerato spazzatura.

In ingegneria la soluzione a questo problema è semplicemente scrivere per quanto tempo è necessario attendere che i risultati siano corretti sulla carta. Questa è l'origine della frequenza di clock della CPU. A quanti GHz è possibile eseguire la CPU dipende da quanto tempo ci vogliono per stabilizzare i cambiamenti di stato nella CPU.

Esiste in realtà una terza fonte di volatilità: input nel circuito. La soluzione a questo problema è simile al problema generale sopra riportato: assicurarsi che il segnale (tensione o corrente) che entra nel sistema sia stabile e assicurarsi che il segnale abbia abbastanza tempo per stabilizzarsi.

La seconda parte del problema è il motivo per cui campioniamo gli input in blocchi o registri prima dell'elaborazione. Il segnale potrebbe essere spazzatura. Ma saranno 0 o 1 immondizia all'interno dei registri quando vengono elaborati. La prima parte del problema riguarda le garanzie.


2

Ma non ho mai letto ciò che mantiene "ben educate" le tensioni elettriche in modo che uno 0 non possa mai accidentalmente diventare un 1 a causa della volatilità elettrica 1 all'interno del computer. Forse è possibile che la tensione sia molto vicina allo 0,9, quindi cosa si fa per evitare che passi la soglia?

Il feedback è ciò che gli impedisce di avvicinarsi alla tensione di soglia e lo costringe a comportarsi bene.

Questo è di solito sotto forma di un circuito di aggancio di qualche tipo, spesso un circuito di aggancio con clock.

Come semplice esempio, considera il flip-flop . È progettato in modo tale che l'uscita venga reimmessa nel circuito logico come ingresso aggiuntivo. La logica all'interno dell'elemento, quindi, sa cosa sta producendo e continuerà a produrre lo stesso valore fino a quando gli altri input non lo forzano nello stato opposto.

Poiché il circuito è progettato in modo tale che i transistor siano completamente accesi o completamente spenti, quindi emetterà sempre vicino all'alimentazione e ai limiti di terra - non si avvicinerà al livello di 0,9 v, e quando lo farà si sposterà rapidamente e completamente all'altro stato. I circuiti sono progettati specificamente per evitare di operare nella regione analogica tra i due stati.


0

In normali condizioni operative, gli 0 e 1 raramente si guastano, ma in cattive condizioni operative (ad esempio batteria scarica o quel breve tempo dopo la disconnessione dell'alimentazione CA e la tensione nel condensatore), accadono cose strane e 0 e 1 vengono incasinati tutto il tempo.

Per questo motivo, se stai scrivendo un codice difensivo (software o HDL) che non desideri bloccare, dovresti sempre considerare il caso in cui un numero potrebbe presentare problemi. Per esempio,

while(1)
{
  i++;
  do something here
  if (i == 10) break;
}

meglio cambiare il ==verso >= nel caso in cui il valore dei isalti 9-11 o un qualsiasi numero superiore a 10, che li induca a non uscire dal ciclo fino a quando iviene distribuito su 0 (diciamo dopo 4 miliardi di iterazioni).

while(1)
{
  i++;
  do something here
  if (i >= 10) break;
}

Succede, fidati di me ...


cosa succede se ipassa a un numero negativo elevato?
Jasen,
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.