Registers are used for storage of binary electronic data in the form of bits. They are built into nearly every logical electronic device, including your own personal computer. Without such storage available, computers would not be possible.
Most registers are volatile, meaning that they lose their data when they lose electricity. This is why computers require other storage methods for permanent data retention, including hard drives and optical disks. Registers are intended for temporary storage only, but are much quicker to store and read data than permanent storage, which is why registers are used for random access memory chips in personal computers.
Registers can contain any number of bits, but all registers are composed of smaller 1 bit registers. These 1 bit registers are typically lumped together into multiples of 8, a method of organization that is useful for modern computers. A RAM module today (circa. late 2005) can contain 1 gigabyte of memory. That is 1 * 1,000,000,000 * 8 bits or 8 billion registers composing the module!
I will now show you an example of how a register can be designed. Then, I will show you the signals required to store and change the data in the register.
The picture above shows a schematic for a single bit register. There are five input pins and one output pin. The components in the circuit include a simple AND gate, 2-to-1 multiplexer, and a D-flip flop. The flip flop is the actual storage component, and the multiplexer and gate are used to control the writing of data. The multiplexer is used as a switch, where S indicates which input (A or B) to send to the output of the multiplexer. If S is 1, Y will output A, otherwise it will output B.
The dn input is the data input from CPU or whatever is connected to the register. The load input tells the register whether or not there is data available, with 1 indicating data and 0 indicating no data. Clear_b is a synchronous clear input, which will reset the register to 0 on the next clock cycle if its input is 0, otherwise it will do nothing. Reset_b is a second reset input, but this one will INSTANTLY reset the register value to 0 if its input is 0. Finally, CLK is the clock input, which will typically accept a square wave to synchronize the register with the rest of a logic system.
To write data, four conditions must be set. Data must be present at the DN input, clear_b must be 1, reset_b must be 1, and load must be 1. The system has to stay in this state for at least one full clock cycle and the data will be written to the register at the end of that clock cycle. The data input can be either 0 or 1 when writing and it can alternatively be set to zero by setting clear_b or reset_b to 0.
Now, to read data, a circuit need only check the voltage of the dout output. Inside of a personal computer, a memory controller controls this process of reading and writing.
The picture above shows a 4 bit register made up of 4 single bit registers. All of the inputs are connected in parallel, with the exception of the DN inputs, which are connected to a data BUS. The BUS is indicated by a thick line and is simply a set of 4 different inputs in this case. One could think of the BUS as four additional pins, with each pin going to a DN on a different chip. The outputs from the registers are similarly connected to a 4-bit data BUS.
Finally, we test the circuit by using simulation. As you can see, DOUT and DN are initially 0, indicating that no data is stored in the register. I now write hex value A to the 4-bit register by setting load to 1 and the DN to the binary value of A. After a clock (CLK) cycle, A is now stored in the register, as indicated by DOUT, even when the input is removed. After this, I clear the register by setting reset_b to 0 and you can see the value of DOUT change from A to 0.