SRAM não está em branco na inicialização, isso é normal?

19

Finalmente terminei minha placa de memória Z80, mas fiquei desapontado ao ver que ela não estava funcionando corretamente (teste simples de NOP com as linhas de endereço conectadas a alguns LEDs), pois o contador rapidamente saiu do controle, em vez de aumentar como deveria. No entanto, não sou de desistir e, após cerca de trinta minutos de testes de continuidade para desvendar curtos-circuitos e todas as conexões adequadas, finalmente pensei em verificar se o chip SRAM estava ligando com todos os 0s armazenados. Estou ciente de que a SRAM (a menos que não seja volátil, o que meu chip em particular não é) perderá todo o seu conteúdo com a perda de energia, mas eu sempre presumi que ele seria preenchido com zeros (ou seja, "vazio") quando recuperasse poder. A SRAM que estou usando parece ser preenchida aleatoriamente com 1 e 0 toda vez que a energia é redefinida. Ele nunca se lembra de nenhum dado, mas não está carregando vazio. Isso não é realmente um problema, pois posso simplesmente escrever um pequeno programa em ROM para carregar todos os 0 na RAM na inicialização, embora eu ainda queira saber se é assim que a SRAM deve estar funcionando ou não. Obrigado!

Edit: Eu esqueci de mencionar que depois de usar a ROM para carregar 0 na SRAM, o sistema funcionou bem, então esse era realmente o problema.

KeatonB
fonte
7
Você pode usar a SRAM para gerar números aleatórios. Geralmente é assim que fazemos se precisamos apenas de uma semente aleatória.
b Degnan
6
@bdegnan Uma vez, talvez. O estado de inicialização da SRAM tende a ser um pouco previsível para qualquer parte.
Duskwuff de

Respostas:

36

A menos que você tenha um estado inicial programado, será mais ou menos aleatório. Embora isso possa variar com diferentes implementações de SRAM. Você também diz "em branco". Alguns podem pensar que o acaso é "mais fraco" do que todos os zeros.

A memória SRAM armazena memória em inversores inversos.

sram simples

Isso forma um sistema biestável (dois estados muito estáveis ​​com metaestabilidade dividindo-os). Assim, na energização, os inversores inversos são brevemente metaestáveis.

Isso acontece porque, à medida que a tensão aumenta (ao ser ligada), o NMOS e o PMOS dos inversores inversos ficam 'igualmente', mantendo os dois bits na metade da tensão de alimentação (este é o estado metaestável). Eventualmente, algum ruído térmico (ou qualquer processo que introduza variação) aumenta ou diminui um pouco esse valor. Nesse ponto, os nós de bits se ajustam a um de seus estados biestáveis.

  • Q=Q=Vsvocêppeuy2
  • Vsvocêppeuy2+δ
  • Vsvocêppeuy2Vsvocêppeuy2-δ
  • Em seguida, como a tensão no portão do nó Q do FET diminui, o PMOS liga um pouco mais (e o NMOS desliga mais). Isso faz com que Q aumente ainda mais o suprimento. E isso rapidamente encaixa Q 'em 0 e Q em 1.

De fato, existe até um artigo "Estado SRAM de inicialização como uma impressão digital de identificação e fonte de verdadeiros números aleatórios"

Um gráfico muito útil contido no artigo está abaixo. A linha pontilhada representa a tensão de alimentação aumentando:

metaestabilidade na energização

  • No lado esquerdo, tudo é igual. Nesse caso, a variação aleatória devido à temperatura ou outro número de fatores colide o nó de bit em um estado ou no outro.
  • No lado direito, há um nó de bits que é inclinado (intencionalmente ou não) para ter muito mais probabilidade de inicializar em um estado específico.

Dependendo de como cada nó de bit na SRAM que você está usando atualmente foi fabricado, você acaba com mais ou menos uma das duas situações acima. Nos dois casos, a menos que você intencionalmente incline a SRAM, as saídas iniciais parecerão mais ou menos aleatórias. Na situação da esquerda, cada powerup subsequente geraria mais padrões aleatórios. Na situação da direita, a inicialização inicial seria aparentemente aleatória. Porém, novas energias levariam a SRAM a promover mais certos estados.

jbord39
fonte
Você sabe que eu realmente pensei que seria por isso que ele estava carregando aleatoriamente. Eu usei uma trava NOR como parte de um circuito e ela seria reiniciada aleatoriamente na inicialização. Obrigado!
KeatonB 31/07/16
Eu pensei que você poderia projetar chips SRAM para que eles ligassem em um estado conhecido. Você pode?
John Dvorak
2
@JanDvorak: Sim, você pode. Mas isso não significa que é comumente feito, especialmente no SRAM, que não é específico do aplicativo. Eu acho que custa mais e com que finalidade? Raramente será o mesmo estado inicial necessário para os consumidores.
Jbord39
@ jbord39 Isso poderia me ajudar a colocar o gerenciador de inicialização na memória e evitar ter um chip ROM extra para carregar o sistema operacional? Ajudaria a reduzir os custos?
John Dvorak
2
@JanDvorak: Para aplicativos específicos, as células de bits podem ser inclinadas ou enviesadas para iniciar nos estados especificados. Mas realmente o custo não vale a pena, porque cada cliente precisaria de estados iniciais diferentes. É muito mais fácil e econômico apenas inicializá-lo com circuitos externos (como ROM). Eu acho que eles poderiam criar alguns circuitos programáveis ​​para permitir a gravação nos estados iniciais desejados ou em algum outro esquema. Mas isso parece caro quando você claramente já possui o circuito para gravar / ler na RAM. Então, basta escrever o seu estado desejado.
Jbord39
5

Tendo trabalhado com a SRAM por muitos anos, posso dizer que ele será ativado com conteúdo aparentemente aleatório, embora eu tenha visto dispositivos que ligam quase o mesmo conteúdo de aparência aleatória todas as vezes. Se o ciclo de desligamento for curto o suficiente (dependendo das características da fonte de alimentação e do número e valor dos capacitores de bypass), grandes fragmentos de dados gravados anteriormente poderão permanecer na SRAM através de ciclos de energia - embora o conteúdo esteja corrompido.

Scottie Verde
fonte
2

Um único bit é armazenado em uma SRAM em um circuito de 6 ou mais transistores. Se você deseja um comportamento de redefinição de energia definido para a SRAM, cada célula de RAM precisaria de mais de 6 transistores. A área de chip necessária será substancialmente maior e os chips SRAM serão mais caros. Esta é uma energia paralela na redefinição de todos os bits ao mesmo tempo. Uma redefinição serial exigiria um oszilator, um contador de endereços e tempo suficiente durante a inicialização para redefinir todos os bits ou bytes de RAM sequencialmente. Se o processador acessar a SRAM antes que a reinicialização serial seja concluída, podem ocorrer erros e os dados podem ser perdidos ou alterados.

Existem ambientes de programação para microprocessadores com mapeamento detalhado da memória de várias áreas da RAM. Você pode definir uma área com ou sem reinicialização ao ligar, conforme exigido pelo aplicativo. São possíveis várias áreas diferentes dentro da mesma SRAM. Nem sempre é necessário redefinir toda a SRAM no início do programa.

Uwe
fonte
3
Tornar alguns dos transistores um pouco maiores que outros distorceria as probabilidades de uns versus zeros. Em muitas partes, os transistores serão equilibrados dentro das tolerâncias de fabricação, o que significa que alguns bits serão direcionados para zeros, enquanto outros serão direcionados para os zeros. Duvido que as diferenças de tamanho precisem ser muito grandes para influenciar o comportamento da inicialização de maneira esmagadora em uma direção; Os fabricantes de RAM poderiam facilmente influenciar as coisas de maneira consistente, se houvesse alguma razão para fazê-lo, mas uma RAM desequilibrada consumiria corrente extra para mudar a célula para a direção desfavorecida.
Supercat