The best way to learn how a CPU works would be to write a CPU! I.e., write HDL code for it and test in a hardware simulator.
I have designed a miniature application-specific processor, a compiler* and IDE for it, a disassembler, and an emulator too.
* To be more precise, I hacked a compiler for it using C# .net compiler.