SRAM n'est pas vierge au démarrage, est-ce normal?

19

J'avais finalement terminé ma carte mémoire Z80, mais j'étais déçu de voir qu'elle ne fonctionnait pas correctement (simple test NOP avec les lignes d'adresse connectées à certaines LED) car le compteur devenait rapidement hors de contrôle au lieu de s'incrémenter comme il se doit. Cependant, je ne suis pas du genre à abandonner et après environ trente minutes de tests de continuité pour ne révéler aucun court-circuit et toutes les connexions appropriées, j'ai finalement pensé à vérifier si la puce SRAM était sous tension avec tous les 0 stockés. Je suis bien conscient que la SRAM (à moins qu'elle ne soit pas volatile, ce qui n'est pas le cas de ma puce) perdra tout son contenu en cas de perte de puissance, mais j'avais toujours supposé qu'elle serait remplie de 0 (c'est-à-dire "vide") lorsqu'elle regagnerait Puissance. La SRAM que j'utilise semble être remplie au hasard de 1 et de 0 à chaque réinitialisation de l'alimentation. Il ne se souvient jamais de données, mais il ne se charge pas vide. Ce n'est pas vraiment un problème car je peux simplement écrire un petit programme dans la ROM pour charger tous les 0 dans la RAM à la mise sous tension, bien que j'aimerais toujours savoir si c'est ainsi que la SRAM devrait fonctionner ou non. Merci!

Edit: j'ai oublié de mentionner qu'après avoir utilisé la ROM pour charger des 0 dans SRAM, le système fonctionnait bien, donc c'était effectivement le problème.

KeatonB
la source
7
Vous pouvez utiliser la mise sous tension SRAM pour générer des nombres aléatoires. C'est généralement ainsi que nous procédons si nous n'avons besoin que d'une seule graine aléatoire.
b degnan
6
@bdegnan Une fois, peut-être. L'état de mise sous tension de SRAM a tendance à être quelque peu prévisible pour une partie donnée.
duskwuff

Réponses:

36

Sauf si vous avez programmé un état initial, il sera plus ou moins aléatoire. Bien que cela puisse varier avec différentes implémentations SRAM. Vous dites également "vide". Certains pourraient penser que random est "plus vide" que tous les 0.

La mémoire SRAM stocke la mémoire sur des onduleurs dos à dos.

sram simple

Cela forme un système bi-stable (deux états très stables avec métastabilité les divisant). Ainsi, lors de la mise sous tension, les onduleurs dos à dos sont brièvement métastables.

Cela se produit car à mesure que la tension augmente (après avoir été allumée), les deux NMOS et PMOS des onduleurs dos à dos seraient `` également '' allumés, maintenant les deux nœuds binaires à la moitié de la tension d'alimentation (c'est l'état métastable). Finalement, un peu de bruit thermique (ou tout processus qui introduit une variation) pousse ou tire cette valeur vers le bas ou vers le haut un peu. À ce stade, les nœuds binaires s'enclenchent dans l'un de leurs états bistables.

  • Q=Q=Vsupply2
  • Vsupply2+δ
  • Vsupply2Vsupply2δ
  • Ensuite, puisque la tension à la grille du nœud Q de pilotage du FET diminue, le PMOS s'allume un peu plus (et le NMOS s'éteint davantage). Cela fait que Q augmente encore à l'approvisionnement. Et cela enclenche rapidement Q 'à 0 et Q à 1.

En fait, il existe même un article intitulé "Power-Up SRAM State as a Identifying Fingerprint and Source of True Random Numbers"

Un complot très utile contenu dans le papier est ci-dessous. La ligne pointillée représente l'augmentation de la tension d'alimentation:

métastabilité à la mise sous tension

  • À gauche, tout est égal. Dans ce cas, une variation aléatoire due à la température ou à un autre nombre de facteurs fait basculer le nœud binaire dans un état ou dans l'autre.
  • Sur le côté droit, il y a un nœud de bit qui est biaisé (intentionnellement ou non) pour être beaucoup plus susceptible de s'initialiser dans un état particulier.

Selon la façon dont chaque bitnode de la mémoire SRAM que vous utilisez actuellement a été fabriqué, vous vous retrouvez avec plus ou moins l'une des deux situations ci-dessus. Dans les deux cas, à moins que vous n'ayez intentionnellement biaisé la SRAM, les sorties initiales sembleront plus ou moins aléatoires. Dans la situation de gauche, chaque mise sous tension suivante générerait plus de motifs aléatoires. Dans la situation de droite, le démarrage initial serait apparemment aléatoire. Mais de nouveaux bonus entraîneraient la SRAM à avoir tendance à faire avancer certains états.

jbord39
la source
Vous savez, j'ai pensé que ce serait la raison pour laquelle il se chargeait au hasard. J'ai utilisé un verrou NOR dans le cadre d'un circuit et il se réinitialiserait au hasard à la mise sous tension. Merci!
KeatonB
Je pensais que vous pouviez concevoir des puces SRAM pour qu'elles se mettent sous tension dans un état connu. Peut tu?
John Dvorak
2
@JanDvorak: Oui, vous le pouvez. Mais cela ne signifie pas que cela est couramment fait, en particulier dans SRAM qui n'est pas spécifique à l'application. Je pense que cela coûte plus cher et dans quel but? Ce sera rarement le même état initial requis pour tous les consommateurs.
jbord39
@ jbord39 Cela pourrait-il m'aider à faire cuire le chargeur de démarrage dans la mémoire et à éviter d'avoir une puce ROM supplémentaire pour charger le système d'exploitation? Cela aiderait-il à réduire les coûts?
John Dvorak
2
@JanDvorak: Pour des applications spécifiques, les cellules binaires peuvent être biaisées ou biaisées pour démarrer dans des états spécifiés. Mais vraiment, le coût n'en vaut pas la peine, car chaque client aurait besoin d'états initiaux différents. Il est beaucoup plus facile et rentable de simplement l'initialiser avec des circuits externes (tels que la ROM). Je suppose qu'ils pourraient intégrer des circuits programmables pour vous permettre de graver dans vos états initiaux souhaités, ou un autre schéma. Mais cela semble cher quand vous avez déjà clairement les circuits pour écrire / lire dans la RAM. Alors, écrivez simplement votre état souhaité.
jbord39
5

Ayant travaillé avec SRAM pendant de nombreuses années, je peux vous dire qu'il se mettra en marche avec un contenu apparemment aléatoire, bien que j'aie vu des appareils qui se mettent en marche avec presque le même contenu au hasard à chaque fois. Si le cycle de mise hors tension est suffisamment court (en fonction des caractéristiques de l'alimentation et du nombre et de la valeur des condensateurs de dérivation), de gros fragments de données précédemment écrites peuvent persister dans la SRAM pendant les cycles d'alimentation - bien que le contenu soit corrompu.

Scottie Verde
la source
2

Un seul bit est stocké dans une mémoire SRAM dans un circuit de 6 transistors ou plus. Si vous voulez un comportement de réinitialisation à la mise sous tension défini pour la SRAM, chaque cellule RAM aurait besoin de plus de 6 transistors seulement. La zone de puce nécessaire sera considérablement plus grande et les puces SRAM seront plus chères. Il s'agit d'une réinitialisation parallèle de l'alimentation de tous les bits en même temps. Une réinitialisation série nécessiterait un oszilator, un compteur d'adresses et suffisamment de temps pendant la mise sous tension pour réinitialiser tous les bits ou octets de RAM séquentiellement. Si le processeur accède à la SRAM avant la fin de la réinitialisation de la mise sous tension série, des erreurs peuvent se produire et des données peuvent être perdues ou modifiées.

Il existe des environnements de programmation pour les microprocesseurs avec un mappage de mémoire détaillé de plusieurs zones de RAM. Vous pouvez définir une zone avec ou sans réinitialisation à la mise sous tension comme requis par l'application. Plusieurs zones différentes au sein d'une même SRAM sont possibles. Il n'est pas toujours nécessaire de réinitialiser l'ensemble de la SRAM au démarrage du programme.

Uwe
la source
3
Rendre certains des transistors légèrement plus grands que d'autres fausserait les probabilités de l'un par rapport aux zéros. Sur de nombreuses parties, les transistors seront équilibrés dans les tolérances de fabrication, ce qui signifie que certains bits seront biaisés vers les zéros tandis que d'autres seront biaisés vers les uns. Je doute que les différences de taille devraient être très importantes pour biaiser massivement le comportement de démarrage dans une direction; Les fabricants de RAM pourraient facilement biaiser les choses de manière cohérente s'il y avait une raison de le faire, mais une RAM qui est déséquilibrée consommerait du courant supplémentaire pour commuter la cellule dans la direction défavorisée.
supercat