Fetch brings the next instruction into the CPU. It's identical for every instruction, because the CPU doesn't yet know what the instruction is.
Tiny8 fetches in three clock cycles:
- F1
MAR ← PC: send the instruction's address to memory. Memory can only read once the address is in the MAR. - F2
MDR ← M[MAR], PC ← PC + 1: read the word into the MDR, and at the same edge point the PC at the next instruction. - F3
IR ← MDR: move the word into the IR, freeing the MDR for operand data.
Why increment the PC during fetch? Most instructions are followed by the next word, so advancing straight away, in parallel with the read, saves time. A jump just overwrites the PC later.
Because the IR only receives the new instruction at F3's edge, the fetch steps can't depend on the opcode. During F1 and F2 the decoder still shows the previous instruction.