# Hardware register

In digital electronics, especially computing, hardware registers are circuits typically composed of flip-flops, often with many characteristics similar to memory, such as:
* Using an memory or port address to select a particular register in a manner similar to a memory address.
* the ability to read or write one or multiple bits at a time.
Their distinguishing characteristic, however, is that they also have special hardware-related functions beyond those of ordinary memory. So, depending on the point of view, hardware registers are like memory with additional hardware-related functions; or, memory circuits are like hardware registers that just store data.
Hardware registers are used in the interface between software and peripherals. Software writes them to send information to the device, and reads them to get information from the device. Some hardware devices also include registers that are not visible to software, for their internal use.
Depending on their complexity, modern hardware devices can have many registers. Standard integrated circuits typically document their externally-exposed registers as part of their electronic component datasheet.

## Functionality

Typical uses of hardware registers include:
* configuration and start-up of certain features, especially during initialization
* buffer storage e.g. video memory for graphics cards
* input/output (I/O) of different kinds
* determining the source of an interrupt
* status reporting such as whether a certain event has occurred in the hardware unit, for example a modem status register or a line status register.
Reading a hardware register in "peripheral units" — computer hardware outside the CPU — involves accessing its memory-mapped I/O address or port-mapped I/O address with a "load" or "store" instruction, issued by the processor. Hardware registers are addressed in words, but sometimes only use a few bits of the word read in to, or written out to the register.
Commercial design tools simplify and automate memory-mapped register specification and code generation for hardware, firmware, hardware verification, testing and documentation.
Registers can be read/write, read-only or write-only.
Write-only registers are suitable for registers that cause a transient action when written but store no persistent data to be read, such as a "reset a peripheral" register. They may be a viable option in designs that cannot afford gates for the relatively large logic circuit and signal routing needed for register data readback, such as the Atari 2600 games console's TIA chip. However, write-only registers make debugging more difficult and lead to the read-modify-write problem so read/write registers are preferred. On PCs, write-only registers made it difficult for the Advanced Configuration and Power Interface (ACPI) to determine the device's state when entering sleep mode in order to restore that state when exiting sleep mode.

## Register varieties

The hardware registers inside a central processing unit (CPU) are called processor registers.
Strobe registers have the same interface as normal hardware registers, but instead of storing data, they trigger an action each time they are written to (or, in rare cases, read from). They are a means of signaling.
Registers are normally measured by the number of bits they can hold, for example, an "8-bit register" or a "32-bit register".
Designers can implement registers in a wide variety of ways, including:
* register files
* standard SRAM
* individual flip-flops
* high-speed core memory
In addition to the "programmer-visible" registers that can be read and written with software, many chips have internal registers that are used for state machines and pipelining; for example, registered memory.

## Standards

SPIRIT IP-XACT and DITA SIDSC XML define standard XML formats for memory-mapped registers.