SRAM не пустой при включении, это нормально?

19

Я наконец-то закончил свою плату памяти Z80, но был разочарован, увидев, что она не работает должным образом (простой тест NOP с адресными линиями, подключенными к некоторым светодиодам), так как счетчик быстро вышел из-под контроля, а не увеличился, как должен. Тем не менее, я не из тех, кто сдался, и после тридцати минут непрерывного тестирования, чтобы показать отсутствие коротких замыканий и всех правильных соединений, я наконец решил проверить, включается ли чип SRAM со всеми сохраненными нулями. Я хорошо знаю, что SRAM (если не энергонезависимый, который не является моим конкретным чипом) потеряет все свое содержимое при потере мощности, но я всегда предполагал, что он будет заполнен нулями (то есть «пустым»), когда он восстановится мощность. SRAM, который я использую, кажется, случайным образом заполнен 1 и 0 каждый раз при сбросе питания. Он никогда не помнит никаких данных, но он не загружается пустым. Это на самом деле не проблема, так как я могу просто написать небольшую программу в ПЗУ, чтобы загрузить все 0 в ОЗУ при включении питания, хотя я все еще хотел бы знать, так ли это должно работать SRAM или нет. Благодарность!

Изменить: я забыл упомянуть, что после использования ПЗУ для загрузки 0 в SRAM система работала нормально, так что это действительно было проблемой.

KeatonB
источник
7
Вы можете использовать SRAM для генерации случайных чисел. Это обычно, как мы делаем это, если нам нужно только одно случайное семя.
B Degnan
6
@bdegnan Однажды, может быть. Состояние включения SRAM обычно предсказуемо для любой части.
duskwuff

Ответы:

36

Если у вас не запрограммировано начальное состояние, оно будет более или менее случайным. Хотя это может отличаться в зависимости от реализации SRAM. Вы также говорите «пустым». Кто-то может подумать, что random более «пустой», чем все 0.

Память SRAM сохраняет память на инверторах друг за другом.

простой срам

Это формирует бистабильную систему (два очень устойчивых состояния с метастабильностью, разделяющей их). Таким образом, при включении инверторы на короткое время становятся метастабильными.

Это происходит потому, что по мере увеличения напряжения (от включения) и NMOS, и PMOS инверторов с обратной связью будут «одинаково» включены, удерживая оба битовых узла на половине напряжения питания (это метастабильное состояние). В конечном счете, некоторый тепловой шум (или любой процесс, который вносит изменения) толкает или понижает это значение немного или немного выше. В этот момент битовые узлы переходят в одно из своих бистабильных состояний.

  • В качестве примера рассмотримQзнак равноQ'знак равноВsUппLY2
  • Затем, некоторый тепловой шум на Q увеличивает напряжение доВsUппLY2+δ
  • Теперь NMOS кормление Q 'включается немного больше. И PMOS, питающий Q ', отключается чуть больше. Так что Q 'тянет вниз от до .ВsUппLY2ВsUппLY2-δ
  • Далее, поскольку напряжение на затворе управляющего узла Q полевого транзистора уменьшается, PMOS включается немного больше (и NMOS выключается больше). Это приводит к дальнейшему увеличению Q к подаче. И это быстро привязывает Q 'к 0 и Q к 1.

Фактически, есть даже статья «Состояние SRAM при включении питания как идентификационный отпечаток пальца и источник истинных случайных чисел»

Один очень полезный сюжет, содержащийся в статье, приведен ниже. Пунктирная линия показывает увеличение напряжения питания:

метастабильность при включении

  • С левой стороны все ровно. В этом случае случайное изменение из-за температуры или другого числа факторов приводит битовый узел в одно или другое состояние.
  • На правой стороне есть битовый узел, который наклонен (целенаправленно или иным образом) для большей вероятности инициализации в определенном состоянии.

В зависимости от того, как был изготовлен каждый битовый узел в SRAM, который вы используете в настоящее время, у вас будет более или менее одна из двух вышеописанных ситуаций. В обоих случаях, если вы не намеренно исказили SRAM, начальные результаты будут выглядеть более или менее случайными. В левой ситуации каждое последующее включение будет генерировать больше случайных паттернов. В правой ситуации первоначальный запуск будет казаться случайным. Но дальнейшее усиление приведет к тому, что SRAM будет стремиться к дальнейшему определенным состояниям.

jbord39
источник
Вы знаете, я действительно думал, что именно поэтому он загружался случайно. Я использовал защелку NOR как часть цепи, и она будет сбрасываться случайным образом при включении питания. Благодарность!
KeatonB
Я думал, что вы могли бы разработать чипы SRAM, чтобы они включались в известном состоянии. Ты можешь?
Джон Дворак
2
@JanDvorak: Да, вы можете. Но это не значит, что это обычно делается, особенно в SRAM, которая не зависит от конкретного приложения. Я думаю, что это стоит дороже, и с какой целью? Это редко будет одним и тем же начальным состоянием, требуемым для потребителей.
jbord39
@ jbord39 Может ли это помочь мне встроить загрузчик в память и избежать использования дополнительного чипа ПЗУ для загрузки ОС? Поможет ли это сократить расходы?
Джон Дворак
2
@JanDvorak: для определенных приложений битовые ячейки могут быть перекошены или смещены для запуска в указанных состояниях. Но на самом деле цена того не стоит, потому что каждому клиенту нужны разные начальные состояния. Гораздо проще и экономичнее просто инициализировать его с помощью внешней схемы (например, ПЗУ). Я предполагаю, что они могли бы встроить некоторые программируемые схемы, чтобы вы могли записать их в желаемые начальные состояния, или какую-то другую схему. Но это звучит дорого, когда у вас уже есть схема для записи / чтения в ОЗУ. Итак, просто напишите желаемое состояние.
jbord39
5

Проработав с SRAM в течение многих лет, я могу сказать вам, что он будет работать с, казалось бы, случайным контентом, хотя я видел устройства, которые каждый раз включали почти одинаковый случайный контент. Если цикл отключения питания достаточно короткий (в зависимости от характеристик источника питания и количества и значения обходных конденсаторов), большие фрагменты ранее записанных данных могут задерживаться в SRAM в циклах питания - хотя содержимое будет повреждено.

Скотти Верде
источник
2

Один бит хранится в SRAM в цепи из 6 или более транзисторов. Если вам нужно определенное поведение при сбросе питания для SRAM, для каждой ячейки ОЗУ потребуется более 6 транзисторов. Необходимая площадь микросхемы будет существенно больше, а микросхемы SRAM будут дороже. Это параллельное включение питания всех битов одновременно. Для последовательного сброса потребуются осциллятор, счетчик адресов и достаточно времени при включении питания для последовательной перезагрузки всех битов или байтов ОЗУ. Если процессор получает доступ к SRAM до завершения последовательного сброса при включении питания, могут возникнуть ошибки и данные могут быть потеряны или изменены.

Существуют среды программирования для микропроцессоров с подробным отображением памяти в нескольких областях ОЗУ. Вы можете определить область со сбросом при включении питания или без него, как того требует приложение. Возможно несколько разных областей в одной и той же SRAM. Не всегда необходимо сбрасывать всю SRAM при запуске программы.

Uwe
источник
3
Создание некоторых из транзисторов немного больше, чем другие, исказило бы вероятность единичных и нулевых. Во многих частях транзисторы будут сбалансированы с учетом производственных допусков, что означает, что некоторые биты будут смещены в сторону нулей, а другие - в сторону единиц. Я сомневаюсь, что различия в размерах должны быть очень большими, чтобы смещать поведение запуска в подавляющем большинстве в одном направлении; Производители ОЗУ могли легко смещать вещи последовательно, если бы была какая-либо причина, но несбалансированная ОЗУ потребляла бы дополнительный ток, чтобы переключить ячейку в неблагоприятное направление.
суперкат