Через регистр 0 сопроцессора управления системой осуществляется доступ к нескольким внутренним регистрам, содержащим информацию о различных характеристиках процессора. Нужный внутренний регистр выбирается с помощью поля дополнительной операции (opcode2) команды MRC. Все эти регистры доступны только для чтения:
opcode2 | Содержимое регистра |
---|---|
Главный идентификатор (Main ID) | |
Тип кэша | |
Тип тесно связанной памяти (TCM) | |
Тип буфера быстрой переадресации (TLB) | |
Тип MPU (PMSAv6) | |
резерв |
Регистр главного идентификатора[]
Старший байт главного идентификатора определяет фирму-разработчика (Implementor) данного процессора:
- 41 — ARM Limited;
- 44 — DEC;
- 4D — Motorola — Freescale Semiconductor Inc.;
- 56 — Marvell Semiconductor Inc.;
- 69 — Intel Corporation.
Все остальные коды являются зарезервированными.
Остальные поля по историческим причинам нуждаются в дополнительной интерпретации. Если бит 19 равен нулю, биты 15:12 указывают версию архитектуры:
- если они равны нулю, это устаревшая архитектура (до ARMv4);
- если они равны 7, это архитектура ARM7;
- если они больше 7, это более новая архитектура, чем ARM7.
Формат регистра главного идентификатора для процессоров архитектуры ARM7 показан на рисунке ниже.
- бит 23 (A) определяет версию архитектуры процессора ARM7: 0 соответствует устаревшей версии 3, 1 — версии 4T;
- биты 22–16 (Variant) содержат номер варианта процессора, определяемый реализацией;
- биты 15–4 (Primary part number) содержат определяемый реализацией номер основной части процессора. Старшие четыре бита будут равны 7;
- биты 3–0 (Revision) содержат определяемый реализацией номер ревизии данного процессора.
Формат регистра главного идентификатора для процессоров с архитектурами после ARM7 показан на рисунке ниже.
- биты 23–20 (Variant) являются зависящим от реализации номером варианта процессора.
- биты 19–16 (Architecture) содержат код архитектуры данного процессора:
- 1 — ARMv4;
- 2 — ARMv4T;
- 3 — ARMv5;
- 4 — ARMv5T;
- 5 — ARMv5TE;
- 6 — ARMv5TEJ;
- 7 — ARMv6;
- F — изменённый формат CPUID. Подробности можно узнать у ARM Limited.
- биты 15–4 (Primary part number) содержат зависящий от реализации номер основной части процессора. Старшие четыре бита не могут быть равны нулю или семи.
- биты 3–0 (Revision) являются зависящим от реализации номером ревизии процессора.
Регистр типа кэша[]
Назначение разрядов регистра типа кэша следующее:
- биты 28–25 (ctype) задают тип кэша (см. ниже);
- бит 24 (S) указывает, используется ли единый кэш инструкций и данных (=0) или же отдельные кэши (=1). Если используется единый кэш, поля Dsize и Isize должны быть равны;
- биты 23:12 (Dsize) указывают размер кэша данных или единого кэша;
- биты 11:0 (Isize) указывают размер кэша инструкций или единого кэша.
Значения поля ctype, не описанные в следующей таблице, являются зарезервированными. Подробное описание возможностей кэша и связанных с ним операций находится в соответствующем разделе.
ctype | Тип кэша | Очистка кэша | Ограничение кэша |
---|---|---|---|
0000 | Сквозная запись | Не требуется | Не поддерживается |
0001 | Обратная запись | Чтение блока данных | Не поддерживается (устарело в ARMv6) |
0010 | Обратная запись | Операции регистра 7 | Не поддерживается (устарело в ARMv6) |
0101 | Обратная запись | Операции регистра 7 | Формат D |
0110 | Обратная запись | Операции регистра 7 | Формат A |
0111 | Обратная запись | Операции регистра 7 | Формат B (устарело в ARMv6) |
1110 | Обратная запись | Операции регистра 7 | Формат C |
Регистр типа TCM[]
Назначение разрядов регистра типа тесно связанной памяти (TCM) следующее:
- биты 28–19 и 15–3 (SBZ/UNP) — нули либо непредсказуемо;
- биты 18–16 (DTCM) — количество реализованных модулей тесно связанной памяти данных (от 0 до 4, большие значения зарезервированы);
- биты 2–0 (ITCM) — количество реализованных модулей тесно связанной памяти инструкций (или общей памяти; количество находится в пределах от 0 до 4, большие значения зарезервированы).
Регистр типа TLB[]
Назначение разрядов регистра типа TLB следующее:
- биты 31–24 и 7–1 (SBZ/UNP) — нули либо непредсказуемо;
- биты 23–16 (ILsize) — количество допускающих фиксацию элементов TLB инструкций, если S=1, иначе нули;
- биты 15–8 (DLsize) — количество допускающих фиксацию элементов TLB данных, если S=1, или общего TLB, если S=0;
- бит 0 (S) — равен нулю, если используется общий TLB, и единице, если имеются отдельные TLB инструкций и данных.
Регистр типа MPU[]
Этот регистр появился в версии PMSAv6.
Назначение разрядов регистра типа блока защиты памяти (MPU) следующее:
- биты 31–24 и 7–1 (SBZ/UNP) — нули либо непредсказуемо;
- биты 23–16 (IRegion) — если S=1, содержит количество областей памяти инструкций, иначе содержит 0;
- биты 15–8 (DRegion) — если S=1, содержит количество областей памяти данных, в противном случае — количество единых областей инструкций и данных;
- бит 0 (S) — равен нулю, если MPU использует единые области инструкций и данных, и единице, если MPU разделяет области инструкций и области данных.
Подробно MPU обсуждается в разделе Архитектура системы защиты памяти.