This took me a while to understand, but now it is clear, and it is elegant!
At any given time the CPU is doing something, including nothing.
What the CPU is doing depends upon the current values of the CPU Control Signals.
The current values of the CPU Control Signals and the next State depend upon the current values of the Opcode, the Condition Codes (Flags), and the current State (a number).
The State Register contains the current state. The next state is latched into it on the rising edge of the clock cycle.
The Instruction Decoder takes the Opcode, Condition Codes, and current State values and decodes them into CPU Control Signals and the value of the next state. Think of it like the inputs are the address and the outputs are the data stored at the address. In fact that is a quite good way of thinking about it as we can implement the decoder in a ROM. The stuff stored in the ROM is called Microcode. Which makes this machine a CISC machine. You could implement the decoder in logic gates, and/or diodes, but a ROM is simpler and has the advantage of being software programmable.
For the selected instruction set we will need 10 bits for the Opcode, and for the Processor Status Word Condition Codes 4 bits, and for the State number, humm ...In all of the homemade CPU's I've looked at on the net it seems like 16 states is enough, however I'm kinda tempted to allow for more in case I want to add multiplication and/or CORDIC in the future (I don't know how many states they will need yet). So for now I will allocate 5 bits for the state.
That gives us 10 + 4 + 5 = 19 bits. So we'll need a 512k ROM.
Each ROM will allow for 8 CPU Control Signals. If more than 8 Control Signals are required then the addresses can be paralleled with multiple ROMs.
Although out of sequence I'd just like to record that having a ROM decode was the real reason to go for the PDP-11 opcodes. You don't have to have a direct one-to-one matching between the opcodes and the control signals. Feed in anything you like, and get out what you require. It is software that does the mapping.
Also it has just popped into my head that a ROM could be used to store constants like +1, -1, AND masks, CORDIC parameters etc. Just mention that in case I forget about it.

