What a mess of wires and logic gates!
Zoom out, way out.
First understand the high-level architecture. See attached for an example.
You will see that there is a common bus with latch or buffer blocks taking a snapshot of the bus or placing a byte on it, respectively.
Each block has a control pin for LOAD and/or OE (like a
'373 or a
'244) and sometimes CLEAR.
The ALU is just combinational logic (gates
like a '181; no clocked flip flops) with additional pins to select function (add, shift, neg, etc) and OE.
All of these control pins terminate at the wide data bus of the microcode ROM inside the Control Unit (however many data pins as latch+buffer control pins plus additionals).
The instruction register (IR) supplies the most significant address bits of the microcode ROM.
The clock sequentially steps through the microcode ROM addresses however many steps to advance a finite state machine ({en|dis}abling latches and/or buffers to affect data movement).
For example, see below for an implementation of:
opcode = 0, no operation/fetch next instruction, and
opcode = 16, move C into the accumulator and add 1
(IR+SUBADDR is the full address of the microcode ROM, the rest of the line are the data bits affected at that address)IR=0 SUBADDR=0: PC.OE=T, MAR.LOAD=T, MAR.OE=T, MEM.CE=T, MEM.RD=T; all other data bits=F // tee-up a MEM address to fetch MEM data
IR=0 SUBADDR=1: MEM.OE=T, IR.LOAD=T; all other data bits=F // after MEM data returns one clock later, put it in IR
IR=0 SUBADDR=2: PC+1.OE=T, PC.LOAD=T; all other data bits=F // update PC with the PC+1 register; latter is updated whenver PC.LOAD=T
IR=0 SUBADDR=3: IR.OE=T; all other data bits=F // execute the new opcode in IR by jumping into the new IR+SUBADDR=0 in the microcode ROM
...
IR=16 SUBADDR=0: C.OE=T, Acc.LOAD=T, ALU.func=1111 (A+1 function); all other data bits=F // move C to Acc and add 1
IR=16 SUBADDR=1: ALU.func=1111 (A+1 function), ALU.OE=T, Acc=LOAD; all other data bits=F // move the ALU output (Acc+1) back into Acc
IR=16 SUBADDR=2: IR.CLEAR=T, IR.OE=T; all other data bits=F // execute IR=0 which fetches new instruction byte from memory
...I hope you get the gist.
Now translate all the latches, buffers, counters, gates into NOR logic, then into RTL!