Sono un nuovo ingegnere elettrico quindi abbiate pazienza. Sento alcuni degli altri ingegneri con cui lavoro che parlano di una condizione di competizione che esiste in uno dei nostri circuiti.
Cosa significa?
Sono un nuovo ingegnere elettrico quindi abbiate pazienza. Sento alcuni degli altri ingegneri con cui lavoro che parlano di una condizione di competizione che esiste in uno dei nostri circuiti.
Cosa significa?
Risposte:
Significa, molto semplicemente, che due cose allo stesso tempo "gareggiano" per il risultato.
Un esempio è un circuito con un pin di reset e un set, se si attiva il reset, l'uscita diventa 0. Se si attiva il set, l'uscita diventa 1. Se prima si avvia il set e si ripristina molto, molto rapidamente dopo di esso, ripristinare verrà visualizzato, quindi l'output è 0.
Ma se entrambi vengono attivati nello stesso momento, cosa succede?
Se il progettista del circuito prestasse attenzione, dovrebbe esserci una risposta, se questo è importante per la funzione. Se non c'è una risposta certa a questa domanda, il circuito ha una condizione di gara, in cui il segnale dal set e il reset si "scontrano" per vedere quale vince per determinare l'uscita.
Il percorso con il minor ritardo di solito vincerà, ma poi potresti vedere le condizioni di gara come il trigger esatto in cui il percorso più ritardato viene attivato esattamente tanto prima di quello più veloce.
Molti circuiti, inclusi blocchi logici all'interno dei circuiti integrati, presentano determinate condizioni di gara, ma di solito sono tali che quando si utilizza il circuito nel modo in cui è previsto, non si noterà. Così spesso quando gli ingegneri dicono "condizioni di gara" ad alta voce un paio di volte, in realtà significano che è anche quello che potrebbe accadere durante l'uso normale, il che sarebbe un problema, perché in una condizione di gara non è possibile prevedere il normale funzionamento.
Nel software viene utilizzato anche il termine, ma spesso per indicare problemi di temporizzazione o blocchi. È un principio simile, però. Spesso quando si hanno due processi in un computer in esecuzione indipendente, ma usando la stessa memoria si protegge quella memoria dall'essere scritta da uno, mentre l'altro lo sta usando. Se non lo chiamano che una possibile condizione di gara: Un processo potrebbe essere la lettura di un valore che è proprio nel corso di aggiornamento, o entrambi potrebbero essere scrivendo allo stesso tempo e poi non si sa che cosa farà accadere.
fopen()
, scrivere dati su di fclose()
esso, quindi su di chmod()
esso per proteggerlo. Quella breve finestra tra fopen()
e chmod()
apre una possibile condizione di competizione in cui la modalità file predefinita potrebbe consentire a un estraneo indesiderato di lavorare con il file in un modo negato dopo la chmod()
chiamata. La soluzione è invece creare il file con open()
, che consente di impostare la modalità come parte dell'operazione di creazione del file.
Il termine "condizione di gara" implica che (1) due o più segnali possono arrivare in qualsiasi ordine, arbitrariamente vicini l'uno all'altro, e (2) non è possibile dimostrare analiticamente che esiste sostanzialmente una probabilità zero di qualsiasi possibile combinazione di arrivo volte ponendo un problema.
Dal punto di vista di un singolo flip flop il cui input di dati potrebbe cambiare in qualsiasi momento rispetto all'orologio, le transizioni quasi simultanee sull'orologio e gli input di dati potrebbero porre una condizione di competizione. Dal punto di vista del comportamento generale del circuito, tuttavia, non costituirebbero una condizione di competizione se potessero verificarsi solo in momenti in cui nessuna circuità a valle si preoccuperebbe di ciò che il latch teneva, e nessun circuito a valle inizierebbe a preoccuparsi di ciò che il latch ha tenuto fino a dopo l'arrivo di un impulso di clock che non poteva trovarsi in alcun modo vicino a transizioni sull'immissione dei dati.
Inoltre, poiché spesso non è possibile eliminare completamente completamente tutte le possibilità di temporizzazioni di input problematiche, molte analisi delle condizioni di gara diranno che se l'uscita di un registro viene immessa in un altro che è controllato dallo stesso clock, il secondo registro si bloccherà sempre un "pulito" alto o un "pulito" basso anche se gli ingressi al primo registro gli hanno fatto acquisire un livello di ingresso che era proprio alla soglia di commutazione. In teoria, per il primo latch sarebbe possibile catturare un livello che era appena al di sopra o al di sotto della sua soglia di commutazione esatta in modo che il livello di uscita commutasse esattamente all'arrivo dell'impulso di clock successivo.
Di conseguenza, se uno dovesse prendere ad esempio un input e passarlo in una sequenza di tre flip flop, e avere un circuito che esce alto ogni volta che il secondo flop era alto ma il terzo era basso, allora ogni fronte di salita che si verifica su l'input di dati che è preceduto da un periodo di clock completo degno di un tempo basso e seguito da un periodo di clock completo di tempo elevato, sarebbe sostanzialmente garantito per far sì che l'uscita del circuito sia alta per esattamente un periodo di clock.
simula questo circuito - Schema creato usando CircuitLab
In questo schema, un segnale con temporizzazione alquanto irregolare è normalizzato su un clock in tre modi in modo tale da generare un'uscita che è alta per un ciclo di clock dopo ciascun fronte di salita. Il primo tentativo di normalizzare il segnale genera un'uscita che ha un aspetto sgradevole e presenta una condizione di gara evidente se l'ingresso e il clock cambiano contemporaneamente. Il secondo approccio è molto migliore, ma ha ancora una condizione di competizione (che il simulatore non può innescare) se il cronometro dell'orologio e dei dati fa sì che il primo registro acquisisca un valore intermedio. Il terzo approccio rappresenta una pratica comune e sarebbe generalmente considerato sicuro, poiché anche se il primo registro non riesce a catturare un massimo pulito o un minimo pulito, è molto improbabile che l'output del primo registro abbia esattamente il comportamento giusto per impedire al secondo registro di afferrare in modo pulito. Se i dati cambiano molto vicino all'orologio, potrebbero essere catturati nel ciclo corrente o non essere afferrati fino al successivo, ma se una delle due situazioni fosse accettabile non ci sarebbero condizioni di gara.