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.
Odpowiedzi:
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.
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.
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:
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.
źródło
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.
źródło
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.
źródło