Введение

AVR32 — 32-битная RISC-архитектура микроконтроллера, разработанная компанией Atmel. Архитектура микроконтроллера была создана небольшой группой специалистов, получивших образование в Норвежском университете науки и технологий, включая ведущего разработчика Øyvind Strøm и архитектора процессора Эрика Ренно в норвежском конструкторском центре Atmel. Большинство инструкций выполняются за один цикл. Устройство умножения-накопления способно выполнять арифметическую операцию 32 бит × 16 бит + 48 бит за два цикла (задержка результата), с возможностью выдачи результата один раз за цикл. Он не имеет сходства с 8-битной микроконтроллерной линейкой AVR, несмотря на то, что обе были разработаны в Atmel Norway, в Тронхейме. Некоторые инструменты отладки аналогичны. Поддержка AVR32 была прекращена в Linux начиная с ядра 4.12; Atmel в основном перешла на M-варианты архитектуры ARM.

Архитектура

AVR32 имеет как минимум две микроархитектуры: AVR32A и AVR32B. Они различаются архитектурой набора команд, конфигурацией регистров и использованием кэшей для инструкций и данных. Процессорные ядра AVR32A предназначены для недорогих приложений. Они не имеют выделенных аппаратных регистров для сохранения содержимого регистрового файла, статуса и адреса возврата при прерываниях. Это позволяет уменьшить площадь кристалла за счет снижения скорости обработки прерываний. Процессорные ядра AVR32B разработаны для быстрой обработки прерываний. Они оснащены выделенными регистрами для хранения этих значений при прерываниях, исключениях и вызовах супервизора. Ядра AVR32B также поддерживают аппаратную реализацию виртуальной машины Java. Набор команд AVR32 включает 16-битные (компактные) и 32-битные (расширенные) инструкции, аналогичные, например, некоторым ARM, и содержит несколько специализированных инструкций, отсутствующих в более ранних ARMv5, ARMv6 или MIPS32. На архитектуру набора команд и платформу AVR32 подано несколько патентов в США. Как и 8-битная архитектура микроконтроллеров AVR, AVR32 была разработана для высокой плотности кода (возможности размещения большого количества функций в небольшом количестве инструкций) и быстрого выполнения инструкций с малым количеством тактов. Atmel использовал независимый оценочный консорциум EEMBC для тестирования архитектуры с различными компиляторами и последовательно демонстрировал превосходство над 16-битным кодом ARMv5 (Thumb) и 32-битным кодом ARMv5 (ARM) на 50% по размеру кода и в 3 раза по производительности. Atmel заявляет, что "picoPower" AVR32 AT32UC3L потребляет менее 0,48 мВт/МГц в активном режиме, что, по их утверждению, в то время было самым низким энергопотреблением среди 32-битных процессоров. В марте 2015 года они заявили, что их новые микроконтроллеры на базе Cortex M0+, использующие архитектуру ARM Holdings ARM, а не собственный набор команд, "превзошли все существующие показатели производительности при сверхнизком энергопотреблении".

Реализация

Архитектура AVR32 использовалась исключительно в собственных продуктах Atmel. В 2006 году Atmel представила AVR32A: ядро AVR32 AP7 – 7-ступенчатую конвейерную платформу с использованием кэша. Ядро AVR32 UC3 реализует архитектуру AVR32A. Оно использует тот же набор инструкций (ISA), что и ядро AP7, но отличается отсутствием необязательных SIMD-инструкций и поддержки Java. Набор инструкций FPU является опциональным и не был реализован в первых семействах микроконтроллеров UC3. Он имеет более 220 общих инструкций с AVR32B. ISA включает в себя атомарные операции над битами для управления периферийными устройствами на чипе и портами ввода/вывода общего назначения, а также арифметику DSP с фиксированной точкой. Обе реализации могут быть объединены с совместимым набором периферийных контроллеров и шин, впервые представленных на платформах AT91SAM на базе ARM. Некоторые периферийные устройства, впервые появившиеся в AP7000, такие как высокоскоростной USB-контроллер и автономный DMA-контроллер, позднее были реализованы в обновленных платформах ARM9, а затем и в продуктах на базе ARM Cortex M3. Оба ядра AVR32 включают в себя отладочную структуру On-Chip Debug класса Nexus 2+, построенную на основе JTAG. Ядро UC3 C, анонсированное на выставке Electronica 2010 в Мюнхене 10 ноября 2010 года, стало первым представителем семейства UC3, реализовавшим поддержку FPU.