Fortunately I have never needed a wait state generator for anything I have ever designed. Now that I am using an expansion system I need one. This is due to the ability of the CPU to access memory on an expansion board and complete transfers to/from that memory. The CPU writes a control word to a register that selects which expansion slot the CPU wants to communicate with (not to be confused with an I/O address), the starting addresses for reading and writing, and address increment/decrement controls, then begins to access the memory on the card as a single I/O address through a "BIOS" port. For this to work, the expansion circuitry needs to keep track of what addresses the CPU is reading and writing to. This is where the wait state generator comes into play - to tell the CPU to wait until the circuitry is ready. When the CPU accesses the BIOS port the address counters will automatically increment/decrement, thus the need for two wait states while the counters and output circuitry sets up for the access. This BIOS memory on each card is how the plug and use system works. When a card is plugged into a slot the system recognizes the change and automatically tries to identify the card type, hardware, drivers, system resource requirements, etc.
The top picture is the timing that I will need to follow while the bottom picture is the basic wait state generator (with some test parts added) in a simulation program I use.