SRAM nie jest pusty po włączeniu, czy to normalne?

19

W końcu skończyłem swoją kartę pamięci Z80, ale byłem rozczarowany, widząc, że nie działa ona poprawnie (prosty test NOP z liniami adresowymi podłączonymi do niektórych diod LED), ponieważ licznik szybko wymknął się spod kontroli zamiast zwiększać tak, jak powinien. Jednak nie jestem kimś, kto się poddaje i po około trzydziestu minutach ciągłości testów, aby odsłonić brak zwarć i wszystkie prawidłowe połączenia, w końcu pomyślałem, aby sprawdzić, czy układ SRAM włącza się z zapisanymi zerami. Wiem doskonale, że SRAM (o ile nieulotny, którego nie ma mój konkretny układ) straci całą swoją zawartość po utracie mocy, ale zawsze zakładałem, że po odzyskaniu będzie wypełniony zerami (tj. „Pustymi”). moc. Używana przeze mnie pamięć SRAM wydaje się być losowo wypełniana zerami i zerami za każdym razem, gdy moc jest resetowana. Nigdy nie zapamiętuje żadnych danych, ale nie ładuje się puste. To naprawdę nie jest problem, ponieważ mogę po prostu napisać mały program w pamięci ROM, aby załadować wszystkie zera do pamięci RAM po włączeniu zasilania, chociaż nadal chciałbym wiedzieć, czy tak właśnie powinna działać SRAM, czy nie. Dzięki!

Edycja: Zapomniałem wspomnieć, że po użyciu pamięci ROM do załadowania zer do SRAM system działał dobrze, więc to rzeczywiście był problem.

KeatonB
źródło
7
Możesz użyć mocy SRAM do generowania liczb losowych. Tak właśnie robimy, jeśli potrzebujemy tylko jednego losowego nasienia.
b degnan
6
@bdegnan Raz, może. Stan włączania SRAM jest zazwyczaj do pewnego stopnia przewidywalny.
duskwuff

Odpowiedzi:

36

O ile nie zaprogramujesz stanu początkowego, będzie on mniej więcej losowy. Chociaż może się to różnić w zależności od różnych implementacji SRAM. Mówisz również „puste”. Niektórzy mogą myśleć, że losowy jest „bardziej pusty” niż wszystkie zera.

Pamięć SRAM przechowuje pamięć na falownikach typu back to back.

prosty sram

Tworzy to układ bistabilny (dwa bardzo stabilne stany z metastabilnością dzielącą je). Tak więc po włączeniu zasilania falowniki są krótko metastabilne.

Dzieje się tak, ponieważ wraz ze wzrostem napięcia (od włączenia) zarówno NMOS, jak i PMOS falowników z tyłu do tyłu byłyby „równo” włączone, utrzymując oba bitnody na połowie napięcia zasilania (jest to stan metastabilny). W końcu jakiś hałas termiczny (lub jakikolwiek proces wprowadzający zmiany) popycha lub podnosi tę wartość w dół lub nieco w górę. W tym momencie bitnodes przechodzą w jeden z bistabilnych stanów.

  • Jako przykład rozważmy Q=Q=V.supply2)
  • Następnie pewien szum cieplny na Q zwiększa napięcie do V.supply2)+δ
  • V.supply2)V.supply2)-δ
  • Następnie, ponieważ napięcie na bramce sterującego węzła Q FET-a maleje, PMOS włącza się nieco więcej (a NMOS wyłącza się bardziej). To powoduje, że Q zwiększa się dodatkowo do zasobów. A to szybko przyciąga Q 'do 0 i Q do 1.

W rzeczywistości istnieje nawet artykuł „Stan zasilania SRAM jako identyfikujący odcisk palca i źródło prawdziwych liczb losowych”

Jedna bardzo pomocna fabuła zawarta w artykule znajduje się poniżej. Linia przerywana przedstawia wzrost napięcia zasilania:

metastabilność przy włączaniu

  • Po lewej stronie wszystko jest równe. W takim przypadku losowa zmiana spowodowana temperaturą lub inną liczbą czynników wprawia bitnode w jeden lub drugi stan.
  • Po prawej stronie znajduje się bitnode, który jest wypaczony (celowo lub w inny sposób), aby być bardziej prawdopodobne, że zainicjuje się w danym stanie.

W zależności od tego, w jaki sposób został wytworzony każdy bitnode w używanej obecnie pamięci SRAM, kończy się mniej więcej jedna z dwóch powyższych sytuacji. W obu przypadkach, chyba że celowo wypaczyłeś SRAM, początkowe wyniki wyglądałyby mniej więcej losowo. W sytuacji z lewej strony każde kolejne ulepszenie generowałoby więcej losowych wzorców. W sytuacji po prawej stronie początkowe uruchomienie byłoby pozornie losowe. Ale dalsze ulepszenia spowodowałyby, że SRAM miałaby tendencję do dalszych stanów.

jbord39
źródło
Wiesz, myślałem, że właśnie dlatego ładuje się losowo. Użyłem zatrzasku NOR jako części obwodu i resetuje się losowo po włączeniu. Dzięki!
KeatonB
Pomyślałem, że możesz zaprojektować układy SRAM, aby włączały się w znanym stanie. Czy możesz?
John Dvorak
2
@JanDvorak: Tak, możesz. Ale to nie znaczy, że jest to często wykonywane, szczególnie w SRAM, która nie jest specyficzna dla aplikacji. Sądzę, że to kosztuje więcej i w jakim celu? Rzadko będzie to taki sam stan początkowy wymagany u konsumentów.
jbord39,
@ jbord39 Czy to może mi pomóc upchnąć bootloader do pamięci i uniknąć dodatkowego układu ROM, z którego można załadować system operacyjny? Czy pomogłoby to obniżyć koszty?
John Dvorak
2
@JanDvorak: W przypadku określonych aplikacji komórki bitowe mogą być przekrzywione lub tendencyjne do uruchomienia w określonych stanach. Ale tak naprawdę koszt nie jest tego wart, ponieważ każdy klient potrzebuje różnych stanów początkowych. Inicjowanie go za pomocą zewnętrznych obwodów (takich jak ROM) jest znacznie łatwiejsze i tańsze. Sądzę, że mogą wbudować jakieś programowalne obwody, które pozwolą ci spalić w pożądanych stanach początkowych lub w innym schemacie. Ale to po prostu brzmi drogo, gdy wyraźnie masz już układ do zapisywania / odczytu w pamięci RAM. Więc po prostu napisz swój pożądany stan.
jbord39,
5

Pracując z SRAM od wielu lat, mogę powiedzieć, że będzie się ładować z pozornie losowymi treściami, chociaż widziałem urządzenia, które za każdym razem uruchamiają się z prawie taką samą losowo wyglądającą zawartością. Jeśli cykl wyłączania zasilania jest wystarczająco krótki (w zależności od charakterystyki zasilacza oraz liczby i wartości kondensatorów obejściowych), duże fragmenty wcześniej zapisanych danych mogą pozostać w pamięci SRAM poprzez cykle zasilania - chociaż zawartość zostanie uszkodzona.

Scottie Verde
źródło
2

Pojedynczy bit jest przechowywany w pamięci SRAM w obwodzie 6 lub więcej tranzystorów. Jeśli chcesz zdefiniować zachowanie przy resetowaniu zasilania SRAM, każda komórka RAM potrzebuje tylko więcej niż 6 tranzystorów. Potrzebny obszar chipów będzie znacznie większy, a chipy SRAM będą droższe. Jest to równoległa moc przy resetowaniu wszystkich bitów jednocześnie. Reset szeregowy wymagałby oszilatora, licznika adresów i wystarczającej ilości czasu podczas włączania zasilania, aby sekwencyjnie resety wszystkich bitów lub bajtów RAM. Jeśli procesor uzyska dostęp do SRAM przed zakończeniem resetu zasilania szeregowego, mogą wystąpić błędy i dane mogą zostać utracone lub zmienione.

Istnieją środowiska programistyczne dla mikroprocesorów ze szczegółowym mapowaniem pamięci kilku obszarów pamięci RAM. Można zdefiniować obszar z resetowaniem lub bez resetu, zgodnie z wymaganiami aplikacji. Możliwych jest kilka różnych obszarów w ramach tej samej pamięci SRAM. Resetowanie całej pamięci SRAM przy uruchamianiu programu nie zawsze jest konieczne.

Uwe
źródło
3
Uczynienie niektórych tranzystorów nieco większymi od innych zniekształciłoby prawdopodobieństwo jedności względem zer. W wielu częściach tranzystory będą zrównoważone z tolerancjami produkcyjnymi, co oznacza, że ​​niektóre bity będą skierowane w stronę zer, podczas gdy inne będą skierowane w stronę zer. Wątpię, aby różnice w wielkości musiałyby być bardzo duże, aby w pierwszej kolejności wpłynąć na zachowanie podczas uruchamiania; Twórcy pamięci RAM mogliby łatwo konsekwentnie odchylać rzeczy, gdyby istniał jakikolwiek powód, ale niezrównoważona pamięć RAM zużywałaby dodatkowy prąd, aby zmienić komórkę w niekorzystnym kierunku.
supercat