Registers are classified by how data enters and leaves. Serial means one bit per clock edge on a single wire. Parallel means all n bits at once on n wires.
- SISO (serial in, serial out): one bit in and one bit out per edge. Each bit comes out n clock periods after it went in, in the same order. Used as a delay line.
- SIPO (serial in, parallel out): bits arrive one per edge; after n edges the whole word can be read on the n outputs at once. Converts serial → parallel.
- PISO (parallel in, serial out): all n bits are loaded in one edge, then shifted out one per edge. Converts parallel → serial.
- PIPO (parallel in, parallel out): load all n bits in one edge and read them all at once. This is the plain register with no shifting.
Why convert at all: serial links need far fewer wires. A UART or SPI port loads a byte in parallel and shifts it out (PISO), while the receiver shifts bits in and hands the processor a whole byte (SIPO). Chips like the 74HC595 (SIPO) and 74HC165 (PISO) let a microcontroller drive many LEDs or read many buttons with a few pins.
Counting edges for an n-bit register:
- SISO: a bit entering at edge k reaches the output at edge k + n − 1.
- SIPO: n edges to fill.
- PISO: one load edge, then n − 1 shifts to bring out the remaining bits.
- PIPO: one edge.