Computer architecture

In computer engineering, computer architecture is the conceptual design and fundamental operational structure of a computer system. It is the technical drawings and functional description of all design requirements (especially speeds and interconnections), it is how to design and implement various parts of a computer -- focusing largely on the way by which the central processing unit (CPU) operates internally and how it accesses addresses in memory.
It can be defined as the science and art of selecting and interconnecting hardware components to create computers that meet functional, performance and cost goals.
Computer architecture includes at least three main subcategories:
Instruction set architecture, or ISA, is the abstract model of a computing system that is seen by a machine language (or assembly language) programmer, including the instruction set, memory address modes, processor registers, and address and data formats.
Microarchitecture, also known as Computer organization is a lower level, a detailed description of the system that is sufficient for completely describing the operation of all parts of the computing system, and how they are inter-connected and inter-operate in order to implement the ISA. The size of a computer's cache for instance, is an organizational issue that generally has nothing to do with the ISA.
System Design which includes all of the other hardware components within a computing system such as:
System interconnects such as computer buses and switches.
Memory controllers and hierarchies.
CPU off-load mechanisms such as direct memory access.
Issues like multi-processing.
Once both ISA and microarchitecture has been specified, the actual computing system needs to be designed into hardware. This design process is called implementation. Implementation is usually a hardware engineering design process.
Implementation can be further broken down into three but not fully separate pieces:
Logic Implementation: Design of blocks defined in the microarchitecture, mainly, at the register-transfer and gate levels.
Circuit Implementation: Transistor-level design of basic elements (gates, multiplexers, flip-flops, etc.) as well as of some larger blocks (ALUs, caches etc.) that may be implemented at this level, or even at a lower physical level, for performance reasons.
Physical Implementation: Physical circuits are drawn out, the different circuit components are placed in a chip floor-plan or on a board and the wires connecting them are routed.
For CPUs, the entire implementation process is often called CPU design; it can also be a family of related CPU designs, such as RISC and CISC.
More sub-definitions
Some practitioners of computer architecture use more fine subcategories:
Macroarchitecture: Architectural layers that are more abstract than microarchitecture, for example ISA.
Instruction Set Architecture (ISA): As defined above.
UISA (Microcode Instruction Set Architecture): A family of machines with different hardware level microarchitectures may share a common microcode architecture, and hence called a UISA.
Assembly ISA: A smart assembler may convert an abstract assembly language common to a group of CPUs into slightly different machine language for different CPU implementations.
Programmer Visible Macroarchitecture: Higher level language tools such as compilers may define a definite interface to programmers using them, abstracting differences between underlying ISA, UISA, and microarchitectures; for example the C, C++, or Java standards define three different definite programming interfaces.
Pin Architecture: The set of functions that a microprocessor is expected to provide, from the point of view of a hardware platform. For example, signals that the processor is expected to emit during executing an instruction.
Examples of computer architectures
The x86, made by Intel and AMD.
The SPARC, made by Sun Microsystems and others.
The PowerPC, made by Apple, IBM, and Motorola.
The ARM, popularized by handheld and low-power devices such as smartphones.
The AVR, made by Atmel and popularized by the Arduino Uno.