Открыть сервис

Архитектура ARMv6-M

ARMv6-M — это архитектура набора команд (ISA) для микроконтроллеров, разработанная компанией ARM Holdings. Она относится к семейству ARMv6 и представляет собой упрощённую версию архитектуры, оптимизированную для маломощных, недорогих и компактных встраиваемых систем. Основное назначение ARMv6-M — обеспечение минимального энергопотребления и площади кристалла при сохранении совместимости с программным обеспечением на уровне исходного кода с другими архитектурами ARM. Архитектура является базой для процессорных ядер Cortex-M0, Cortex-M0+ и Cortex-M1.

История

Разработка архитектуры ARMv6-M началась в середине 2000-х годов как ответ на растущий спрос на микроконтроллеры для массовых приложений Интернета вещей (IoT), бытовой техники и датчиков. Предыдущие архитектуры ARM (например, ARMv4T и ARMv5TE) были ориентированы на более производительные системы, но требовали значительных ресурсов. ARMv6-M была представлена в 2009 году вместе с ядром Cortex-M0, которое стало первым процессором, реализующим эту архитектуру. Целью было создание самого энергоэффективного и компактного 32-битного процессора на рынке, способного заменить 8- и 16-битные микроконтроллеры (например, на базе архитектур 8051 или PIC) при сохранении преимуществ 32-битной обработки.

В 2012 году вышло ядро Cortex-M0+, которое дополнило архитектуру ARMv6-M улучшенными возможностями энергосбережения, такими как микроархитектурные оптимизации для снижения динамического энергопотребления. В 2010 году также было представлено ядро Cortex-M1, предназначенное для программируемых логических интегральных схем (ПЛИС, FPGA) и реализующее ту же архитектуру.

Основные характеристики

ARMv6-M является подмножеством более полной архитектуры ARMv7-M, используемой в ядрах Cortex-M3 и Cortex-M4. Она включает только самые необходимые инструкции и режимы работы, что упрощает реализацию и снижает стоимость.

Набор инструкций

Архитектура ARMv6-M поддерживает только набор инструкций Thumb (16-битные инструкции) и не включает поддержку полного 32-битного набора ARM. Это позволяет уменьшить размер кода и энергопотребление. В отличие от ARMv7-M, ARMv6-M не поддерживает инструкции Thumb-2 (смешанные 16- и 32-битные инструкции), что ограничивает производительность, но упрощает декодирование. Основные инструкции включают:

  • Арифметические и логические операции (ADD, SUB, AND, ORR, EOR, LSL, LSR).
  • Операции с памятью (LDR, STR для 32-битных данных; LDRB, STRB для 8-битных; LDRH, STRH для 16-битных).
  • Условные переходы (B, BEQ, BNE и другие).
  • Инструкции для работы со стеком (PUSH, POP).
  • Инструкции для вызова подпрограмм (BL) и возврата (BX LR).

Регистровый файл

Процессоры ARMv6-M имеют 13 32-битных регистров общего назначения (R0–R12), а также специальные регистры: указатель стека (SP, R13), регистр связи (LR, R14) и счётчик команд (PC, R15). Регистры R0–R3 используются для передачи аргументов в функции, R4–R11 — для локальных переменных. Регистр состояния программы (xPSR) объединяет флаги условия (N, Z, C, V), номер прерывания и код состояния.

Режимы работы и привилегии

ARMv6-M поддерживает два режима работы: режим потока (Thread mode) и режим обработчика (Handler mode). Режим потока используется для выполнения обычного пользовательского кода, а режим обработчика — для обработки исключений и прерываний. В отличие от более сложных архитектур, ARMv6-M не имеет разделения на привилегированный и непривилегированный уровни доступа в базовой реализации (хотя в Cortex-M0+ добавлена опциональная поддержка MPU — блока защиты памяти). Это означает, что весь код выполняется с одинаковым уровнем привилегий, что упрощает систему, но снижает безопасность.

Система прерываний

Архитектура ARMv6-M использует встроенный контроллер прерываний (NVIC — Nested Vectored Interrupt Controller), который поддерживает до 32 внешних прерываний (в зависимости от реализации). NVIC обеспечивает:

  • Векторизацию прерываний: каждый источник прерывания имеет свой вектор (адрес обработчика), хранящийся в таблице векторов.
  • Вложенность прерываний: более приоритетное прерывание может прервать обработку менее приоритетного.
  • Фиксированные приоритеты: в отличие от ARMv7-M, ARMv6-M не поддерживает программируемые приоритеты — они задаются аппаратно (обычно 4 уровня приоритета).

Исключения

Архитектура поддерживает системные исключения, включая сброс (Reset), немаскируемое прерывание (NMI), Hard Fault (аппаратная ошибка) и системные вызовы (SVC, PendSV, SysTick). Hard Fault — единственный тип сбоя в ARMv6-M; более детальные механизмы отладки (например, MemManage, Bus Fault) отсутствуют, что упрощает реализацию.

Реализации

Cortex-M0

Первое и наиболее распространённое ядро, реализующее ARMv6-M. Выпущено в 2009 году. Имеет трёхступенчатый конвейер (выборка, декодирование, исполнение) и выполняет большинство инструкций за один такт. Энергопотребление составляет около 0,085 мВт/МГц (на 90-нм техпроцессе). Cortex-M0 широко используется в микроконтроллерах таких производителей, как NXP (серия LPC800), STMicroelectronics (STM32F0), Silicon Labs (EFM32 Zero) и других.

Cortex-M0+

Улучшенная версия, выпущенная в 2012 году. Отличается микроархитектурными оптимизациями: двухступенчатый конвейер (выборка и исполнение), что снижает задержки и энергопотребление; поддержка опционального блока защиты памяти (MPU) с 8 регионами; улучшенная система отладки (Serial Wire Debug). Энергопотребление снижено до 0,06 мВт/МГц. Примеры микроконтроллеров: Microchip SAM D21, NXP LPC84x.

Cortex-M1

Ядро, оптимизированное для ПЛИС (FPGA). Выпущено в 2010 году. Отличается компактным размером (около 1200 логических элементов на ПЛИС) и поддержкой синтеза для различных платформ (Altera, Xilinx). Используется в системах-на-кристалле (SoC) для специализированных приложений, таких как управление датчиками и простые контроллеры.

Применение

Архитектура ARMv6-M ориентирована на приложения, где критичны низкая стоимость, малое энергопотребление и компактность. Основные области применения:

  • Интернет вещей (IoT): датчики, умные розетки, термостаты, носимые устройства (например, фитнес-трекеры).
  • Бытовая техника: микроволновые печи, стиральные машины, пульты дистанционного управления.
  • Промышленная автоматизация: простые контроллеры, датчики температуры и давления, исполнительные механизмы.
  • Автомобильная электроника: системы управления освещением, стеклоподъёмниками, датчики парковки.
  • Медицинские устройства: глюкометры, тонометры, слуховые аппараты.

Благодаря низкому энергопотреблению (часто менее 1 мкА в режиме сна) и малой площади кристалла (менее 0,1 мм² на 90-нм техпроцессе), ARMv6-M является доминирующей архитектурой для 32-битных микроконтроллеров начального уровня. По оценкам ARM, к 2023 году было продано более 10 миллиардов микроконтроллеров на базе Cortex-M0 и Cortex-M0+.

Сравнение с другими архитектурами

ARMv7-M (Cortex-M3/M4)

ARMv7-M является более мощной архитектурой, поддерживающей набор инструкций Thumb-2, что позволяет выполнять 32-битные инструкции за один такт. Она также включает программируемые приоритеты прерываний, блоки защиты памяти (MPU) и детальную обработку ошибок (MemManage, Bus Fault, Usage Fault). Однако ARMv7-M требует больше площади кристалла (примерно в 2–3 раза) и потребляет больше энергии. ARMv6-M, напротив, проще и дешевле, но уступает в производительности (обычно 0,9–1,2 DMIPS/МГц против 1,25 DMIPS/МГц у Cortex-M3).

8-битные архитектуры (8051, AVR, PIC)

ARMv6-M превосходит 8-битные архитектуры по производительности (32-битная обработка, более высокая тактовая частота — до 50 МГц и выше) и объёму адресуемой памяти (до 4 ГБ, хотя в реальности ограничено 16–64 КБ встроенной памяти). Однако 8-битные микроконтроллеры часто дешевле и имеют более простую экосистему. ARMv6-M занимает промежуточное положение между 8-битными и более мощными 32-битными архитектурами.

Интересные факты

  • Архитектура ARMv6-M является самой простой из всех 32-битных архитектур ARM, что делает её идеальной для обучения программированию на ассемблере и встраиваемых систем.
  • Ядро Cortex-M0+ было признано самым энергоэффективным процессором в мире по версии EEMBC (Embedded Microprocessor Benchmark Consortium) в 2012 году.
  • Некоторые микроконтроллеры на базе ARMv6-M (например, STM32F0) могут работать от напряжения питания до 1,65 В, что позволяет использовать их в батарейных устройствах.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →