реклама на сайте
подробности

 
 
> MMU D-Cache I-Cache для ARM926EJ-S, Как работает и как настроить?
ZED
сообщение Dec 27 2010, 05:54
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 264
Регистрация: 17-04-07
Из: Москва
Пользователь №: 27 102



Доброго всем здравия!

Уважаемые специалисты, помогите разобраться с этими монстрами.
Имеется AT91SAM9260 на базе процессора ARM926EJ-S. Для повышения скорости работы нужно настроить:

1) MMU (Memory Management Unit) - Блок управления памятью. Он отвечает за управление доступом к памяти, запрашиваемым центральным процессором путем трансляции адресов виртуальной памяти в адреса физической памяти. MMU разделяет виртуальное адресное пространство на участки одинакового размера (4 Кб, 64 Кб или 1 Mb ) называемые страницами.
Процесс обращается к памяти с помощью адреса виртуальной памяти, который содержит в себе номер страницы и смещение внутри страницы. Процессор преобразует номер виртуальной страницы в адрес соответствующей ей физической страницы при помощи буфера ассоциативной трансляции.
Младшие n бит адреса (смещение внутри страницы) остаются неизменными. Старшие биты адреса представляют собой номер (виртуальной) страницы. MMU обычно преобразует номера виртуальных страниц в номера физических страниц используя TLB(Translation Lookaside Buffer) - Буфер Ассоциативной Трансляции.
Вопрос 1. Как настроить это MMU для указанного выше процессора? Как организовать и заполнить TLB? Как ее подключить к MMU и пользоваться ей?

2) Нужно настроить D-Cache (Data Cache - Кэш данных) и I-Cache (Instruction Cache - Кэш комманд процессора).
Кэш — это некий промежуточный буфер, содержащий информацию, которая может быть запрошена с наибольшей вероятностью. Доступ к данным в кэше идёт быстрее, чем выборка исходных данных из внешней памяти. Таким образом комманды и данные выбираются из быстрее и производительность растет.
Кэш состоит из набора записей. Каждая запись ассоциирована с данными, являющимися копией данных в основной памяти. Каждая запись имеет идентификатор, определяющий соответствие между элементами данных в кэше и их копиями в основной памяти.

Области (сегменты) основной памяти жёстко привязываются к строкам кэш-памяти (в каждой строке могут быть данные из фиксированного набора адресов), что значительно сокращает время поиска. С каждой ячейкой ОЗУ может быть связано более одной строки кэш-памяти. Таким образом, одна запись в Кэше может содержать несколько комманд (наиболе часто употребляемых) из сооветствующей области памяти.

Вопрос 2. Как инициализировать D-Cache и I-Cache? Как и когда (при каких условиях) их очищать? Как с ними работать?


Что имеется у меня: ARM926EJ-S Technical Reference Manual - написано много, очень грузно, четких инструкций не обнаружено. Много всяких режимов, я так и не понял какой нужен именно мне.
Имеется пример, а точнее функции от IAR, но ни в одном проекте они не применяются, т.е. функции нигдек не используются. Тем самым я не могу понять последовательность действий при инициализации вышеупомянутых модулей. Также есть пример из темы данного форума Производительность SAM9XE, непонятки с этим процом. Там есть как раз пример Translation Table, но не очень понятно как с ней работать и почему именно такие адреса.

В ARM926EJ-S еще есть некий регистр TTBR - Translation Table Base Register - я так понял, это регистр указателя начального (базового) адреса расположения TLB. Вопрос где хранить TLB и по какому адресу?


У меня никак не может сложиться общая картина совместной работы этих модулей. Буду признателен специалистам, которые смогут прояснить мне эти вопросы.

Сообщение отредактировал ZED - Dec 27 2010, 06:08
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ZED
сообщение Dec 28 2010, 10:01
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 264
Регистрация: 17-04-07
Из: Москва
Пользователь №: 27 102



Цитата
И какие в этом проблемы?

Да проблем с этим нет. Вы не могли бы мне объяснить назначения доменов и соответственно битов AP?

Вот привожу, что у меня получилось:

Небольшие уточнения, правильно ли я понимаю: TLB располагаем в конце SDRAM, основную программу вначале (я для кэшируемой области памяти выделил первые 32 Мб), инициализируем ее как Write-Back, переферию делаем некэшируемой. Все, TLB готов!

Если я хочу задать переменную в некэшируемой области памяти, то беру адрес, для которого TLB = 0, ну например 0x2350 0000. Тогда объявляем указатель:
Код
unsigned int *variable =  (unsigned int *) (0x2350 0000);
variable = 1234; // присваевыем, как пример, число переменной

P.S. SII, спасибо Вам за ссылку!

Сообщение отредактировал ZED - Dec 28 2010, 10:02
Go to the top of the page
 
+Quote Post
SII
сообщение Dec 29 2010, 10:00
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Цитата(ZED @ Dec 28 2010, 16:01) *
правильно ли я понимаю: TLB располагаем в конце SDRAM


Неправильно sm.gif TLB -- это внутренний узел устройства управления памятью (MMU), а посему в памяти ну никак находиться не может. Говоря упрощённо, TLB -- это кэш-память, в которой хранятся последние использованные строки таблиц переадресации. А вот эти самые таблицы действительно хранятся в памяти, откуда MMU их по мере надобности считывает и кэширует в TLB.

Местоположение таблиц в памяти роли само по себе не играет, надо лишь обеспечить их правильное выравнивание (граница 16 Кбайт для таблицы первого уровня, если склероз не подводит). Так что выделяете под них то место, какое для Вас лично удобно, и всё.

Цитата(ZED @ Dec 29 2010, 14:58) *
Ну я вообщето взял готовый проект getting-started-project-at91sam9260-ek и просто вставил туда свой код.


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

Цитата
А можно пример?


Вообще, эта задача, хотя и не слишком сложная, тривиальной тоже не является. Фактически всякие там SAM-BA и прочие средства программирования примерно так и работают: по JTAG загружают в оперативу некий код и запускают его на выполнение, а уже он обеспечивает запись во флэш-память, при необходимости подгружая информацию с ПК. В общем, пример не такой маленький получится, да и не уверен, что найти его просто...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ZED   MMU D-Cache I-Cache для ARM926EJ-S   Dec 27 2010, 05:54
- - DpInRock   Кодunsigned int AT91F_ARM_ReadControl() { ...   Dec 27 2010, 06:26
- - ZED   Спасибо DpInRock за Ваш пример. А не могли бы вы о...   Dec 27 2010, 06:41
- - DpInRock   Просто почитайте что-нибудь для начала. Ответить н...   Dec 27 2010, 06:58
|- - vmp   Цитата(DpInRock @ Dec 27 2010, 12:58) Ины...   Dec 28 2010, 03:37
- - ZED   Я так понял, что Ваша таблица TLB располагается в ...   Dec 27 2010, 11:50
- - DpInRock   У 9261 - 192К SRAM. (у 9260 совсем мало кажется). ...   Dec 27 2010, 14:25
|- - aaarrr   Цитата(DpInRock @ Dec 27 2010, 20:25) Бою...   Dec 27 2010, 14:35
- - DpInRock   НУ может быть. Уже год как не лазил в 926. А то и ...   Dec 27 2010, 14:38
- - ZED   Может я чего-то не понимаю, но по карте памяти адр...   Dec 28 2010, 04:04
- - DpInRock   Да. Зачем я туда засунул эту таблицу - не помню. ...   Dec 28 2010, 04:27
- - ZED   А можно еще такой вопрос? Поскольку у меня такие м...   Dec 28 2010, 06:47
- - DpInRock   Периферия по этим адресам - это копипасте строчек...   Dec 28 2010, 06:55
- - SII   Кэш инструкций включается установкой соответствующ...   Dec 28 2010, 07:14
- - ZED   ЦитатаMMU включается исключительно ради кэша), то ...   Dec 28 2010, 07:46
|- - vmp   Цитата(ZED @ Dec 28 2010, 13:46) Тогда по...   Dec 28 2010, 08:44
|- - sergeeff   Цитата(vmp @ Dec 28 2010, 15:44) И какие ...   Dec 28 2010, 09:47
|- - aaarrr   Цитата(sergeeff @ Dec 28 2010, 15:47) Еди...   Dec 28 2010, 11:24
|- - vmp   Цитата(ZED @ Dec 28 2010, 16:01) Да пробл...   Dec 28 2010, 10:30
- - DpInRock   Чисто совет. Кэш - отличная штука. Ускоряет так но...   Dec 28 2010, 10:51
|- - aaarrr   Вообще, лучше все же применять творческий подход, ...   Dec 28 2010, 21:25
- - ZED   Блин код забыл прикрепить: CODEunsigned int AT91F_...   Dec 28 2010, 11:54
- - DpInRock   Ну и что что в некэшируемой. Ставите нужный битик ...   Dec 28 2010, 13:02
- - sergeeff   To ZED: У Atmel'a, чтобы не было проблем с ко...   Dec 28 2010, 21:02
- - ZED   Спасибо Вам большое за советы и помощь!   Dec 29 2010, 03:24
- - ZED   Теперь возникли проблемы с PLL. Хотел протестирова...   Dec 29 2010, 06:36
- - DpInRock   В жизни не получал таких варнингов от ИАР. Скорее ...   Dec 29 2010, 07:18
- - ZED   ЦитатаРемап никак не связан с варнингами. (Или это...   Dec 29 2010, 07:52
- - DpInRock   Симуляторы и отладчики - зло. Вообще тогда смотрит...   Dec 29 2010, 08:19
- - ZED   В sdram.icf задано: Кодdefine symbol __ICFEDIT_siz...   Dec 29 2010, 08:22
- - DpInRock   А IRQ стек? Вообще, я отлаживаюсь последовательны...   Dec 29 2010, 08:34
- - ZED   ЦитатаА IRQ стек? Кодdefine symbol __ICFEDIT_size_...   Dec 29 2010, 08:36
- - DpInRock   Насколько я представляю, у вас не отлажена среда р...   Dec 29 2010, 08:54
- - ZED   Ну я вообщето взял готовый проект getting-started-...   Dec 29 2010, 08:58
- - DpInRock   По поводу примера. Это действительно не так чтоб о...   Dec 29 2010, 13:09
- - ZED   ЦитатаПо поводу примера. Это действительно не так ...   Dec 30 2010, 03:27
- - DpInRock   Перед вами плата. Перед вами PC. Шнурок RS232 межд...   Dec 30 2010, 08:25
- - JeDay   Цитата1. Пишите PC программу, которая сможет загон...   Jan 14 2011, 21:49


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 07:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01438 секунд с 7
ELECTRONIX ©2004-2016