dml wrote: Tue May 20, 2025 8:25 pm
The 030 takes multiple clocks to complete each instruction - each assembly op breaks down into simpler micro-ops on the chip - and each clock tick moves that pipeline forward - it can continue doing that even if it is waiting for a write to happen (writes are deferred) or while a write is happening.
That's interesting and something I hadn't really considered.
Speaking for DSTB1 as the closest analog (although that's not an 030 it talks to an ST bus) there are two advantages to slowing down.
While the processor is designed to work asynchronously the motherboard isn't. The most efficient way to turn around bus cycles is to assert DTACK not when the data is ready (or on a write, when the latch has happened), but on a promise.
That is to say on an 68k read DTACK is sampled going into S5 and the data latched going into S7. The ST asserts at least one (8MHz) cycle early so the 68k hits its gate. It's the 'synchronous' version of the cycle described in section 5.8 of the datasheet.
If we're running at 50MHz we need to keep track of what state the ST thinks its in and what state we're actually in and therefore delay DTACK assertion until both tie up. In theory it's doable, but it's tricky and complicated by additional wait states from RAM refreshes and the fact that some accesses (eg ROM) generate DTACK immediately (ie. going into S3). Propagation or clock-domain crossing resampling delays mean you tend to end up having to err on the side of caution (eg. you think the ST thinks it's in one state, but really you were a bit slow and it's actually two states later so you hold off DTACK for an extra 125ns unecessarily) and so ST-RAM speed access takes a hit.
I had a second obvious reason when I started writing this, but I've lost it now! I'm getting old, you know!
BW