GIO

GIO is a computer bus standard developed by SGI and used in a variety of their products in the 1990s as their primary expansion system. GIO was similar in concept to competing standards such as NuBus or (later) PCI, but saw little use outside SGI and severely limited the devices available on their platform as a result. Most devices using GIO were SGI's own graphics cards, although a number of cards supporting high-speed data access such as Fibre Channel and FDDI were available from third parties. Later SGI machines use the XIO bus, which is laid out as a computer network as opposed to a bus.

Description
Like most busses of the era, GIO was a 32-bit address and data multiplexed bus that was normally clocked at 25 or 33 MHz. This meant that the bus uses the same path for addressing and data, thus normally requiring three cycles to transfer a single 32-bit value; one cycle to send the address, the next to send the data and then another to read or write it. This limited the bus to a maximum throughput of about 16 Mbyte/s at 33 MHz for these sorts of small transfers. However the system also included a long-burst read/write mode that allowed continual transfers of up to 4 kilobytes of data (the fundamental page size in R3000-based SGI machines); using this mode dramatically increased the throughput to 132 Mbyte/s (32 bits per cycle * 33 MHz). GIO also included a "real time" interrupt allowing devices to interrupt these long transfers if needed. Bus arbitration was controlled by the Processor Interface Controller (PIC) in the original R3000-based SGI Indigo systems.

Physically, GIO used a 96-pin connector and fairly small cards 6.44 inches (16.3576 cm) long by 3.375 inches (8.5725 cm) wide. In the Indigo series, the cards were aligned vertically above each other within the case, as opposed to the more common arrangement where the cards lie at right angles to the motherboard. This led to a "tall and skinny" case design. Since the cards were "above" each other in-line, it was possible to build a card that connected to both connectors on the computer's motherboard, thereby offering more room.

GIO64
GIO was later expanded to a 64-bit form, GIO64, retroactively renaming the earlier version GIO32. Addressing remained 32-bit but now allowed for both big-endian and little-endian addressing as indicated by a new control pin, whereas GIO32 only supported the SGI-style big-endian addresses. Data could now be transferred 64-bits at a time thereby doubling the speed. GIO64 could also be run faster than GIO32, up to 40 MHz, providing a maximum streaming throughput of 320 Mbyte/s. The page sizes were also adjusted to allow for the changing CPU's, starting at 4 kbyte for R3000 based machines, and up to 16 Mbyte for R4400 based ones.

Physically the GIO64 bus used much larger cards that were generally similar in size and layout to EISA cards, a deliberate choice that made development somewhat easier as well as allowing SGI to place EISA slots in the same machines. Specifically the external connector (the metal flange) was identical to EISA, but the shape of the board itself was slightly different.

Two versions of GIO64 were specified. The "non-pipelined" system worked in a fashion similar to that of GIO32, with transfers being set up directly on the bus. The newer "pipelined" system was what the actual boards used, and as the name implies the system set up transfers in a several-step operation that was decoded in the controller's internal pipeline. Internally the non-pipelined bus transferred data between the various parts of the computer, including GIO cards, EISA devices, SCSI and so forth. GIO cards used the pipelined controller to arbitrate and control timing, the data then being fed into main memory via the internal non-pipelined side.

GIO32-bis
A third standard, GIO32-bis, used the signals and timing of GIO64, but with the 32-bit connectors from GIO32. Properly designed GIO32-bis cards could be used in GIO64, GIO32 or GIO32-bis slots, differentiating the later two by looking at a pin tied to the ground in the original GIO32, and tied "high" in GIO32-bis. For low-throughput cards, GIO32-bis allowed a single device to be used on any machine supporting GIO, no matter what generation.