Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2830.Встроенные микропроцессорные системы

..pdf
Скачиваний:
41
Добавлен:
15.11.2022
Размер:
52.65 Mб
Скачать

характерно для «чистой» флеш-памяти, в которую еще ни разу ничего не записывали. Если же разместить на плавающем затворе некоторое количество зарядов – свободных электронов, то они будут экранировать действие управляющего электрода, и такой транзистор вообще перестанет проводить ток. Это состояние – «логический ноль». Поскольку затвор «плавает» в толще изолятора (двуокиси кремния, SiO2), то сообщенные ему однажды заряды в покое никуда деться не могут. И записанная таким образом информация может храниться десятилетиями (производители обычно дают гарантию 10 лет, но на практике это время значительно больше).

Рис. 18. МОП-транзистор с плавающим затвором

В первых образцах EPROM (UV-EPROM – стирались ультрафиолетом) слой окисла между плавающим затвором и подложкой был достаточно толстым (50 нм) и работало все это довольно грубо. При записи на управляющий затвор подавали достаточно высокое положительное напряжение – до 36...40 В (что для микроэлектронной техники считается просто катастрофическим перенапряжением), а на сток транзистора – небольшое положительное. При этом электроны, которые двигались от истока к стоку, настолько ускорялись полем управляющего электрода, что барьер в виде изолятора между подложкой и плавающим затвором просто «перепрыгивали». Такой процесс называется еще инжекцией горячих электронов. Ток заряда при этом достигал миллиампера – можете себе представить, каково будет потребление всей схемы, если в ней одновременно заряжать хотя бы несколько тысяч ячеек. И хотя такой ток требовался на достаточно короткое время (хотя с точки зрения быстродействия схемы не такое уж и короткое – миллисекунды), это было огромным недостатком всех старых образцов

51

EPROM-памяти. Еще хуже другое: и изолятор, и сам плавающий затвор долго не выдерживали, постепенно деградируя, отчего количество циклов записи/стирания было ограничено несколькими сотнями, максимум – тысячами. Во многих образцах флеш-памяти (даже более поздних) была предусмотрена специальная схема для хранения карты «битых» ячеек – в точности так, как это делается в жестких дисках. В современных моделях такая карта, кстати, тоже имеется, однако число циклов стирания/записи возросло до сотен тысяч и даже миллионов.

Рассмотрим, как осуществлялось в этой схеме стирание. В упомянутой UV-EPROM при облучении ультрафиолетом фотоны высокой энергии сообщали электронам на плавающем затворе достаточный импульс, чтобы они «прыгали» обратно на подложку самостоятельно, без каких-либо электрических воздействий. В электрически стираемой памяти (EEPROM) использован «квантовый эффект туннелирования Фаулера – Нордхейма». При достаточно тонкой пленке изолятора (10 нм) электроны, если их слегка «подтолкнуть» не слишком высоким напряжением в нужном направлении, могут «просачиваться» через барьер, не перепрыгивая его. Старые образцы EEPROM именно так и работали: запись производилась «горячей инжекцией», а стирание – квантовым туннелированием. От этого они были довольно сложны в эксплуатации. Первые микросхемы EEPROM требовали два, а то и три питающих напряжения, причем подавать их при записи и стирании требовалось в определенной последовательности. Поэтому разработчики предпочитали использовать более дешевую, удобную, скоростную и надежную статическую память (SRAM), пристраивая к ней резервное питание от литиевых батареек, которые были достаточно дешевыми. Компания Dallas Semiconductor выпустила специальный тип NVRAM с батарейкой, встроенной прямо в микросхему.

Превращение EEPROM во Flash происходило по трем разным направлениям. Во-первых, усовершенствовалась конструкция самой ячейки. Для начала избавились от горячей инжекции. Вместо нее при записи стали также использовать квантовое туннелирование, как и при стирании. Если при открытом транзисторе подать на управляющий затвор достаточно высокое (но значительно меньшее, чем при горячей инжекции) напряжение, часть электронов, двигающихся через открытый транзистор от истока к стоку, «просочится» через изолятор и окажется на плавающем затворе. Потребление тока при записи снизилось

52

на несколько порядков. Хотя изолятор пришлось сделать еще тоньше, что обусловило довольно большие трудности с внедрением этой технологии в производство.

Во-вторых, ячейку сделали несколько сложнее, пристроив к ней второй транзистор (обычный), который разделил вывод стока и считывающую шину всей микросхемы. Благодаря этому (вместе с отказом от горячей инжекции) удалось добиться значительного повышения долговечности – до сотен тысяч, а в настоящее время – до миллионов циклов записи/стирания. Кроме того, схемы формирования высокого напряжения и соответствующие генераторы импульсов записи/стирания перенесли внутрь микросхемы, отчего пользоваться такими типами памяти стало несравненно удобнее – они стали питаться от одного напряжения (5,0 или 3,3 В).

И наконец, в-третьих, изменилась организация доступа к ячейкам на кристалле (NAND и NOR Flash) [11, 12].

1.6. Иерархия памяти

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

Обычно относительно небольшого объема SRAM на кристалле процессора используется вместе с памятью DRAM большого объема вне кристалла процессора. Эта память в дальнейшем может быть объединена с памятью третьего уровня, такой как дисковое запоминающее устройство, имеющее очень большую емкость, но без произвольного доступа, что увеличивает время записи и чтения. Прикладной программист может и не знать, что память так фрагментирована. Использование рассмотренной выше схемы виртуальной памяти делает эти разнообразные технологии памяти такими, что, на взгляд программиста, он имеет дело с непрерывным адресным пространством.

Операционная система и/или аппаратные средства обеспечивают механизм трансляции адресов, который преобразует логический адрес в физический адрес доступной технологии памяти. Эта трансляция часто выполняется специализированной частью аппаратуры под назва-

нием TLB (translation look-aside buffer, или буфер быстрого преобразо-

53

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

1.6.1. Распределение, или карта памяти

Карта памяти процессора определяет, как адреса отображаются на аппаратуру. Общий размер адресного пространства ограничивается разрядностью адреса процессора. 32-разрядный процессор, например, может адресовать 232 ячеек, или 4 ГБ, полагая, что каждый адрес относится к одному байту. Разрядность адреса обычно совпадает с разрядностью слова (данных), за исключением 8-разрядных процессоров, у которых разрядность адреса обычно выше (16 бит). На рис. 19 в качестве примера приведена карта памяти процессора с архитектурой ARM CortexTM-M3.

Эта архитектура гарвардского типа, поэтому область А может быть доступна по своей магистрали, а области В и D – по своей. Это удваивает полосу пропускания.

Рис. 19. Карта памяти процессора с архитектурой

ARM CortexTM-M3

54

Некоторые реализации в кристалле этой архитектуры ограничивают ее карту памяти. Например, микроконтроллер Luminary Micro LM3S8962 имеет 256 КБ flash-памяти вместо допустимой flash-памяти 0,5 ГБ. Эта память отображается на пространство 0x00000000– 0x0003FFFF. Оставшееся пространство 0x00040000–0x1FFFFFFF оста-

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

LM3S8962 имеет 64 КБ SRAM, отображенные на 0x20000000– 0x2000FFFF, маленькую область в B. Он также содержит периферию (устройства), доступную через область C (0x40000000–0x5FFFFFFF). К этим устройствам относятся таймеры, ADC, GPIO, UART и другие устройства ввода-вывода. Каждое из устройств занимает небольшое число адресов памяти для реализации регистров, отображаемых на память. Процессор микроконтроллера может записывать данные в некоторые из них для конфигурирования устройств или выдачи данных на их выходы. Некоторые из регистров могут быть прочитаны для ввода данных из периферии. Небольшое количество адресов из области магистрали частной периферии используется для доступа кконтроллеру прерываний.

К LM3S8962 можно подключить дополнительно внешние память DRAM (в область Е) и устройства, такие как LCD-дисплей, слот MicroSD и USB-интерфейс. При этом остается много неиспользуемого адресного пространства. В архитектуре АРМ введен механизм под названием bit banding (привязка битов), который позволяет через неиспользуемые адреса осуществлять доступ к индивидуальным битам в памяти и периферии.

1.6.2. Блокнотная и кеш-память

Многие встроенные системы используют в своем составе память различных технологий. Некоторая память может быть доступна перед другой памятью. Говорят, что эта первая память является закрытой процессором. Например, закрытая память (SRAM) обычно используется для сохранения рабочих данных временно, пока процессор оперирует с ними.

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

(scratchpad).

55

Если закрытая память дублирует данные в удаленной памяти, автоматически копируя их туда и обратно, такую память называют кеш-

памятью.

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

Пусть процессор поддерживает виртуальную память и оборудован MMU для трансляции адресов, имеет карту памяти, как на рис. 18, и пусть некоторому процессу может быть разрешено использовать логические адреса из области D (1 ГБ). MMU может реализовать кеш в области В, достаточного объема. Когда программа выдает адрес памяти, MMU определяет, находится ли он в области В, и если да, то транслирует адрес и выполняет выборку. Если нет, то фиксируется промах кеш

иMMU управляет выборкой данных из вторичной памяти (область D) в кеш (область В). Если ячейки нет и в области D, то MMU фиксирует ошибку страницы, в результате программное обеспечение управляет перемещением данных из диска в память. Так программа создает иллюзию огромной памяти. Расплата за это – трудность в предсказании времени доступа.

Итак, кеш-память – это быстродействующая память буферного типа, заполняемая с умеренной скоростью из ОП. Кеш-память по сравнению с другими видами памяти MPS имеет минимальное время доступа

ииспользуется для хранения только тех данных, которые могут понадобиться CPU в ближайшее время.

ВМП находится небольшая кеш-память для команд и небольшая кеш-память для данных (разделенная кеш-память первого уровня). Кеш-память второго уровня расположена вне МП и соединена с ним через высокоскоростную магистраль. Эта кеш-память обычно не является разделенной и содержит смесь данных и команд. Ее размер гораздо больше. Кеш-память третьего уровня – это статическое оперативное запоминающее устройство (ОЗУ) в несколько мегабайт, работающее гораздо быстрее, чем динамическое ОЗУ. Обычно все содержимое кеш-памяти первого уровня находится в кеш-памяти второго уровня, а все содержимое кеш-памяти второго уровня находится в кеш-памяти третьего уровня.

56

Во всех типах кеш-памяти используется следующая модель. MM разделяется на блоки фиксированного размера, которые называются строками кеш-памяти. Строка кеш-памяти состоит из нескольких последовательных байт (обычно от 4 до 64). В любой момент несколько строк находятся в кеш-памяти. Когда происходит обращение к кеш-памяти, контроллер кеш-памяти проверяет, есть ли нужное слово в данный момент кеш-памяти. Если есть (попадание), то можно сэкономить время, требуемое на доступ к ОП. Если данного слова в кеш-памяти нет (промах), то какая-либо строка из нее удаляется, а вместо нее помещается нужная строка изMM или из кеш-памяти более низкогоуровня.

1.6.2.1. Кеш-память прямого отображения

Кеш-память прямого отображения является самым простым типом кеш-памяти. На рис. 20 приведен пример одноуровневой кеш-памяти, содержащей 1024 блока по 32 Б.

Каждый элемент кеш-памяти состоит из трех частей:

поле Tag (бирка) содержит старшие 17 разрядов адреса памяти, из которого поступил блок данных (адрес блока);

поле Valid (действительно) содержит сведения о достоверности данных;

поле Block содержит копию блока данных памяти.

Рис. 20. Кеш-память прямого отображения и формат адреса

В кеш-памяти прямого отображения данный блок может храниться только в одном месте по номеру блока. Когда процессор выдает адрес памяти, контроллер кеш-памяти выделяет из этого адреса 10 бит номера блока и использует их для поиска в кеш-памяти одного из 1024 элементов. Если этот элемент действителен, то производится сравнение поля Tag адреса и поля Tag кеш-памяти. Если поля равны, то попа-

57

дание, иначе – промах. В случае попадания слово считывается из кешпамяти. При промахе или недействительности блок вызывается из памяти и сохраняется в кеш-памяти, заменяя тот блок, который там был.

1.6.2.2.Ассоциативная по множеству кеш-память

Вкеш-памяти прямого отображения одноименные блоки MM конкурируют за право занять одну и ту же область в кеш-памяти. Если программе часто требуются ячейки с адресами 0х00000000 и 0х0000800000, то будут иметь место постоянные конфликты и каждое обращение повлечет за собой замещение нулевого блока. Чтобы разрешить эту проблему, нужно сделать так, чтобы одноименные блоки помещались в нескольких местах (множествах) кеш-памяти.

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

Если нужно поместить новый блок в кеш-память, то какой из старых блоков нужно заместить? Для этого хорошо подходит рассмотренный выше алгоритм LRU.

Обобщим параметры кеш-памяти:

m – разрядность адреса памяти;

M – величина адресного пространства в байтах, M = 2m; S – число множеств кеш, S = 2s;

E – число линий (входов) в множестве; B – размер блока в байтах, B = 2b;

t – число битов тега, t = m * s*b; C – общий размер кеш в байтах.

Таким образом, кеш может быть охарактеризована четверкой (m, S, E, B), а общий размер кеш составляет C = S*E*B Б.

1.6.2.3. Обновление кеш-памяти

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

58

В MPS c несколькими МП, разделяющими общую MM, также необходимо поддерживать когерентность, но уже и кеш этих МП.

Во всех решениях контроллер кеш-памяти разрабатывается так, чтобы кеш-память могла перехватывать запросы на магистрали, контролируя все запросы магистрали от других процессоров и устройств ввода-вывода, и предпринимать необходимые действия. Эти устройства называются кеш-памятью с отслеживанием (snooping cashe). Набор правил, которые выполняются кеш-памятью, процессорами и MM, чтобы предотвратить появление различных вариантов данных в нескольких блоках кеш-памяти, формирует протокол когерентности кеширования. Единица передачи и хранения кеш-памяти называется строкой или блоком кеш-памяти (32 или 64 Б).

Самый простой протокол когерентности кеширования называется сквозной записью (write through). В случае промаха кеш-памяти при записи слова, которое было изменено, оно записывается в MM. Строка, содержащая нужное слово, не загружается в кеш-память. В случае попадания при записи кеш обновляется, а слово плюс ко всему записывается в MM. Всегда при обновлении кеш-памяти одновременно обновляется и основная память.

Рис. 21. Ассоциативная по множеству кеш и формат адреса

59

Другой вариант поведения при промахах по записи – загрузка кеш-памяти (политика заполнения по записи – write-allocate). Заполнения по записи эффективно, когда высока вероятность повторного обращения к слову, вызвавшему промах.

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

1.6.2.4. Протокол когерентности кеширования с обратной записью

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

Один из популярных протоколов с обратной записью – MESI. MESI – аббревиатура состояния кеш-памяти:

modified – блок действителен, основная память недействительна, копий блока не существует;

exclusive – блок только в этой кеш-памяти, основная память обновлена;

shared – в нескольких кешах содержатся одинаковые блоки, основная память обновлена;

invalid – блок кеш-памяти содержит недействительные данные. При загрузке процессора все элементы кеш-памяти помечаются

как недействительные I. При первом считывании из MM нужная строка вызывается в кеш-память и помечается как Е. Другой процессор (процессор 2) может вызвать ту же строку и поместить ее в кеш, но при отслеживании исходный держатель строки (процессор 1) узнает, что он уже не единственный, и объявляет, что у него есть копия. Обе копии помечаются состоянием S.

Процессор 2 производит запись в строку кеш-памяти в состоянии S и помещает сигнал о недействительности на магистраль, сообщая всем другим процессорам, что нужно отбросить свои копии. Соответствующая строка в процессоре 2 переходит в состояние М.

60