9.3 Architecture
In order to maximize performance and parallelism, the AVR CPU uses a Harvard architecture with separate buses for program and data. Instructions in the program memory are executed with single-level pipelining. While one instruction is being executed, the next instruction is prefetched from the program memory. This enables instructions to be executed on every clock cycle.
The Arithmetic Logic Unit (ALU) supports arithmetic and logic operations between registers or between a constant and a register. Also, single-register operations can be executed in the ALU. After an arithmetic operation, the STATUS register is updated to reflect information about the result of the operation.
The ALU is directly connected to the fast-access register file. The 32 8-bit general purpose working registers all have single clock cycle access time allowing single-cycle arithmetic logic unit operation between registers or between a register and an immediate. Six of the 32 registers can be used as three 16-bit Address Pointers for program and data space addressing, enabling efficient address calculations.
The program memory bus is connected to Flash, and the first program memory Flash address is 0x0000.
The data memory space is divided into I/O registers, SRAM, EEPROM, and Flash.
All I/O Status and Control registers reside
in the lowest 4 KB addresses of the data memory. This is referred to as the I/O memory
space. The lowest 64 addresses are accessed directly with single-cycle
IN
/OUT
instructions, or as the data space locations
from 0x00 to 0x3F. These addresses can be accessed using load
(LD
/LDS
/LDD
) and store
(ST
/STS
/STD
) instructions. The lowest
32 addresses can even be accessed with single-cycle
SBI
/CBI
instructions and
SBIS
/SBIC
instructions. The rest is the extended I/O
memory space, ranging from 0x0040 to 0x0FFF. The I/O registers here must be accessed as
data space locations using load and store instructions.
Data addresses 0x1000 to 0x1800 are reserved for memory mapping of fuses, the NVM controller and EEPROM. The addresses from 0x1800 to 0x7FFF are reserved for other memories, such as SRAM.
The Flash is mapped in the data space from 0x8000 and above. The Flash can be
accessed with all load and store instructions by using addresses above 0x8000. The LPM
instruction accesses the Flash similar to the code space, where the Flash starts at address
0x0000.
For a summary of all AVR instructions, refer to the Instruction Set Summary section. For details of all AVR instructions, refer to www.microchip.com/design-centers/8-bit.