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.
Réponses:
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.
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.
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:
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.
la source
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.
la source
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.
la source