CPU

From SEGGER Wiki
Revision as of 23:30, 17 June 2019 by MartinBaldwin (talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
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 CPUs must 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. It typically grows downwards.
  • Status - A register containing certain flags such as Carry, Zero, and 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 70s, when silicon structures were huge and every transistor thus expensive, CPUs were 8-bit CPUs with few registers. The 6502 is a good example of a relatively simple processor, with only three work registers, an 8-bit accumulator A, on which all arithmetic operations are performed, and two 8-bit index registers, called X and Y. Most old CPU designs had an accumulator, usually called A. Later in the game, CPU designers learned that this design came with a disadvantage: If an arithmetical or logical operation needed to be performed on another register, its value needed 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 were 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. This also 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 two or even three registers (such as the two 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.