The best way to start on the CPU is to print "Diagram 5.8: Proposed CPU implementation" in
chapter 5 so that you can write notes on it, mark the wires/buses as you connect them, etc.
Write HDL for each of the parts in the diagram, and interconnections that are shown.
Generally you want to name wires/buses based on the output that creates them. Fir the 'c' connections use a name based on the part's name or function. Be sure to connect the outputs on the right side of the diagram to their parts. Include comments in a complex circuit like CPU. It should look something like this.
// D register
DRegister(in=aluOut, load=dRegLoad, out=dRegOut);
// A register and its input multiplexor
Mux16(sel=aMuxSel, a=aluOut, b=instruction, out=aMuxOut);
ARegister(in=aMuxOut, load=aRegLoad, out=aRegOut, out=addressM);
// ALU and 'y' input multiplexor
The next thing that you need to do is to figure out where all the 'c' signals come from.
For example, when does 'aMuxSel' need to be true? That multiplexor routes the value from @ instructions to the A register, so it must be true whenever 'instruction' is an @ instruction. What bit determines that?
When do you need to load the A register? @ instructions or C-instructions with the A destination bit set.
// Control logic
// A register
Not(in=instruction[___], out=aMuxSel);
...more logic...
Or(..., out=aRegLoad);
// D register
...
// ALU
...
// PC
...
--Mark