Ok, so first of all, we'll start with clocks vs instructions. This actually varies between architectures. The AVR architecture will execute most instructions in a single clock cycle, while the PIC architecture requires 4 clock cycles per instruction, but I believe they also implement pipelining to basically complete 1 instruction every clock cycle. MIPS = million instructions per second, used to compare processor speeds between architectures that have a different number of clock cycles per instruction, since instruction execution is really what you care about in such a comparison.
As for memory access speeds, typically you'll have a host system that performs memory accesses at a certain speed, then you choose your memory accordingly so that your memory can perform at that speed or faster. This is why you want Flash ROMs that are 120ns or faster, because of the FastROM access speeds. However, in a situation where the memory has already been selected and you are designing your system to work with it (e.g. a microcontroller being used to burn Flash ROMs), you have to account for the memory access speeds so that you don't try to access the chip too quickly. The reason for this is capacitance. I think I explained this before in one of your other threads, but think of a capacitor as a small rechargeable battery. When you apply power to the capacitor, some of that power goes into charging the "battery" instead of into the rest of the circuit. This causes the voltage to rise slowly until the "battery" is fully charged. Now, when you remove the power source, the "battery" slowly discharges, causing the voltage to slowly drop as the capacitor discharges, instead of dropping instantly like you'd expect from "pulling the plug". Now, you have to understand that EVERY electronic component has capacitance, even if it's not a capacitor. Even wires, or copper traces on a PCB. These are usually MUCH lower capacitances than an actual capacitor, but it is still capacitance. This is true of chips too. That capacitance, the fact that it takes awhile for voltage to slowly raise or lower, means that it actually takes time for a pin to go from a 0 to a 1 and vice versa. This is also true of all of the transistors inside the chip itself. So it takes time between you setting up your address lines and toggling the control lines before the chip actually produces the correct data on the data lines. The chip is rated to perform at or better than the specified speed, but the rated speed is the fastest that you should expect the chip to perform.
So what does that mean to you? Well, let's try some pseudocode:
Code:
char ReadByte(int address)
-Pull all control lines (OE, WE, CE) high
-Set up address lines
-Pull CE and OE low
--[DELAY]--
-Read data lines
-Pull CE and OE high
-Return data
That delay depends on the speed of the chip. Looking at the AM29F032B datasheet, the time between OE going low and data being valid is 40ns, while the time between CE going low and valid data is 90ns. This means CE should go low before OE, but then we look at how long we actually need to wait. Assuming an AVR running at 8MHz, one instruction per clock cycle, 8MHz is 125ns per clock, so a single NOP should be sufficient delay between OE going low and reading the data, and actually, you probably don't even need it because it will take 125ns between the "pull OE low" instruction and the "read the data lines" instruction. However, I've had issues whenever I omit the delay with a 16MHz clock, so it really doesn't hurt to have it, other than a slight (to the point of being negligible) speed hit.
Address and data hold times for write operations on the AM29F032B are both in the 45ns range, so again, a single NOP is plenty. Also, the entire write cycle is only 90ns, so you shouldn't have to delay at all between writes, especially if you are using C and have a WriteByte function, because the stack frame code for entering/leaving a function would be plenty of delay even if you did need it. If you're using a 16MHz clock crystal instead of the internal 8MHz oscillator, your instruction period is half as long, about 65ns, so you have to figure that into your timing calculations.
For the most part, faster is better for the microcontroller clock source, unless you're trying to save power, such as in a battery operated project. You can always add delays for timing critical functions, but when you're dealing with timing critical functions, you will almost always rather have the extra breathing room given by a higher clock speed.