Registers & Shift Registers
Moving and storing groups of bits
A single flip-flop stores one bit. Group eight flip-flops together and you have a register that stores a byte. Chain them end-to-end and you have a shift register that moves data one bit at a time, bridging the serial and parallel worlds.
Interactive Shift Register
Toggle the serial input, then clock data through the chain. Switch to parallel mode to load all bits at once:
Registers
A register is a group of flip-flops that share the same clock. On each clock edge, all flip-flops capture their inputs simultaneously. An 8-bit register stores an 8-bit value; a 32-bit register stores a 32-bit value. Registers are the workhorse of digital design: they hold data between pipeline stages, store state machine outputs, and buffer I/O.
Shift Registers
A shift register chains flip-flops so each one's output feeds the next one's input. On each clock cycle, data moves one position through the chain.
SIPO (Serial-In, Parallel-Out) - Bits enter one at a time on the serial input. After 8 clock cycles, all 8 bits are available at the parallel outputs. This is how UART and SPI receivers work: they collect serial bits and present them as parallel bytes.
PISO (Parallel-In, Serial-Out) - All bits are loaded at once, then shifted out one at a time. This is how UART and SPI transmitters work: they take a parallel byte and send it bit by bit.
Why This Matters for FPGA Design
- Serial interfaces - UART, SPI, I2C all use shift registers
- Pipeline stages - registers between combinational logic enable higher clock speeds
- Delay lines - a chain of registers delays a signal by N clock cycles
- CRC generators - linear feedback shift registers compute checksums on the fly
Frequently Asked Questions
What is a shift register?
A shift register is a chain of flip-flops where each one passes its output to the next on every clock cycle. Data "shifts" through the chain one position at a time. They are used for serial-to-parallel conversion (SIPO), parallel-to-serial conversion (PISO), delay lines, and data buffering. A common example is converting serial UART data into parallel bytes.
What is PISO and SIPO?
PISO (Parallel-In, Serial-Out) loads multiple bits at once, then shifts them out one at a time. This is used when you need to send parallel data over a serial link. SIPO (Serial-In, Parallel-Out) receives bits one at a time and presents them all at once when complete. This is used when receiving serial data for parallel processing.
Quick Check
Test your understanding of the key concepts from this lesson.





