BigDumbDinosaur wrote:
cbscpe wrote:
I'm thinking about a IO Bus and for this I wanted to slow down the CPU only for IO access...
Why not just use RDY and wait-state bus accesses?
I tried the same with using RDY, but ended always with a solution much more complex using additional gates and open collector devices. I also studied Andres Wait State generator, but was not happy with it. I wanted something "simpler" (where "simpler" means as seen by myself, which obviously must not be the same for everybody). At least my idea is very "small", because it just replaces the normally used 74AC74 (to generate PHI2 and /PHI2 for the Bank Address Latch) with a 74AC175 and adds one single IC a 74AC151.
Dr. Jeffyl wrote:
cbscpe wrote:
[...] a 2-bit Johnson counter. This uses FF1 and FF2.
Hmmm, I'd say it's
almost a Johnson Counter!
To my eye, it appears to lack a signal inversion in its loop!
I'd say the same
of course, you need to feed back the
inverted output of the last stage. My Error, thanks for spotting this.
Attachment:
File comment: Updated Schematic with corrected Johnson Counter
slow-clock-in-sync-inv.png [ 3.59 KiB | Viewed 800 times ]
PaulF wrote:
cbscpe,
I've had a think about your design and I believe it won't work the way you have drawn it. I think that you have the wrong inputs to the 74HC151 and they should be as follows
0 = Vcc
1 = SLOW'
2 = SLOW'
3 = SLOW'
4 = Gnd
5 = Inverted SLOW'
6 = Gnd
7 = Gnd
Tying input 3 low and input 5 high on the 74HC151 results in clock stretching on cycles that don't access I/O - I think the whole point was to avoid this. With these pins corrected, state 6 comes into play and this input needs to be tied low instead of high or you will again be stretching cycles that don't access I/O.
Not quiet sure I understand your point. In normal operation, that is no access to IO, i.e. /SLOW is not asserted (means it is high) the machine will continuously run through states
1->7->2->4->1
states 3 and 5 will not occur.
/SLOW must only be checked before PHI2C goes high. So it must be checked in states 1 and 2; inhibiting PHI2C going to high if /SLOW is asserted. This either results in the machine to go to state 0, if it was 2 or go to state 3 when it was in state 1. In the first case we are already in Sync with PHI2IO and can proceed to state 5, which is the start of a long PHI2C=High phase so PHI2C will be high again and this results in state 7. then 7 goes to 2. In the second case (we are now in state 3) we are not in sync with PHI2IO, there is no other way than to stay low and so we proceed to case 2. Now /SLOW is still asserted (PHI2 of the CPU did not change so all outputs of the CPU did not change as well and as /SLOW depends only on the state of Address lines /SLOW has not changed either and is still low), so we will proceed to 0 which is the same as the first case.
Cheers Peter