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.
Respostas:
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.
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.
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:
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.
fonte
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.
fonte
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.
fonte