The control signals are the control unit's outputs. Each one switches one thing in the datapath. Tiny8 has 12:
- Load enables:
LdMAR,LdPC,LdMDR,LdIR,LdACC. A register loads at the edge only if its signal is 1. - Mux selects:
MARsrc,PCsrc,MDRsrc,ACCsrc. They choose where each register's new value comes from. - ALU:
ALUop(0 = add, 1 = subtract). - Memory:
Read,Write.
To find the signals for any step written in register transfer notation:
- Every register on the left of an arrow gets its load signal (or
Write, if the destination is memory). - Set each of those registers' mux to the source on the right.
- If the source is memory, assert
Read. If it's the ALU, setALUop. - Every other load,
ReadandWriteis 0.
The 0s matter: an extra LdPC skips an instruction, and an extra Write corrupts memory. But a mux select only matters when its register loads, so otherwise it's a don't-care.