Can't you just the same trick and connect the /CS output of the CPLD to an input pin of the same and use that to add an extra delay? Or would that be too long with a full CPLD pass-through delay?
Alternatively, you can probably make do with a single inverter, the CPLD can do the first inversion internally
Or a non-inverting driver like the 74LVC1G07, which has a better worst-case latency than the 74LVC1G04.
Yeah, I need to do a bit of thinking and experimentation here. It doesn't have to be too precise a delay, but if it gets too long, it will start to impact timing of the rest of the bus cycle. I haven't done the math yet, but I think 1-10ns is what I'm aiming for. I was thinking along the same lines - the
74LVC2G17 dual non-inverting buffer looks to be a good candidate - I'll need two channels anyway for the two byte strobes, and its delay characteristics are pretty much exactly what I want.
Have you settled on a CPLD? With XIlinx discontinuing the XC9500XL family, it's becoming a problem for 5V projects :-(
I'm planning on using the Atmel ATF1502AS. This will be my first foray into CPLDs so I'm not sure how they stack up against the XC9500XL family, but it's cheap, available, works at 5V, and while it doesn't have many macrocells, my glue logic fits just fine.
How do you handle interrupts on a SE ? Just create another level with IPL0-2 lines that isn't used and put a vector there ?
I thought about using an otherwise-unused interrupt priority level, but with how the SE assigns them, only higher priority levels are available (1=VIA/SCSI, 2=SCC, 3=Unused, 4=NMI switch, 5-7=Unused). I want the ENC624J600 to have a relatively low priority, since its large receive buffer means that there isn't too much urgency in handling incoming data, and the design of the Mac OS network stack means that a lot of potentially time-consuming protocol-handling work happens at interrupt time. Having a higher priority than the NMI switch would make debugging a nightmare, and even the thought of using level 3 made me concerned about the SCC's tiny buffers and the consequences of missed interrupts if serial and ethernet were being used at the same time.
So what I ended up doing, was 'hijacking' level 1 to create a "level 1.5." The ENC624J600's interrupt output is connected to /IPL0 along with the VIA and SCSI chip. When the driver is opened, it
saves the level 1 vector at 0x64 and replaces it with its own routine. When a level 1 interrupt comes in,
my routine tests the interrupt bit in the ENC624J600's status register, and depending on its state, dispatches to my ethernet interrupt handler, or the handler that the vector was pointing to previously.
This does mean that the
spurious-interrupt bug in my revision 0 hardware can play havoc with the machine, but software mitigations mean that it's not too much of a problem (and when it does happen, all you need to do is power-cycle the machine), and I'll fix it properly in the next revision.
You might be surprised how many of us like that there are. Apple seems to have stopped making the type of computers I like. I'm a three expansion card, 3 hard disks kind of person, generally like towers, but not that fussed. IIci, Q650, 8100, 8600 kind of vibe...
Yep, that's about where I'm at, too. My main desktop computer is actually a MacPro3,1 tower, but I don't really consider it a 'Mac' any more since Apple dropped support for the NVidia graphics card I installed in it a few years ago (right after I bought the card too!), so it just runs Windows now