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


19

Нарешті я закінчив свою плату пам’яті Z80, але розчарувався, побачивши, що вона не працює належним чином (простий тест NOP з адресними лініями, підключеними до деяких світлодіодів), оскільки лічильник швидко вийшов з-під контролю, а не наростаючи, як слід. Однак я не один, хто повинен відмовлятися, і приблизно через тридцять хвилин безперервного тестування, щоб виявити відсутність коротких замикань та всіх належних з'єднань, я нарешті подумав перевірити, чи працює мікросхем SRAM з усіма збереженими 0-мами. Я добре знаю, що SRAM (якщо тільки енергонезалежний, який не є моїм чіпом) втратить весь свій вміст при втраті потужності, але я завжди вважав, що коли він відновиться, він заповниться 0 (тобто "порожній") потужність. SRAM, який я використовую, здається, випадковим чином заповнюється значеннями 1 і 0 щоразу, коли потужність скидається. Він ніколи не пам'ятає жодних даних, але він не завантажується порожнім. Це насправді не проблема, оскільки я можу просто написати невелику програму в ПЗУ для завантаження всіх 0 в оперативну пам'ять при включенні живлення, хоча я все одно хотів би знати, чи так функціонує SRAM чи ні. Спасибі!

Редагувати: я забув згадати, що після використання ПЗУ для завантаження 0-х у SRAM система працювала нормально, тому це справді було проблемою.


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

6
@bdegnan Один раз, можливо. Стан включення SRAM, як правило, дещо передбачуваний для будь-якої частини.
сутінки

Відповіді:


36

Якщо у вас не запрограмовано початковий стан, воно буде більш-менш випадковим. Хоча це може відрізнятися в різних реалізаціях SRAM. Ви також говорите "пусто". Дехто може подумати, що випадковий "бланкер", ніж усі 0.

Пам'ять SRAM зберігає пам’ять на інверторах спини та назад.

простий срам

Це утворює бістабільну систему (два дуже стійких стани, метастабільність яких розділяє їх). Таким чином, при включенні живлення інвертори спина до спини ненадовго є метастабільними.

Це відбувається тому, що коли напруга піднімається (від включення), і NMOS, і PMOS спини до заднього інвертора будуть «однаково» включені, тримаючи обидва бітових вузла на половині напруги живлення (це метастабільний стан). Врешті-решт якийсь тепловий шум (або будь-який процес, який вносить зміни) штовхає або тягне цю величину трохи вниз або вгору. У цей момент біткоди перехоплюються в один із своїх бістабільних станів.

  • Як приклад, розглянемо Q=Q'=Vсуppлу2
  • Далі деякий тепловий шум на Q збільшує напругу до Vсуppлу2+δ
  • Vсуppлу2Vсуppлу2-δ
  • Далі, оскільки напруга у воріті Q-вузла, що веде FET, зменшується, PMOS вмикається трохи більше (а NMOS вимикається більше). Це призводить до подальшого збільшення Q до постачання. І це швидко прив'язує Q 'до 0 і Q до 1.

Насправді є навіть стаття "Power-Up SRAM State як ідентифікаційний відбиток пальців і джерело справжніх випадкових чисел"

Один дуже корисний сюжет, який міститься в статті, знаходиться нижче. Пунктирна лінія являє собою посилення напруги живлення:

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

  • З лівого боку все рівно. У цьому випадку випадкове коливання через температуру чи іншу кількість факторів перетворює біт-вузол в той чи інший стан.
  • Праворуч є біткод, котрий перекошений (цілеспрямовано чи іншим способом), щоб набагато більше шансів ініціалізуватися у певному стані.

Залежно від того, як було виготовлено кожен біт-код у SRAM, який ви використовуєте в даний час, ви закінчите більше або менше однієї з двох вищезгаданих ситуацій. В обох випадках, якщо ви навмисно не перекосили SRAM, початкові результати будуть виглядати більш-менш випадковими. У лівій ситуації кожен наступний блок живлення створював би більше випадкових шаблонів. У правій ситуації початковий запуск був би, здавалося б, випадковим. Але подальші потужності можуть спричинити SRAM схильність до подальших певних станів.


Ви знаєте, що я насправді думав, що це буде причиною завантаження випадковим чином. Я використовував засувку NOR як частину ланцюга, і вона буде скидатися випадковим чином при включенні живлення. Спасибі!
KeatonB

Я думав, ви можете спроектувати мікросхеми SRAM, щоб вони працювали у відомому стані. Ти можеш?
Джон Дворак

2
@JanDvorak: Так, можна. Але це не означає, що це зазвичай робиться, особливо в SRAM, що не стосується програми. Я думаю, що це коштує дорожче і з якою метою? Рідко це буде однаковий початковий стан, необхідний для споживачів.
jbord39

@ jbord39 Чи не може це допомогти мені записати завантажувач у пам'ять та уникнути наявності зайвого чіпа ROM для завантаження ОС? Чи допоможе це зменшити витрати?
Джон Дворак

2
@JanDvorak: Для конкретних програм бітклітини можуть бути перекошеними або упередженими для запуску у визначених станах. Але насправді вартість цього не варта, адже кожному клієнту знадобляться різні початкові стани. Набагато простіше і економічніше просто ініціалізувати його за допомогою зовнішньої схеми (наприклад, ПЗУ). Я думаю, вони могли б побудувати в програмованій схемі, яка дозволить вам записати бажані початкові стани чи іншу схему. Але це просто звучить дорого, коли у вас вже є схема для запису / читання в ОЗУ. Отже, просто напишіть бажаний стан.
jbord39

5

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


2

Один біт зберігається в SRAM в ланцюзі з 6 і більше транзисторів. Якщо ви хочете, щоб для SRAM була визначена потужність відновлення скидання, для кожної комірки оперативної пам'яті знадобиться лише більше 6 транзисторів. Необхідна площа мікросхем буде значно більшою, а мікросхеми SRAM будуть дорожчими. Це паралельна потужність для скидання всіх бітів одночасно. Для послідовного скидання знадобиться осцилятор, лічильник адрес і достатньо часу під час живлення, щоб послідовно скинути всі біти оперативної пам'яті або байти. Якщо процесор отримує доступ до SRAM перед завершенням послідовного живлення після скидання, можуть виникнути помилки і дані можуть бути втрачені або змінені.

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


3
Зробити деякі транзистори трохи більшими, ніж інші, перекрутить вірогідність одиниць проти нулів. У багатьох частинах транзистори будуть врівноважені в межах допустимих допусків, тобто деякі біти будуть зміщені до нулів, а інші - упередженими. Я сумніваюся, що різниці в розмірах повинні бути дуже великими, щоб упереджувати поведінку при запуску переважно в одну сторону; Виробники оперативної пам’яті могли легко зміщувати речі послідовно, якщо для цього були якісь причини, але оперативна пам'ять, яка не врівноважена, витрачала б додатковий струм для переключення комірки в недоброзичливий напрямок.
supercat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.