SRAM no está en blanco al encender, ¿es esto normal?

Finalmente había terminado mi placa de memoria Z80, pero me decepcionó ver que no funcionaba correctamente (prueba NOP simple con las líneas de dirección conectadas a algunos LED) ya que el contador rápidamente se salió de control en lugar de incrementarse como debería. Sin embargo, no soy de los que se dan por vencidos y después de unos treinta minutos de pruebas de continuidad para descubrir que no había cortocircuitos y todas las conexiones adecuadas, finalmente pensé en comprobar si el chip SRAM se estaba encendiendo con todos los 0 almacenados. Soy muy consciente de que SRAM (a menos que no sea volátil, que mi chip en particular no lo es) perderá todo su contenido al perder energía, pero siempre supuse que estaría lleno de 0 (es decir, "vacío") cuando recuperó poder. La SRAM que estoy usando parece llenarse aleatoriamente con 1 y 0 cada vez que se restablece la alimentación. Nunca recuerda ningún dato, pero no se está cargando vacío. Esto no es realmente un problema, ya que simplemente puedo escribir un pequeño programa en la ROM para cargar todos los 0 en la RAM al encenderla, aunque todavía me gustaría saber si la SRAM debería funcionar así 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.

Puede usar el encendido de SRAM para generar números aleatorios. Generalmente, así es como lo hacemos si solo necesitamos una semilla aleatoria.
@bdegnan Una vez, tal vez. El estado de encendido de SRAM tiende a ser algo predecible para cualquier parte determinada.

Respuestas (3)

A menos que tengas 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 "más vacío" que todos los 0.

La memoria SRAM almacena memoria en inversores espalda con espalda.

sram simple

Esto forma un sistema biestable (dos estados muy estables con metaestabilidad dividiéndolos). Por lo tanto, al encenderse, los inversores espalda con espalda son brevemente metaestables.

Esto sucede porque a medida que aumenta el voltaje (desde que se enciende), tanto el NMOS como el PMOS de los inversores espalda con espalda estarían "igualmente" encendidos, manteniendo ambos nodos de bits a la mitad del voltaje de suministro (este es el estado metaestable). Eventualmente, algún ruido térmico (o cualquier proceso que introduzca variación) empuja o empuja este valor hacia abajo o hacia arriba un poco. En este punto, los nodos de bits se ajustan a uno de sus estados biestables.

  • Como ejemplo, considere q = q = V s tu pag pag yo y 2
  • A continuación, algo de ruido térmico en Q aumenta el voltaje hasta V s tu pag pag yo y 2 + d
  • Ahora, el Q' de alimentación NMOS se activa un poco más. Y el Q' de alimentación de PMOS se apaga un poco más. Entonces Q' tira hacia abajo de V s tu pag pag yo y 2 a V s tu pag pag yo y 2 d .
  • Luego, dado que el voltaje en la puerta del nodo Q de conducción del FET disminuye, el PMOS se enciende un poco más (y el NMOS se apaga más). Esto hace que Q aumente aún más en el suministro. Y esto rápidamente ajusta Q' a 0 y Q a 1.

De hecho, incluso hay un documento "Estado de SRAM de encendido como huella dactilar de identificación y fuente de números aleatorios verdaderos"

Una trama muy útil contenida en el documento se encuentra a continuación. La línea punteada representa el aumento de la tensión de alimentación:

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 nodo de bit pase a un estado u otro.
  • En el lado derecho, hay un bitnodo que está sesgado (a propósito o no) para que sea mucho más probable que se inicialice en un estado particular.

Dependiendo de cómo se fabricó cada bitnodo 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 parecerán más o menos aleatorias. En la situación de la mano izquierda, cada encendido posterior generaría más patrones aleatorios. En la situación de la mano derecha, el inicio inicial sería aparentemente aleatorio. Pero más potenciadores harían que la SRAM tendera a promover ciertos estados.

Sabes, en realidad pensé que sería por eso que se cargaba al azar. He usado un pestillo NOR como parte de un circuito y se reiniciaría aleatoriamente al encenderlo. ¡Gracias!
Pensé que podría diseñar chips SRAM para que se enciendan en un estado conocido. ¿Puedes?
@JanDvorak: Sí, puedes. Pero eso no significa que se haga comúnmente, especialmente en SRAM que no es una aplicación específica. Yo creo que cuesta más y con qué propósito? Rara vez será el mismo estado inicial requerido entre los consumidores.
@ jbord39 ¿Podría esto ayudarme a integrar el cargador de arranque en la memoria y evitar tener un chip ROM adicional para cargar el sistema operativo? ¿Ayudaría a reducir los costos?
@JanDvorak: para aplicaciones específicas, las celdas de bits podrían estar sesgadas o sesgadas para iniciarse en estados específicos. Pero realmente el costo no vale la pena, porque cada cliente necesitaría estados iniciales diferentes. Es mucho más fácil y rentable simplemente inicializarlo con circuitos externos (como ROM). Supongo que podrían incorporar algún circuito programable para permitirle grabar en los estados iniciales deseados, o algún otro esquema. Pero esto suena costoso cuando claramente ya tiene el circuito para escribir/leer en la RAM. Entonces, solo escribe tu estado deseado.
@JanDvorak: Siento que es una pregunta similar a, ¿por qué no hay un IC que haga exactamente lo que quiero que haga? Un amplificador inversor con una ganancia de 10, otro con una ganancia de 9,5, etc. La razón nuevamente es el costo. Claro, es más fácil para ese cliente que necesita la ganancia específica. Pero en lugar de eso, solo construyen amplificadores operacionales de alta ganancia y permiten que los diseñadores usen circuitos externos para personalizar las topologías y ganar según sus necesidades.
@ jbord39 Estaba pensando en el caso en el que quiero producir bienes en masa con mi propio sistema operativo. Sin embargo, tienes razón en que la mayoría de las personas no son así. ¿A qué escala comenzaría esto a dar sus frutos, si alguna vez?
@JanDvorak: Aquí hay una patente que muestra cómo polarizar la RAM para un estado conocido al encender (SRAM programable especial), pero no sé si alguna vez se produjo comercialmente. google.com/patents/US7433224 Aquí hay una patente para un circuito externo que inicializará la SRAM. freepatentsonline.com/y2016/0071574.html

Habiendo trabajado con SRAM durante muchos años, puedo decirles que se encenderá con contenidos aparentemente aleatorios, aunque he visto dispositivos que se encienden con casi los mismos contenidos aleatorios cada vez. Si el ciclo de apagado es lo suficientemente corto (según las características de la fuente de alimentación y la cantidad y el valor de los capacitores de derivación), pueden permanecer grandes fragmentos de datos escritos previamente en la SRAM a través de los ciclos de encendido, aunque el contenido se dañará.

Un solo bit se almacena en una SRAM en un circuito de 6 o más transistores. Si desea un comportamiento de reinicio de encendido definido para la SRAM, cada celda de RAM necesitaría solo más de 6 transistores. El área de chips 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 restablecimiento en serie requeriría un oscilador, 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 encendido en serie, pueden ocurrir 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 iniciar el programa.

Hacer algunos de los transistores un poco más grandes que otros sesgaría las probabilidades de unos contra ceros. En muchas partes, los transistores se equilibrarán dentro de las tolerancias de fabricación, lo que significa que algunos bits estarán sesgados hacia ceros mientras que otros estarán sesgados hacia unos. Dudo que las diferencias de tamaño deban 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 que está desequilibrada consumiría corriente adicional para cambiar la celda a la dirección desfavorable.