BigEd wrote:
As suggested upthread, a variable speed might be a good solution for testing out a design for overclocking, but isn't a great idea for accessing slow peripherals. There are techniques for pulse-suppression and techniques for glitch-free switching between clocks. You'd use those if you had a CPU which doesn't allow itself to be stalled, so for a 6502 you need a fancy clock but for a 65C02 you use RDY. (Except, RDY on the 6502 is fine for read accesses, so that's good for booting from ROM.)
It might help to think of a clock as a series of edges. You want to adjust the delay between edges. Just possibly you could cook up some phase-accumulator logic which runs fast enough that it can toggle a flop at the rates you want. But I imagine it would need to run at 100MHz or above, so this would be rather advanced. Indeed if you have a master clock at 100MHz and divide down by 8, 9 , or 10 that gives you 12.5, 11.1 and 10.0MHz. This is not continuously variable, of course.
It's a hazard of PLLs (I think) that when they are adjusted the output frequency might overshoot, which you'd very much want to avoid.
Re-reading over the thread, and something interesting that I thought of here.
I could put the LTC6900/1799 onto a small board that plugs into a DIP-8 socket, that is connected the way that an oscillator can would be. On initialization, I'd need the LTC to be set to its slowest value, so we can read our program out of EEPROM. After boot up, I could set the clock value via a program command, so that EEPROM is not involved at all, and if I needed to access EEPROM, I could use one of the delay lines you mentioned earlier to hold the RDY line low to extend the time we're talking to the EEPROM. Once I've found the fastest stable clock for the system, I can buy a can that matches that speed, and drop it into the DIP-8 socket that I've been running the LTC board out of. This would let me have my cake and eat it too, as long as the LTC is well behaved during its settle time.
EDIT: I don't necessarily need the slowest value on startup, since the delay line can work at startup as well. But having it reboot to a slow state is probably good practice, in case I get myself into trouble.