Let's try to picture what needs to happen.
MAR <- PC
We're going to assume that memory is slow. Thus, we will remain in this state until we receive an ACK = 1. This is a signal from memory to the CPU indicating it has placed the data (which is the instruction) onto the data bus.
When we get ACK = 1, we transition to a new state. In this state, we must still have CE = 1, R/\W = 1MARout (which enables the tri-state buffers).
Why do these signals have to occur? Once the ACK = 1 is sent from memory to the CPU, why do we need to keep asserting the signals to memory?
The reason is that the MDRload occurs near the end of the clock cycle, and we want the signals to memory to be maintained until that time. By setting CE = 0, we're telling memory we're done and it no longer has to place the value on the data bus. However, we aren't done until MDR has loaded the instruction. Recall the MDR is hooked up to the data bus, and is the only connection from the CPU to the data bus.
Once we've performed the load, we transition to a new state, where we can set CE = 0, which finally indicates we're done with memory. Furthermore, we can load IR with the data from the MDR.
For convenience, let's assume that if signal CE is in the state, then CE = 1, and if it's not in the state, then CE = 0.
| State 1 |
MAR <- PC ----------------- MARload goto State 2 |