disclosure: I love computer architecture courses, and I highly recommend them.
edit: I also think you can skip the microprogramming, but I think I understand what you are getting at, which is that you do a multi-cycle implementation first and then a pipelined implementation.
While true the microprogramming ops are much simpler, the inherent parallelism means writing that stuff and getting it correct is usually challenging.
Non-pipelined is easier to write and debug, especially if you are used to regular sequential programming; once you have that working then it isn't too hard to turn it into a pipelined implementation.
A basic RISC style design is probably easier than a Z-80 because of the simpler addressing modes and the simpler decode.
I own/recommend iCESugar, as that's a good iCE40 devboard which is dirt cheap on the official shop in aliexpress[0].
Look at ECP5-based ULX3S[1] if you want to get fancy.
More options at [2].
[0]: https://muselab-tech.aliexpress.com/store/5940159
Choosing MICMAC or MMIX would be good macrolanguage target to start with. Remember, the microprogramming ops can be much simpler and VLIW-style.
The microprogram will be a ROM block that runs the decoding and execution of the actual processor's ISA. It's helpful to write a microprogram assembly language and compiler to make maintenance easier.