Доброго всем здравия!
Уважаемые специалисты, помогите разобраться с этими монстрами.
Имеется 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 и по какому адресу?
У меня никак не может сложиться общая картина совместной работы этих модулей. Буду признателен специалистам, которые смогут прояснить мне эти вопросы.