Я наконец-то закончил свою плату памяти Z80, но был разочарован, увидев, что она не работает должным образом (простой тест NOP с адресными линиями, подключенными к некоторым светодиодам), так как счетчик быстро вышел из-под контроля, а не увеличился, как должен. Тем не менее, я не из тех, кто сдался, и после тридцати минут непрерывного тестирования, чтобы показать отсутствие коротких замыканий и всех правильных соединений, я наконец решил проверить, включается ли чип SRAM со всеми сохраненными нулями. Я хорошо знаю, что SRAM (если не энергонезависимый, который не является моим конкретным чипом) потеряет все свое содержимое при потере мощности, но я всегда предполагал, что он будет заполнен нулями (то есть «пустым»), когда он восстановится мощность. SRAM, который я использую, кажется, случайным образом заполнен 1 и 0 каждый раз при сбросе питания. Он никогда не помнит никаких данных, но он не загружается пустым. Это на самом деле не проблема, так как я могу просто написать небольшую программу в ПЗУ, чтобы загрузить все 0 в ОЗУ при включении питания, хотя я все еще хотел бы знать, так ли это должно работать SRAM или нет. Благодарность!
Изменить: я забыл упомянуть, что после использования ПЗУ для загрузки 0 в SRAM система работала нормально, так что это действительно было проблемой.
Ответы:
Если у вас не запрограммировано начальное состояние, оно будет более или менее случайным. Хотя это может отличаться в зависимости от реализации SRAM. Вы также говорите «пустым». Кто-то может подумать, что random более «пустой», чем все 0.
Память SRAM сохраняет память на инверторах друг за другом.
Это формирует бистабильную систему (два очень устойчивых состояния с метастабильностью, разделяющей их). Таким образом, при включении инверторы на короткое время становятся метастабильными.
Это происходит потому, что по мере увеличения напряжения (от включения) и NMOS, и PMOS инверторов с обратной связью будут «одинаково» включены, удерживая оба битовых узла на половине напряжения питания (это метастабильное состояние). В конечном счете, некоторый тепловой шум (или любой процесс, который вносит изменения) толкает или понижает это значение немного или немного выше. В этот момент битовые узлы переходят в одно из своих бистабильных состояний.
Фактически, есть даже статья «Состояние SRAM при включении питания как идентификационный отпечаток пальца и источник истинных случайных чисел»
Один очень полезный сюжет, содержащийся в статье, приведен ниже. Пунктирная линия показывает увеличение напряжения питания:
В зависимости от того, как был изготовлен каждый битовый узел в SRAM, который вы используете в настоящее время, у вас будет более или менее одна из двух вышеописанных ситуаций. В обоих случаях, если вы не намеренно исказили SRAM, начальные результаты будут выглядеть более или менее случайными. В левой ситуации каждое последующее включение будет генерировать больше случайных паттернов. В правой ситуации первоначальный запуск будет казаться случайным. Но дальнейшее усиление приведет к тому, что SRAM будет стремиться к дальнейшему определенным состояниям.
источник
Проработав с SRAM в течение многих лет, я могу сказать вам, что он будет работать с, казалось бы, случайным контентом, хотя я видел устройства, которые каждый раз включали почти одинаковый случайный контент. Если цикл отключения питания достаточно короткий (в зависимости от характеристик источника питания и количества и значения обходных конденсаторов), большие фрагменты ранее записанных данных могут задерживаться в SRAM в циклах питания - хотя содержимое будет повреждено.
источник
Один бит хранится в SRAM в цепи из 6 или более транзисторов. Если вам нужно определенное поведение при сбросе питания для SRAM, для каждой ячейки ОЗУ потребуется более 6 транзисторов. Необходимая площадь микросхемы будет существенно больше, а микросхемы SRAM будут дороже. Это параллельное включение питания всех битов одновременно. Для последовательного сброса потребуются осциллятор, счетчик адресов и достаточно времени при включении питания для последовательной перезагрузки всех битов или байтов ОЗУ. Если процессор получает доступ к SRAM до завершения последовательного сброса при включении питания, могут возникнуть ошибки и данные могут быть потеряны или изменены.
Существуют среды программирования для микропроцессоров с подробным отображением памяти в нескольких областях ОЗУ. Вы можете определить область со сбросом при включении питания или без него, как того требует приложение. Возможно несколько разных областей в одной и той же SRAM. Не всегда необходимо сбрасывать всю SRAM при запуске программы.
источник