BigDumbDinosaur wrote:
Something I'm not clear on is which processor is being used. Is this CMOS or NMOS?
The processor used in my captures is relabeled as NMOS and almost certainly is NMOS (unless someone made a CMOS processor that pulls >100 mA; all the CMOS I've seen have been less than one tenth that). The target processors for the original question are both NMOS and CMOS, ranging from antiques all the way through to modern WDC parts.
Continuing, I just want to make sure I'm clear on this: "first phase" is Φ0 and Φ2 low, right?
BigEd wrote:
I was reacting to this:
Quote:
this experiment turns out not be properly set up to confirm that the address lines change well before Φ0 rises
because it implies some linkage between the rise of the clock and the change of the address lines.
Well, there is an explicit linkage, is there not? If you follow all the timing calculations transitively, you come up with the conclusion that the address lines
must be valid before Φ0 rises, and thus you can (and should?) use Φ0 rise as a signal that address bus value is stable and you should read it then. Or am I getting confused here about how we build systems?
I was not meaning to say that Φ0 rising
causes the address lines to do anything, and I am unclear about how my statement could be interpreted that way, since if the address lines become valid
before the Φ0 rising edge, that rising edge clearly can't have caused the event that preceded it. (But I welcome comments on where I might have phrased things poorly.)
Quote:
If we imagine a 6502 running at rather a fast clock rate and with rather heavily loaded address lines, I think we will see the address lines settling as late as we like, without relation to the rising edge of the clock.
Wouldn't that be a broken system, then, if you can no longer use the rising edge of Φ0 (or Φ2) to determine that what's on the address bus is now valid (and therefore it's now, e.g., safe to assert a RAM's write signal)? Could such a thing happen if you're obeying all the timing restrictions in the data sheet and not doing things that would cause bus contention?
Quote:
My belief is that the rising edge is a convenient, but not a definitive, timing marker...
This is where I'm really confused. If we don't have a definitive timing marker for when the address lines are valid (and can then, e.g., assert a RAM's write signal), how can we have reliably working systems?
Quote:
...the data bus, which is indeed driven by the CPU only during the second phase of the cycle (and of course only during a write.)...If you arrange some other device to access memory during this phase, you'll find you can, because the CPU is not driving.
I think you by "this phase" you actually meant the other phase, Φ2 low instead of Φ2 high, right?
Looking around at the diagrams, only the one from the
6510 (1982) data sheet gives me much clarity on this, and seems to indicate that A) it will definitely start being driven sometime before the Φ2 falling edge, and B) it will stop being driven some time after the Φ1 rising edge that follows the Φ2 falling edge.
I get conclusion A) from T-MDS (data setup time) being max 200 ms. (at 1 MHz) from the start of the Φ2 rising edge, which is well under the 470 ms. minimum of PWHΦ2 alone even before you add in the length of time it takes the edge to rise (T-R). I get conclusion B) from T-HW (data hold time–write) being a minimum of 10 ns after the Φ1 finishes rising, which is no earlier than when Φ2 finishes falling.
Attachment:
timing-6510-mos-1982.png [ 110.57 KiB | Viewed 1194 times ]
GARTHWILSON wrote:
After the end of the write, bus capacitance will hold the data for a surprisingly long time when nothing is driving the bus
Well, I knew that, but it just now finally sunk in that of course I'm seeing the results of this in my captures above: while I can tell when something
starts to drive the data bus, I can't tell when it
stops because the data bus won't change much, if at all, when that happens. (Though there is an interesting little "bump" in the zoom of DB0 0→1 increment capture just after the Φ2 falling edge where the D0 level actually increases slightly (a fraction of a volt) for some reason at just the time when you would expect the CPU to stop driving it.)
At any rate, if my above timing analysis is correct, and a correct summary is "on writes the data bus will start being driven sometime after Φ2↑ and well before Φ2↓, and will stop being driven very shortly after Φ2↓," then I think I'm good with this part.
And then, getting back to the original topic of this discussion, I think we can also conclude that, given the relatively huge amount of time between data setup finishing and Φ2 falling, the Φ0 falling edge should also always be perfectly fine for indicating that data on the data bus are driven and stable and so for that particular purpose it's always safe to use Φ0 instead of Φ2. The only way I can see that breaking is if there's some stupidly long delay between Φ0 and Φ2 which would probably mean a system terribly broken in many ways, right?