A read port lets you look at one register in a register file. You give it a read address; it outputs that register's n bits.
How it is built: for each of the n output bits, one k:1 multiplexer picks that bit from whichever register the address selects. So one read port is n MUXes of size k:1, each with log₂ k select lines driven by the read address.
Key properties:
- Reading is combinational: no clock is needed. Change the address and, after a short delay, the output shows the new register.
- Reading never changes the stored values.
- Ports are independent. Most register files have two read ports, so an instruction can fetch two operands, such as R2 and R3 for R1 ← R2 + R3, in the same cycle. Each port needs its own full set of MUXes.
Because registers only change at a clock edge, a read port that is reading a register being written in the same cycle shows the old value until the edge. See read during write.
The matching input path is the write port.