RTL Design · Hard · SystemVerilog

Memory-Mapped I²C Register Slave

Integrate a simplified I²C register peripheral with address matching, ACK generation, register writes and sequential register reads.

Task

Use 7-bit address SLAVE_ADDR. After START, receive address+R/W and ACK matches. In write mode, the first data byte loads reg_ptr and following bytes write regs[reg_ptr] with auto-increment. In read mode, present regs[reg_ptr] on tx_data, pulse tx_load, and advance to the next register when read_next is asserted. STOP returns to idle.

Examples

Constraints

What this problem is testing

A strong answer translates the requirement into synthesizable state and combinational logic, states reset and update semantics precisely, and handles boundary conditions rather than only the nominal case.

Interview habit: before coding, state reset behavior, the state that must be stored, and the conditions that update each output.

Verification plan

Common mistakes

Interview follow-up questions

Concepts to review

I2C, slave, register peripheral

Open Memory-Mapped I²C Register Slave in the HDLForge interactive editor.

Related problems

Explore the RTL Design Practice & Interview Preparation hub.

Continue practising