CPU

From SEGGER Wiki
Revision as of 17:57, 17 June 2019 by Rolf (talk | contribs)
Jump to: navigation, search

CPU stands for Central Processing Unit. It is basically the "brain" of a computer.

CPUs can have multiple cores. CPU cores today are typically 32-bit or 64-bit. For the sake of this article, we will refer to a single core as CPU. A CPU has multiple CPU registers. A register is a CPU internal storage, anywhere from just a single up to 32-bits or more.

CPU registers

The CPU registers are the short term memory inside of the CPU. They can be easily accessed by the instructions executed. Every CPU architecture has a different register design. They all have the essential registers and some "work registers".

Essential registers

All CPU most have the following registers:

  • PC - The Program counter. This is the register that contains the address of the next instruction to fetch then execute.
  • SP - Stack Pointer. Contains the address of the next item to push or pop. Typically grows downwards.
  • Status - A register containing certain certain flags such as Carry, Zero and typically other flags.

Work registers

Work registers are vastly different for different CPUs. In general, 8-bit CPUs tend to have 8-bit work registers, 16-bit CPUs have 16-bit work registers and so on. In the 70, when silicon structures were huge and every transistor thus expensive, CPUs were 8-bit CPUs with few registers. The 6502 is a good example for a relatively simple processor, with only 3 work registers, an 8-bit accumulator A, on which all arithmetic operations are performed, and 2 8-bit index registers, called X and Y. Most old designs CPU designs had an accumulator, usually called A. Later in the game, CPU designers learned that this design comes with a disadvantage: If an arithmetical or logical operation needs to be performed on another register, its value needs to be transferred to the accumulator first (typically using something like a MOV A, Rx instruction) and after the operation moved back, typically using a MOV Rx, A instruction). This affected the code density in a negative way, as a lot of transfers to and from the accumulators are needed. Modern designs typically have a number of general purpose registers. In an architecture such as ARMv4, 16 such registers exist, called R0, R1, ... R15. More registers give the CPU more performance, as it has more "short term memory", so it can hold more parameters and variables in registers, where they can be easily and quickly accessed. That is also the reason why modern high-end processors have a lot of registers (such as 31 for ARMv8-A, ARM's 64 bit architecture). So the upside of having many registers that are all equally accessible is high performance. The downside is that the instructions become wide, as in a lot of cases they need to specify 2 or even 3 registers (such as the 2 operand registers and the destination register). With 32 registers (or 31, with R0 not counted as it has a constand value of 0), 5 bits are required to specify a register, so 15 bits are needed just to specify the registers. In applications where code density is not so important, such as PCs and modern servers, this is a good choice, as program size is not so relevant, but performance is. In typical Embedded Systems, code density is important, as program memory (typically Flash memory) is limited. Modern Microcontrollers typically use CPUs with 16 general purpose registers. ARM's Cortex-M Microcontrollers have a Thumb-2 instruction set, which favors the lower 8 registers, trying to achieve high code density with just a small loss of performance.

Wordsize of a CPU

The Wordsize of a CPU is not really clearly defined. A true 8-bit CPU will have only 8-bit registers, with the exception of the PC, which needs to be wider in order to not limit the program memory to just 256 bytes. An example of a true 8-bit CPU would be the 6502. The 8080 or Z80 processors are also considered 8-bit CPUs, even though a lot of the registers can be grouped and actual arithmetic operations can be performed on them, such as in add HL, BC. Older CPUs were usually accumulator centered, so had some register that was used for most arithmetic operations. One way of telling the Wordsize of a CPU would then be the size of the accumulator. Note that the size of the bus interface has nothing to do with the Wordsize. The bus interface can even be 8-bit on a 32-bit CPU.

Thus we would define the wordsize as the number of bits processed by a typical instruction.

In Embedded Systems 8-bit, 16-bit and 32-bit CPUs are widely used. More information about computers