SRAM non è vuoto all'accensione, è normale?


19

Avevo finalmente finito la mia scheda di memoria Z80, ma sono rimasto deluso nel vedere che non funzionava correttamente (semplice test NOP con le linee di indirizzo collegate ad alcuni LED) poiché il contatore si è rapidamente spostato fuori controllo invece di aumentare come dovrebbe. Tuttavia, non sono uno a cui rinunciare e dopo circa trenta minuti di test di continuità per svelare nessun corto circuito e tutte le connessioni corrette, ho finalmente pensato di verificare se il chip SRAM si stava accendendo con tutti gli 0 memorizzati. Sono ben consapevole che SRAM (a meno che non sia volatile, che non è il mio chip particolare) perderà tutto il suo contenuto in caso di perdita di potenza, ma ho sempre supposto che sarebbe stato riempito con 0 (cioè "vuoto") quando si sarebbe ripreso energia. La SRAM che sto usando sembra essere riempita casualmente con 1 e 0 ogni volta che si ripristina l'alimentazione. Non ricorda mai alcun dato, ma non si carica vuoto. Questo non è davvero un problema in quanto posso semplicemente scrivere un piccolo programma nella ROM per caricare tutti gli 0 in RAM all'accensione, anche se mi piacerebbe ancora sapere se è così che dovrebbe funzionare la SRAM. Grazie!

Modifica: ho dimenticato di dire che dopo aver usato la ROM per caricare 0 in SRAM il sistema ha funzionato bene, quindi questo era davvero il problema.


7
È possibile utilizzare l'accensione SRAM per generare numeri casuali. Questo è generalmente il modo in cui lo facciamo se abbiamo bisogno di un solo seme casuale.
b degnan,

6
@bdegnan Una volta, forse. Lo stato di accensione di SRAM tende a essere in qualche modo prevedibile per una determinata parte.
duskwuff

Risposte:


36

A meno che tu non abbia uno stato iniziale programmato, sarà più o meno casuale. Sebbene ciò possa variare con diverse implementazioni SRAM. Dici anche "vuoto". Alcuni potrebbero pensare che random sia "più vuoto" di tutti gli 0.

La memoria SRAM memorizza la memoria su inverter back to back.

sram semplice

Questo forma un sistema bi-stabile (due stati molto stabili con metastabilità che li divide). Quindi, all'accensione, gli inverter back to back sono brevemente metastabili.

Ciò accade perché quando la tensione aumenta (dall'accensione), sia il NMOS che il PMOS degli inverter back-to-back sarebbero "ugualmente" accesi, mantenendo entrambi i bitnodi a metà della tensione di alimentazione (questo è lo stato metastabile). Alla fine un po 'di rumore termico (o qualsiasi processo che introduce variazioni) spinge o abbassa un po' questo valore. A questo punto i bitnodi si innestano in uno dei loro stati bistabili.

  • Ad esempio, si consideri Q=Q'=VSupply2
  • Successivamente, un po 'di rumore termico su Q aumenta la tensione fino a VSupply2+δ
  • VSupply2VSupply2-δ
  • Successivamente, poiché la tensione al gate del nodo Q guida del FET diminuisce, il PMOS si accende un po 'di più (e NMOS si spegne di più). Ciò fa aumentare ulteriormente Q alla fornitura. E questo fa scattare rapidamente Q 'su 0 e Q su 1.

In effetti, esiste persino un documento "Power-Up SRAM State come identificazione di impronte digitali e fonte di numeri casuali reali"

Di seguito è riportata una trama molto utile contenuta nel documento. La linea tratteggiata rappresenta l'aumento della tensione di alimentazione:

metastabilità all'accensione

  • Sul lato sinistro, tutto è uguale. In questo caso, la variazione casuale dovuta alla temperatura o ad un altro numero di fattori porta il bitnodo in uno stato o nell'altro.
  • Sul lato destro, c'è un bitnode che è inclinato (intenzionalmente o meno) per essere molto più probabile che si inizializzi in un particolare stato.

A seconda di come è stato fabbricato ogni bitnode nella SRAM attualmente in uso, si finisce con più o meno una delle due situazioni precedenti. In entrambi i casi, a meno che non abbiate intenzionalmente distorto la SRAM, gli output iniziali sembrerebbero più o meno casuali. Nella situazione di sinistra, ogni successivo power-up genererebbe più schemi casuali. Nella situazione di destra, l'avvio iniziale sarebbe apparentemente casuale. Ma ulteriori potenziamenti farebbero sì che la SRAM tendesse a promuovere certi stati.


Sai che in realtà pensavo che sarebbe stato il motivo per cui si stava caricando in modo casuale. Ho usato un dispositivo di chiusura NOR come parte di un circuito e si sarebbe ripristinato casualmente all'accensione. Grazie!
KeatonB,

Pensavo che potessi progettare chip SRAM in modo che si accendessero in uno stato noto. Puoi?
John Dvorak,

2
@JanDvorak: Sì, puoi. Ma ciò non significa che sia fatto comunemente, specialmente in SRAM che non è specifico dell'applicazione. Penserei che costa di più e per quale scopo? Raramente sarà lo stesso stato iniziale richiesto tra i consumatori.
jbord39,

@ jbord39 Questo potrebbe aiutarmi a inserire il bootloader nella memoria ed evitare di avere un chip ROM aggiuntivo da cui caricare il sistema operativo? Aiuterebbe a ridurre i costi?
John Dvorak,

2
@JanDvorak: per applicazioni specifiche i bitcell potrebbero essere inclinati o distorti per avviarsi in determinati stati. Ma davvero il costo non ne vale la pena, perché ogni cliente avrebbe bisogno di stati iniziali diversi. È molto più semplice ed economico inizializzarlo semplicemente con circuiti esterni (come la ROM). Immagino che potrebbero essere incorporati in alcuni circuiti programmabili per permetterti di masterizzare nei tuoi stati iniziali desiderati, o qualche altro schema. Ma questo sembra costoso quando hai chiaramente i circuiti per scrivere / leggere nella RAM. Quindi, basta scrivere il tuo stato desiderato.
jbord39,

5

Avendo lavorato con SRAM per molti anni, posso dirti che si accenderà con contenuti apparentemente casuali, anche se ho visto dispositivi che si accendono con quasi gli stessi contenuti dall'aspetto casuale ogni volta. Se il ciclo di spegnimento è abbastanza breve (a seconda delle caratteristiche dell'alimentazione e del numero e valore dei condensatori di bypass), frammenti di dati precedentemente scritti possono rimanere nella SRAM attraverso cicli di accensione, sebbene il contenuto venga danneggiato.


2

Un singolo bit è memorizzato in una SRAM in un circuito di 6 o più transistor. Se si desidera un comportamento di ripristino dell'accensione definito per SRAM, ogni cella RAM richiederebbe solo più di 6 transistor. L'area dei chip necessaria sarà sostanzialmente più grande e i chip SRAM saranno più costosi. Si tratta di un ripristino di accensione in parallelo di tutti i bit contemporaneamente. Un ripristino seriale richiederebbe un oszilatore, un contatore di indirizzi e un tempo sufficiente durante l'accensione per ripristinare tutti i bit o byte RAM in sequenza. Se il processore accede alla SRAM prima del termine del ripristino dell'accensione seriale, potrebbero verificarsi errori e la perdita o la modifica dei dati.

Esistono ambienti di programmazione per microprocessori con mappatura di memoria dettagliata di diverse aree RAM. È possibile definire un'area con o senza un reset all'accensione come richiesto dall'applicazione. Sono possibili diverse aree all'interno della stessa SRAM. Non è sempre necessario ripristinare l'intera SRAM all'avvio del programma.


3
Rendere alcuni transistor leggermente più grandi di altri distorcerebbe le probabilità di uno rispetto a zero. In molte parti, i transistor saranno bilanciati all'interno delle tolleranze di fabbricazione, il che significa che alcuni bit saranno polarizzati verso zero mentre altri saranno polarizzati verso uno. Dubito che le differenze di dimensioni dovrebbero essere molto grandi per influenzare in modo schiacciante il comportamento di avvio in una direzione; I produttori di RAM potrebbero facilmente distorcere le cose in modo coerente se ci fosse qualche motivo per farlo, ma una RAM che è sbilanciata consumerebbe ulteriore corrente per spostare la cella nella direzione sfavorevole.
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.