You might also find it interesting to implement a CPU on an fpga, a double win if you’ve never programmed an fpga before. For me it helped soldify exactly how a basic cpu works. In uni we had to do this for MIPS architecture with 5 state pipeline. The project was similar to [1] we also used the same book “ Computer Organization and Design”. You end up making your own assembly language in the process too.