If you really must run the processor's own buses off the board, Tony's recommendation to make every other pin (ie, a whole row) a ground pin really is the best way to get signal integrity, and in fact is how it's done with ribbon cables that have to perform at high speeds too. One of the enemies of high-speed digital performance is inductance; and having the return right next to a signal line will minimize that. It also minimizes the antenna effect, for both transmitting and receiving unwanted noise.
To go a little less extreme, you can have every signal line be next to a ground or virtual ground (like Vcc that's bypassed to ground right at the connector), instead of having ground on both sides of each signal line. That way 2/3 of the lines can be signal lines, instead of only half. We have this on the select lines of our
65SIB (6502.org Serial Interface Bus) specification.
Next down would be to have no signal line more than say .2" from a ground or virtual ground. You'll find this on my small
32Mb 4Mx8 5V 10ns SRAM module (which I can provide). I could get away with it there because signals don't have to go very far.
When I last designed and built some
automated test equipment (ATE) for our products, I used STD bus. It was a good solution at the time, but I don't think I would use it again at this stage. For one thing, STD bus would be impractical to try to interface to today's faster 6502/816. Also, there's less need for that type of bus today than there was back then. Take for example memory. At that time, if you wanted a megabyte of SRAM, battery-backed or not, it took a whole card. Now you can get more than that in a single IC socket on the CPU board, even in SRAM if you go with 3.3V. Back then, a disc-drive controller had to be on its own card also. Now, you can get far more storage in an SD card with the socket on the CPU board, or solder down a flash memory in a tiny SO-8 package. The same goes for so many other things. It is no longer necessary to go offboard for much of anything anymore, which is nice because taking the processor's own buses off the board brings a huge performance penalty unless you're happy limiting yourself to a couple of MHz.
What I advocate now after many more years of experience, as well as our now having a lot more SPI and I²C parts on the market, is not running the processor's own buses off the board at all (since that dramatically reduces the maximum speed),
not even buffered, but instead have several interfaces on the CPU board including something like our 65SIB (linked above) that we devised here which extends SPI in several directions at once and makes it suitable for both internal and external equipment and peripherals, both intelligent and non-intelligent, and works for SPI, Microwire, and dumb shift register devices all simultaneously. Other interfaces on the CPU board might include LCD, printer, keyboard, I²C, Dallas' 1-Wire, etc..
I should add that in the ATE mentioned above (and pictured at the link), only four of the boards were actually on the STD bus, and the STD backplane was only about five inches long. The other cards were controlled through a synchronous serial interface from the 6522 serial port giving hundreds of bits of I/O.
You might be surprised how much I/O and other features you can do with few parts if you plan it all right. One of the 6522 VIAs on my
workbench computer (my apologies-- the pictures there are rather outdated) is used for:
- Timer 1 generating interrupts for a software RTC
- printer interface
- keypad
- LCD
- beeper
- synchronous serial interface for things like my analog oscilloscope raster graphics display
- I²C
- A/D converter chip select
- and the ABORT input which is like Reset but less drastic.
That's all through a single 6522, simultaneously, and the only conflicts are that you can't press more than one key at a time while the LCD or printer are getting fed data our you'll mess it up, and you can't press a key during I²C operations. If you do use the I²C though, you can make tiny modules with only four pins: power, ground, clock, and data, or possibly add one or two more so you can have interrupts, although those won't often be needed for I²C devices. (Remind me to post a pinout standard for that.) I have some
serial EEPROM modules that are half the size of a postage stamp. Making it as modular as possible makes the project more manageable, and makes it easier to recover when you change your mind. Anyway, there's a lot of I/O bit sharing you can do on the I/O ICs.
I haven't done things like SATA, but my workbench computer exists for workbench I/O, not human I/O, and everything goes through three 65c22 VIAs and it also has three 65c51 ACIAs which get very little use. These are all on the main board. The things mentioned above go through the first VIA. In addition there are the
- A/D and D/A converters
- with audio ports
- and sockets for amplifier and anti-alias filter modules
- 65SIB port
- PC keyboard port
- port for frequency/event counter + external-instrument control
- Dalas 1-Wire interface
- SS22 port
- serial port to large external RAM & ROM
- MIDI
- 440MHz wireless link
- tape modem (whose use has been replaced with modern serial EEPROMs)
- and RS-232
that all go through the other two VIAs and the three ACIAs that are on the main board measuring 4.5x6.5", and there are plenty of bits left over for general use in projects.
It does have a board-edge connector plus a mezzanine board,
but the processor's own busses don't go to these. If I want to add USB or so many other things, they are available in SPI or other interfaces that can go through ports I already have.
Edit: This discussion was continued in the topic "Techniques for reliable high-speed digital circuits", about 40% of the way down the second page , at
viewtopic.php?p=17906#17906 .