HDLForge structured practice path

RTL Design Practice Problems

Use this path for digital-design and RTL interviews. Every problem asks you to turn a behavioral requirement into explicit synthesizable state, update rules and edge-case handling.

How to use this practice path

Stage 1
Define outputs and state before coding.
Stage 2
State reset semantics and cycle timing explicitly.
Stage 3
Handle simultaneous controls, boundaries and wraparound.
Stage 4
Explain how you would verify the block after writing RTL.

Problems to solve

01 · RTL Design · Easy
2:1 Multiplexer
Design a synthesizable 2:1 multiplexer.
02 · RTL Design · Easy
Parameterized Counter
Build a parameterized synchronous up-counter with reset.
03 · RTL Design · Easy
Shift Register
Build a parameterized register that stores multiple bits and can shift its contents by one position on each clock edge.
04 · RTL Design · Easy
Rising Edge Detector
Generate a one-cycle pulse whenever an input signal transitions from 0 to 1.
05 · RTL Design · Easy
3-to-8 Decoder
Decode a 3-bit input into a one-hot 8-bit output.
06 · RTL Design · Easy
16-bit Magnitude Comparator
Compare two unsigned 16-bit values.
07 · RTL Design · Easy
Even-Parity Generator
Generate the parity bit required to make an 8-bit word have even parity.
08 · RTL Design · Easy
Register with Clock Enable
Build an 8-bit register that updates only when enable is high.
09 · RTL Design · Easy
Toggle Flip-Flop
Toggle an output bit whenever toggle_en is asserted.
10 · RTL Design · Easy
Sticky Status Flag
Latch an event until software explicitly clears it.
11 · RTL Design · Easy
Start/Busy/Done Controller
Implement a standard operation-control shell with start, busy and one-cycle done.
12 · RTL Design · Easy
RISC-V Program Counter
Build the 32-bit program-counter register used by the guided RISC-V CPU project.
13 · RTL Design · Easy
RISC-V Instruction Decoder
Slice the fixed RV32I instruction fields used by the rest of the CPU datapath.
14 · RTL Design · Easy
UART Baud Tick Generator
Create the timing pulse that advances the UART transmitter and receiver.
15 · RTL Design · Easy
UART TX Frame Shifter
Build the shift register that serializes a UART frame.
16 · RTL Design · Easy
UART RX Start-Bit Detector
Detect the beginning of an incoming UART frame.
17 · RTL Design · Easy
AXI-Lite Register Bank
Create the memory-mapped state that the AXI-Lite slave will expose.
18 · RTL Design · Easy
Async FIFO Dual-Port Memory
Create storage that can be written and read from different clock domains.
19 · RTL Design · Easy
Binary-to-Gray Pointer Conversion
Convert a binary pointer to Gray code so only one bit changes per increment.
20 · RTL Design · Easy
Async FIFO Empty Detection
Determine when the read pointer has caught up with the synchronized write pointer.

Interview routine

For each problem, first restate the requirement and assumptions. Then write the RTL, assertion, verification component or architecture derivation without looking at a solution. Before running anything, list at least three edge cases. Finish by explaining how you would verify the result and what trade-offs you made.

Keep going

Use the interactive HDLForge problem workspace, browse company-style tracks, or choose a hardware project that uses the same skills.

Related implementation guides