One bit at a time, please

analysis
Mar 4, 20054 mins

To build a clean, perfectly timed, and routable serial bus, start with a handful of marbles

I’ve taken up the hobby of designing and constructing marble runs, which are made of long interconnecting tracks. Straight lines, gentle inclines, and tubes are kiddy stuff. A track isn’t worth building or watching if it doesn’t seem beyond a fast-moving marble’s ability to navigate without the marble getting hung up or flying headlong off the track and onto the floor.

There are some challenges that a marble can’t overcome on its own. It won’t roll uphill. It won’t take a hard turn of 90 degrees or less. And if forced to make any tight turn at too high a speed, a marble will leave the track. It’ll jump at exactly the same spot, every time, and rather than prevent derailment, the adjustments I make to try to keep it on the track usually make it jump sooner or later than it did the time before.

But any kid with perseverance and imagination can get one marble to the bottom of a reasonably complex track. I like to design tracks with obstacles that can’t be overcome by one marble, but if I send down another marble, the first marble clears the obstacle with the second one’s help. And there’s more than one way to keep all the marbles moving. I have a little book of modular obstacles I’ve worked out that, when linked together, create marble runs that can pull anybody out of a bad mood.

If I set an overall goal of moving more marbles in less time, you might think I could just make a wider track and dump a pile of marbles at the top.

Unlike a serial column of marbles, however, parallel marbles don’t care about helping each other. They don’t move toward the exits in an orderly fashion. They pile up at squeezes, slow each other down around corners, and shove each other off the track. Some will make it to the bottom, but you can’t predict how many or their order of arrival. You can groove the track a little, but then you have to reduce the incline ?slow the track down ? so adjacent marbles pick fights with each other. Parallel marbles sharing a track is just plain nasty.

Marbles beautifully demonstrate physics, and an understanding of physics will take you a long way toward understanding electronics.

Make one marble one bit of digital data, and make the marble track a data bus, and you begin to understand why an orderly convoy of bits is easier to design, implement, and improve than is the parallel alternative.

Most people associate RS-232, the pokey modem and dumb terminal interface, with serial communication. If you give me four wires and a pair of knitting needles, though, I can weave you a 2-bit-wide bus that will transport 2.8Gbps, clean and cheap as you please and, as an optional bonus, outside the box and through a skinny cable several meters long. Furthermore, if you want more transfers per second, you don’t have to clock up a serial bus. Just add two wires and, presto, you have another 2.8Gbps.

Oh, and there’s one other cool thing about one-track marble runs. A pair of identical tracks doesn’t have to move streams of marbles in the same direction or to a fixed destination. If I elevate tracks to make them feed each other, set them at opposing inclines so that marbles can come and go simultaneously, and make crude routers with little triangles cut out of balsa wood, I can drop a marble at any point of entry and route it to any downstream point of exit. Point-to-point.

Hey, I like that. It’s time to buy more track.