Чому більшість енергонезалежних пам’яток мають логічний 1 як стан за замовчуванням?


14

Я використовував енергонезалежну пам'ять , наприклад EEPROM та FLASH, у вбудованих програмах, і я завжди виявляв, що бітові місця невикористаної пам'яті (EEPROM / FLASH) завжди встановлені 1за замовчуванням. Чому це використовується замість 0?

Наприклад, адреса, скажімо, 0-а адреса (перший байт пам'яті), якщо її не записує користувач, завжди зберігається 0xffі не зберігається 0x00. Чому саме люди, які побудували мікросхеми пам’яті, зберегли це таким чином? Я впевнений, що збереження місця в пам'яті за замовчуванням, як 0xffце забезпечить певну перевагу або щось важливе для виробника.

У чому причина цієї структури в мікросхемах пам'яті?

Відповіді:


20

Я збираюся обговорити програмування флеш-пам’яті, але багато матеріалу буде подібне до EEPROM (Електрично програмоване програмоване ПЗУ), оскільки флеш-пам’ять отримана від EEPROM в середині 1980-х. Як описано нижче, з фізичної точки зору стан за замовчуванням дорівнює 1. Але що ще більш важливо, я збираюся пояснити , чому це стан за замовчуванням - ви можете не просто довільно програму поверх того , що вже запрограмований в минулий раз.

Спалах NOR майже завжди вибирається для програмного спалаху, оскільки інтерфейс найкраще підходить для розміщення даних у картці пам'яті мікроконтролера - повна адреса та шини даних імітують оперативну пам’ять та дозволяють довільно отримувати доступ до будь-якого місця. Дані можна читати по одному слову, де слово визначається як ширина даних мікроконтролера, як правило, 8, 16 або 32-біт. NAND спалах, з іншого боку, був розроблений для заміни жорстких дисків і працює послідовно.

Однак програмування стає дещо складнішим. Як уже згадувалося, стан за замовчуванням для спалаху NOR та інших енергонезалежних пам’яток, таких як спалах NAND, EEPROM і навіть EPROM, є логікою 1. Ви не можете програмувати 1 на цих пристроях, ви можете програмувати лише 0. Так, наприклад, якщо у вас є байт, що містить 0x0123, і ви хочете змінити його на 0x3210, ви не можете зробити це безпосередньо, як записувати байт в оперативну пам'ять.

Натомість біти в пам'яті повинні бути стерті, що переводить їх у стан, що вже згадується, за замовчуванням. Це можна зробити лише блоками, а не словами. На Microchip PIC32, з яким я працював останнім часом, мінімальний розмір блоку, який можна стерти, становить 4096 байт. Тож, якщо ви хотіли змінити лише одне слово (32-бітне), вам доведеться прочитати 4K пам'яті, стерти блок, а потім записати 4K пам'яті назад, щоб миготіти, але включити нове 32-бітове значення за потребою. Це стирання може зайняти деякий час - добру частину секунди.

Далі - зображення комірки флеш-пам’яті. Flash зберігає дані, видаляючи або ставлячи електрони на плаваючі ворота. Коли електрони присутні на плавучому затворі, через транзистор не протікає струм, що вказує на 0. Коли електрони виймаються з плавучого затвора, транзистор починає проводити, вказуючи на 1. (Це умовно - це могло бути іншим способом, але потрібні інвертори для всіх рядків даних.)

введіть тут опис зображення

Очистити операцію. За замовчуванням стан комірок флеш-пам'яті (однорівнева флеш-пам’ять NOR) - 1, оскільки плаваючі ворота не несуть негативних зарядів. Видалення комірки флеш-пам’яті (скидання на 1) досягається застосуванням напруги через джерело та контрольний затвор (слово слова). Напруга може бути в діапазоні від -9В до -12В. А також застосувати до джерела близько 6В. Електрони в плаваючих воротах витягуються і передаються до джерела квантовим тунелюванням . Іншими словами, електрони тунелюються від плавучих воріт до джерела та підкладки.

Оскільки для стирання використовуються високі напруги, тому для стирання в блоках потрібна менша площа штампування. Тож напруги можна застосовувати лише до цілих рядів транзисторів одночасно.

Для запису флеш-пам’ять NOR можна запрограмувати або встановити на 0 за наступною процедурою. Під час написання на контрольний затвор (слово слова) подається висока напруга близько 12 В. Якщо до бітової лінії (зливний термінал) подається висока напруга близько 7 В, то в комірці зберігається 0. Зараз канал увімкнено, тому електрони можуть надходити від джерела до стоку. Струм зливу джерела є досить високим, щоб змусити деякі високоенергетичні електрони стрибати через ізолюючий шар на плаваючі ворота через процес, який називається впорскуванням гарячого електрона.

Для читання напруга близько 5 В подається на контрольний затвор і близько 1 В на злив. Стан комірки пам'яті відрізняється струмом, що протікає між зливом і джерелом.

Термін корисної експлуатації енергонезалежної пам’яті вимірюється за допомогою циклів стирання. Недоліком NOR є те, що кількість циклів стирання приблизно 1/10, ніж NAND-пам'яті. Багато версій PIC32 дозволяють оновлювати флеш-пам’ять лише 1000 разів, набагато менше типових 100 000 циклів стирання для EEPROM.

Тож не так важливо, якщо дизайнери зробили стан за замовчуванням 1 або 0 (вони обрали значення, що дозволило найпростішу реалізацію); найважливіше - спершу потрібно стерти блок спалаху (що вимагає часу), а потім перепрограмувати весь блок (навіть якщо одне слово змінюється (що вимагає значної кількості оперативної пам’яті).

Цей блок стирання пристрою повертається до перших EPROM (Erasable Programmable ROM), які переходили до EEPROM. Код був запрограмований на мікросхеми (як 16KB 27128) і розміщений у розетках. Ці фішки мали маленьке вікно вгорі, яке дозволяло світлу світити на штампі. Коли програму довелося змінити, чіпи поміщали в УФ-ластик на 20 хвилин або близько того, що стерло б весь мікросхема. Тоді чіп буде запрограмований за допомогою нової програми.

Деякі EEPROM вимагають стирання блоків пам'яті перед програмуванням; інші дозволяють одночасно писати байт (контролер EEPROM фактично спочатку стирає байт та програми, які він програє).


2
Це чудовий огляд того, як доступ до енергонезалежних спогадів, але він насправді не стосується ЧОМУ стертого стану "1", а не "0".
akohlsmith

1
@akohlsmith Я додав, що ця інформація буде більш повною. Але справжнє питання не в тому, чи є клітинка за замовчуванням 1 або 0; це можна змінити, лише встановивши інвертори на кожен рядок даних. Справжнє питання полягає в тому, чому в першу чергу існує стан за замовчуванням; тобто ви можете записувати 0, а не 1 - останній вимагає стирання в блоках.
tcrosley

1
Я не погоджуюся, питання видалося досить конкретним щодо того, чому стираний стан "встановлений", а не "зрозумілий" - все одно я люблю вашу відповідь, і +1 від мене (не що я хтось, просто випадковий Інтернет-незнайомець, який любить Ваша відповідь)
akohlsmith

1
@akohlsmith Я погоджуюся з вами, що за умовою встановлені стани зазвичай дорівнюють 1, і це насправді так, як працюють окремі клітини. Потрібно було б трохи додаткового обладнання (не так багато), щоб повернути його назад, і в цьому не було потреби: 1, оскільки за замовчуванням було просто чудово.
tcrosley

Це чудова відповідь. Але я думаю, що це буде простіше зрозуміти, якщо сказати: ви не можете програмувати 1 на цих пристроях, ви можете програмувати лише 0. Якщо ви хочете запрограмувати 1, потрібно стерти пристрої та відновити весь блок до 1-го стану за замовчуванням, а потім запрограмувати 0 за необхідності. . Наприклад, в програмі , 0101щоб 1010, ви повинні зробити в цій послідовності: 0101-> (очищення) -> 1111-> (програма 0 ') -> 1010. Або по суті, це означає, що запис 1 і запис 0 виконуються з різною деталізацією .
smwikipedia

4

У сучасній флеш-пам’яті я не знаю жодної причини вибирати їх за нулями за замовчуванням. Читання проводиться за допомогою диференціальних підсилювачів струму, тому в принципі ви можете взяти вихід з будь-якої сторони. (Можливо, у перших EEPROM були більш прості схеми зчитування - я не впевнений.)

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

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

Коротка версія: фізики-напівпровідники та конструктори аналогових схем нічого не цікавлять ваші цифрові інтуїції. :-)


1

Я не впевнений, з чого це ви цитуєте, але, виходячи зі сторінки Вікіпедії для флеш-пам’яті, здається, це результат апаратного забезпечення флеш-пам’яті:

Однорівневий флеш NOR у своєму стандартному стані логічно еквівалентний двійковому значенню "1", тому що струм буде протікати по каналу при застосуванні відповідної напруги до керуючого затвора, так що напруга бітлайн буде знято ".

Якщо ви використовували інший тип спалаху, наприклад, NAND, стан за замовчуванням буде 1, оскільки вихід NAND дорівнює 1, коли вихід будь-якого з транзисторів нижче їх високої / низької порогової напруги.

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


1
Але з огляду на те, що між осередками та штифтами існує схема, що, як і більшість логічних конструкцій, ймовірно, по своїй суті виконує ряд неявних інверсій, чому стертий стан обов'язково використовується як "0", а не як "1"?
Кріс Страттон

Я не зовсім розумію ваше запитання - чи стан ERASE не використовується як "1"? Я прошу щодо цього (у розділі "ОПЕРАЦІЯ ТА КАРАКТЕРИСТИКА ЕЛЕКТРОННОГО КЛІТУ").
llee94

Якому електричному стану комірки відповідає сам логічний стан зовнішнього інтерфейсу, здається, майже довільним, оскільки між ними є кілька, ймовірно, неявних інвертуючих елементів ланцюга.
Кріс Страттон

1
@ChrisStratton Я вважаю, що Ilee94 сказав, що стертий стан - це фактично 1. Але це насправді довільно - якщо ви поставите інвертори на рядок даних, це було б так, як ви описали. 1, оскільки стан за замовчуванням просто вимагає трохи менше обладнання.
tcrosley

Або трохи більше апаратного забезпечення - це дійсно залежить від наявності непарної чи парної кількості неявно перевернутих елементів ланцюга між коміркою та виходом.
Кріс Страттон

1

ПЗУ та ПРОМ поверталися назад, коли доводилося маніпулювати додаванням металу в шар маски під час виготовлення або спалюючи його в програмуванні, і обидва процеси мали високий стан за замовчуванням при виробництві. Якщо встановити їх за замовчуванням на LOW, це коштувало б більше транзисторів, певним чином знизило зручність програмування або швидкість роботи.

З тих пір це стало умовою, тому що додавати інвертор в якийсь момент шляху даних в ці дні було б можливо.

Конвенція, можливо, почалася ще в часи масивів логічної пам'яті діодів, у яких діоди витягували рядки даних, коли до них зверталися, а невикористані слова пам'яті не мали б діодів замість усіх діодів. Більшість ранніх стандартів цифрової логіки активно витягувалися НИЗКО і плавали високо, якщо ні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.