Почему большинство энергонезависимой памяти имеют логический 1 в качестве состояния по умолчанию?


14

Я использовал энергонезависимую память , такую ​​как EEPROM и флэш-память, во встроенных приложениях, и я всегда обнаруживал, что битовые ячейки неиспользуемой памяти (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, вы не можете сделать это напрямую, как запись байта в ОЗУ.

Вместо этого биты в памяти должны быть удалены, что переводит их в состояние 1 по умолчанию, которое уже упоминалось. Это можно сделать только блоками, а не словами. На микрочипе PIC32, с которым я работал в последнее время, минимальный размер блока, который можно стереть, составляет 4096 байт. Поэтому, если вы хотите изменить только одно слово (32-разрядное), вам придется прочитать 4 КБ памяти, стереть блок, а затем записать 4 КБ памяти обратно на флэш-память, но при необходимости добавив новое 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 (стираемым программируемым ПЗУ), которые перешли к 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"? Я спрашиваю об этом (в разделе «ЭКСПЛУАТАЦИЯ И ХАРАКТЕРИСТИКА КЛЕТОК ПАМЯТИ EEPROM»).
llee94

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

1
@ChrisStratton Я полагаю, что Ilee94 сказал, что стертое состояние на самом деле равно 1. Но это на самом деле произвольно - если вы поместите инверторы в линии данных, это будет так, как вы описали. 1 в качестве состояния по умолчанию просто требуется немного меньше оборудования.
tcrosley

Или немного больше аппаратных средств - это действительно зависит от того, есть ли нечетное или четное количество неявно инвертирующих элементов схемы между ячейкой и выходом.
Крис Страттон

1

ПЗУ и ПЗУ уходят в прошлое, когда нужно было манипулировать, добавляя металл в слой маски во время изготовления или сжигая его при программировании, и оба процесса имели высокое состояние по умолчанию при изготовлении. Установка по умолчанию на LOW стоила бы больше транзисторов, снизила бы удобство программирования или скорость работы.

С тех пор это стало общепринятым, потому что добавление инвертора в какой-то момент в пути данных в эти дни было бы возможно.

Соглашение могло начаться во времена массивов логической памяти с диодами, в которых были диоды для снятия линий данных, когда они были адресованы, и у неиспользуемых слов памяти не было бы диодов вместо всех диодов. Большинство ранних стандартов цифровой логики активно притягивались низко и, если нет, поднимались высоко.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.