SRAM no está en blanco en el encendido, ¿es esto normal?

19

Finalmente había terminado mi tarjeta de memoria Z80, pero me decepcionó ver que no funcionaba correctamente (prueba simple de NOP con las líneas de dirección conectadas a algunos LED) ya que el contador se salió de control rápidamente en lugar de incrementarse como debería. Sin embargo, no soy uno para rendirme y después de unos treinta minutos de pruebas de continuidad para descubrir que no hay cortocircuitos y todas las conexiones adecuadas, finalmente pensé en verificar si el chip SRAM se estaba encendiendo con todos los 0 almacenados. Soy consciente de que SRAM (a menos que no sea volátil, que no es mi chip en particular) perderá todo su contenido al perder potencia, pero siempre asumí que se llenaría con 0 (es decir, "vacío") cuando se recuperara poder. La SRAM que estoy usando parece estar llena aleatoriamente con 1 y 0 cada vez que se restablece la alimentación. Nunca recuerda ningún dato, pero no se carga vacío. Esto no es realmente un problema, ya que simplemente puedo escribir un pequeño programa en ROM para cargar todos los 0 en la RAM en el encendido, aunque todavía me gustaría saber si así es como debería funcionar la SRAM o no. ¡Gracias!

Editar: Olvidé mencionar que después de usar la ROM para cargar 0 en SRAM, el sistema funcionó bien, por lo que este fue el problema.

KeatonB
fuente
77
Puede usar el encendido SRAM para generar números aleatorios. En general, así es como lo hacemos si solo necesitamos una semilla aleatoria.
b degnan
66
@bdegnan Una vez, tal vez. El estado de encendido de SRAM tiende a ser algo predecible para cualquier parte.
duskwuff

Respuestas:

36

A menos que tenga un estado inicial programado, será más o menos aleatorio. Aunque esto puede variar con diferentes implementaciones de SRAM. También dices "en blanco". Algunos podrían pensar que el azar es "blanco" que todos los 0.

La memoria SRAM almacena memoria en inversores de respaldo a respaldo.

sram simple

Esto forma un sistema biestable (dos estados muy estables con metaestabilidad que los divide). Por lo tanto, al encender los inversores back to back son brevemente metaestables.

Esto sucede porque a medida que el voltaje aumenta (desde que se enciende), tanto NMOS como PMOS de los inversores de atrás hacia atrás estarían 'igualmente' encendidos, manteniendo ambos bitnodes a la mitad del voltaje de suministro (este es el estado metaestable). Eventualmente, un poco de ruido térmico (o cualquier proceso que introduce variación) empuja o hace que este valor baje o suba un poco. En este punto, los bitnodes entran en uno de sus estados biestables.

  • Como ejemplo, considereQ=Q=Vsupply2
  • Luego, algo de ruido térmico en Q aumenta el voltaje hastaVsupply2+δ
  • Ahora, la alimentación NMOS Q 'se enciende un poco más. Y el PMOS que alimenta Q 'se apaga un poco más. Entonces Q 'se desde a . V s u p p l yVsupply2Vsupply2δ
  • A continuación, dado que el voltaje en la puerta del nodo Q de activación del FET disminuye, el PMOS se enciende un poco más (y NMOS se apaga más). Esto hace que Q aumente aún más a la oferta. Y esto rápidamente ajusta Q 'a 0 y Q a 1.

De hecho, incluso hay un documento "Power-Up SRAM State como una huella dactilar de identificación y fuente de números aleatorios verdaderos"

Una trama muy útil contenida en el documento está a continuación. La línea de puntos representa el aumento de voltaje de suministro:

metaestabilidad en el encendido

  • En el lado izquierdo, todo es igual. En este caso, la variación aleatoria debida a la temperatura u otro número de factores hace que el bitnode entre en un estado u otro.
  • En el lado derecho, hay un bitnode que está sesgado (a propósito o de otro modo) para que sea mucho más probable que se inicialice en un estado particular.

Dependiendo de cómo se fabricó cada bitnode en la SRAM que está utilizando actualmente, terminará con más o menos de una de las dos situaciones anteriores. En ambos casos, a menos que haya sesgado intencionalmente la SRAM, las salidas iniciales se verían más o menos aleatorias. En la situación de la izquierda, cada encendido posterior generaría más patrones aleatorios. En la situación de la derecha, el inicio inicial sería aparentemente aleatorio. Pero más potenciadores causarían que la SRAM tienda a ciertos estados.

jbord39
fuente
Sabes, en realidad pensé que sería por eso que se estaba cargando al azar. He usado un pestillo NOR como parte de un circuito y se restablecería aleatoriamente en el encendido. ¡Gracias!
KeatonB
Pensé que podría diseñar chips SRAM para que se enciendan en un estado conocido. ¿Puedes?
John Dvorak el
2
@ JanDvorak: Sí, puedes. Pero eso no significa que se haga comúnmente, especialmente en SRAM que no es específico de la aplicación. Creo que cuesta más y ¿para qué? Rara vez será el mismo estado inicial requerido entre los consumidores.
jbord39
@ jbord39 ¿Podría esto ayudarme a grabar el gestor de arranque en la memoria y evitar tener un chip ROM adicional para cargar el sistema operativo? ¿Ayudaría a reducir los costos?
John Dvorak
2
@ JanDvorak: Para aplicaciones específicas, las células de bits pueden estar sesgadas o sesgadas para iniciarse en estados específicos. Pero realmente el costo no vale la pena, porque cada cliente necesitaría diferentes estados iniciales. Es mucho más fácil y rentable simplemente inicializarlo con un circuito externo (como ROM). Supongo que podrían construir algunos circuitos programables para permitirle grabar en sus estados iniciales deseados, o algún otro esquema. Pero esto suena costoso cuando claramente ya tiene los circuitos para escribir / leer en la RAM. Entonces, solo escriba su estado deseado.
jbord39
5

Después de haber trabajado con SRAM durante muchos años, puedo decirle que se encenderá con contenidos aparentemente aleatorios, aunque he visto dispositivos que se encienden con casi el mismo contenido de aspecto aleatorio cada vez. Si el ciclo de apagado es lo suficientemente corto (dependiendo de las características de la fuente de alimentación y el número y valor de los condensadores de derivación), grandes fragmentos de datos previamente escritos pueden permanecer en la SRAM a través de los ciclos de encendido, aunque el contenido se corromperá.

Scottie Verde
fuente
2

Un solo bit se almacena en una SRAM en un circuito de 6 o más transistores. Si desea un comportamiento definido de reinicio de encendido para la SRAM, cada celda RAM necesitaría más de 6 transistores solamente. El área de chip necesaria será sustancialmente mayor y los chips SRAM serán más caros. Este es un reinicio de encendido paralelo de todos los bits al mismo tiempo. Un reinicio en serie requeriría un oszilator, un contador de direcciones y suficiente tiempo durante el encendido para restablecer todos los bits o bytes de RAM secuencialmente. Si el procesador accede a la SRAM antes de que finalice el reinicio de alimentación en serie, pueden producirse errores y los datos pueden perderse o cambiarse.

Existen entornos de programación para microprocesadores con mapeo de memoria detallado de varias áreas de RAM. Puede definir un área con o sin reinicio de encendido según lo requiera la aplicación. Son posibles varias áreas diferentes dentro de la misma SRAM. No siempre es necesario restablecer toda la SRAM al inicio del programa.

Uwe
fuente
3
Hacer que algunos de los transistores sean un poco más grandes que otros sesgaría las probabilidades de unos frente a ceros. En muchas partes, los transistores estarán equilibrados dentro de las tolerancias de fabricación, lo que significa que algunos bits estarán sesgados hacia los ceros, mientras que otros estarán sesgados hacia los unos. Dudo que las diferencias de tamaño tengan que ser muy grandes para sesgar el comportamiento de inicio abrumadoramente en una dirección; Los fabricantes de RAM podrían sesgar fácilmente las cosas de manera consistente si hubiera alguna razón para hacerlo, pero una RAM desequilibrada consumiría corriente adicional para cambiar la celda a la dirección desfavorecida.
supercat