duodecaport


This document provides a preliminary description of duodecaport, a standardized I/O pinout for GPIO, microcontrollers, and FPGAs

Application

H3

H2

H1

H0

D7

D6

D5

D4

D3

D2

D1

D0

Simple GPIO

H3

H2

H1

H0

D7

D6

D5

D4

D3

D2

D1

D0

Analog in





A7

A6

A5

A4

A3

A2

A1

A0

Analog Out





A7

A6

A5

A4

A3

A2

A1

A0

SPI – 1 port with 8 chip selects

SS

SCK

MOSI

MISO

CS7

CS6

CS5

CS4

CS3

CS2

CS1

CS0

SPI – 3 indepent ports

SS0

SCK0

MOSI0

MISO0

SS1

SCK1

MOSI1

MISO1

SS2

SCK2

MOSI2

MISO2

PWM





PWM7

PWM6

PWM5

PWM4

PWM3

PWM2

PWM1

PWM0

Timer





T7

T6

T5

T4

T3

T2

T1

T0

CANbus





TXCAN3

RXCAN3

TXCAN 2

RXCAN2

TXCAN1

RXCAN1

TXCAN0

RXCAN0

USB ULPI 480Mbps transceiver interface

CLK

STP

DIR

NXT

D7

D6

D5

D4

D3

D2

D1

D0

Mux A/D BUS

CLK/Interrupt

AS

DS

R/W

AD7

AD6

AD5

AD4

AD3

AD2

AD1

AD0

Double pumped Mux A/D BUS

CLK

AS

DS

R/W

AD7/15

AD6/14

AD5/13

AD4/12

AD3/11

AD2/10

AD1/9

AD0/8

Ethernet RMII

50Mhz CLK

MDC

MDIO


CRS_DV

RX_ER

RXD1

RXD0


TX_EN

TXD1

TXD0

PCI Express PIPE interface, output channel

TXCLK

250Mhz


RESET


TXDATA7

TXDATA6

TXDATA5

TXDATA4

TXDATA3

TXDATA2

TXDATA1

TXDATA0

PCI Express PIPE interface

RXCLK


RESET


RXDATA7

RXDATA6

RXDATA5

RXDATA4

RXDATA3

RXDATA2

RXDATA1

RXDATA0

Mem IF

high byte

(double pumped)





AD15/31

AD14/30

AD13/29

AD12/28

AD11/27

AD10/26

AD9/25

AD8/24

Mem IF

low byte (double pumped)

CLK

AS

DS

R/W

AD7/23

AD6/22

AD5/21

AD4/20

AD3/19

AD2/18

AD1/17

AD0/16

Synchronous Unidirctional Strobed I/O

CLK

STROBE

ACK

BF/INT

D7

D6

D5

D4

D3

D2

D1

D0

Synchronous Bidirectinal Strobed I/O

CLK

STROBE OUT

STROBE IN

DIR

D7

D6

D5

D4

D3

D2

D1

D0

IEEE1284 Parallel Printer Port, Major signals

Direction/Init

STROBE

ACK

AS/Count

D7

D6

D5

D4

D3

D2

D1

D0

Synchronous Nibble IF

CLK

Strobe

Strobe


D3

D2

D1

D0

D3

D2

D1

D0





























































































































































Digilent 6 pin (4 bit) interfaces

This information is to facillitate adapter boards. 1 duodecaport can drive 3 digilent ports. Particularly since I am already using their JTAG pinout.

Board

1

2

3

4

5

6

JTAG

TMS

TDI

TDO

TCK

GND

Vcc

PMOD-DA2

Dual DAC

SYNC

DINA

DINB

SCLK

GND

VCC

PMOD-SF serial flash

SEL

SDI

SDO

SCLK

GND

VCC

PMOD-REG1

Power Supply

Passthrough

Passthrough

Passthrough

Passthrough

GND

3.3V

PMOD-CON3

Aircraft Servo

PWM

PWM

PWM

PWM

GND


PMOD-AD1

Dual A/D

CS

Data1

Data2

CLK

GND

Vcc


PMOD-DA1

Dual DAC

Sync

D0

D1

CLK

GND

Vcc

PMOD-PS2

PS2 Kbd/Mouse IF


data


CLK

GND

Vcc

PMOD-HB5

Half Bridge

DIR

EN

optoa

optob

GND

Vcc

RS-232

CTS

RTS

TXD

RXD

GND

Vcc

















Old PIA devices

6522

6820

6821 8 bits + 2 bits

Z8536

82C55

MC68901

Z80-PIO

Z80-PIO

Z8536













Z8536














82C55 PB

PC7

IO

OBFA*

OBFA*

PC6

IO

ACKA*

ACKA*

PC5

STBA*

Not used

IBFA

PC4

IBFA

Not used

IBFA

PA7

PA6

PA5

PA4

PA3

PA2

PA1

PA0

82C55 PB

PC3

INTRA

INTRA

INTRA

PC2

STBB*

ACKB*

IO

PC1

IBFB

OBFB

IO

PC0

INTRB

INTRB

IO

PB7

PB6

PB5

PB4

PB3

PB2

PB1

PB0

FTDI2232

UART mode

PortA

TXLED#

TXLED#

RXLED#

RXLED#

SLEEP#

SLEEP#

TXDEN

TXDEN

RI#

RI#

DCD#

DCD#

DSR#

DSR#

DTR#

DTR#

CTS#

CTS#

RTS#

RTS#

RXD

RXD

TXD

TXD

FTDI2232

245 FIFO Mode

Port A

WR

WR

RD#

RD#

TXE#

TXE#

RXF#

RXF#

D7

D7

D6

D6

D5

D5

D4

D4

D3

D3

D2

D3

D1

D1

D0

D0

FTDI2232

CPU FIFO mode

PortA

WR#

WR#

RD#

RD#

A0

A0

CS#

CS#

D7

D7

D6

D6

D5

D5

D4

D4

D3

D3

D2

D2

D1

D1

D0

D0

FTDI2232

Bit bang modes

RD#

RD#

WR#

WR#

RD#

RD#

WR#

WR#

D7

D7

D6

D6

D5

D5

D4

D4

D3

D3

D2

D2

D1

D1

D0

D0

FTDI2232

MPSSE

GPIOH3


GPIOH2

GPIOH1

GPIOH0

GPIOL3

GPIOL2

GPIOL1

GPIOL0

TMS/CS

TDO/D1

TDI/DU

TCK/SK

FTDI2232

MCU Host bus mode

OSC

WR#

IORDY#

RD#

I/O1

ALE

I/O0

CS#

AD7

AD15

AD6

AD14

AD5

AD13

AD4

AD12

AD3

AD11

AD2

AD10

AD1

AD9

AD0

AD8

FTDI2232

Fast opto mode











FSCTS

FSDO

FSCLK

FSDI

Strobed Data Notes:

To allow two strobed ports to be connected together using 1:1 wiring, it should be possible to swap the strobe and ack pins.

Separate clock and strobe signals were defined to allow synchronous use with the host FPGA/GPIO port providing a steady clock signal. Need to define a modified version for async operation.

82C55 Notes

8255 pinouts are included for comparison. However, this chip design is so badly broken that it's use with duodecaport is extremely limited. It lacks data direction on individual pins, direction can be set only for PA and PB on byte boundaries and port C on nibble boundaries. About the only aspect of this chip that was well thought out was the use of 8 bits data plus 4 handshake, but they weren't even consistent about taking handshake signals from the correct nibble of port C.

65C22 VIA notes

The 6522 VIA provided 8 data lines plus 2 handshake lines on each of two ports. Each line was independently programmable as input or output. To connect a 6522 to duodecport, connect all 4 handshaking signals to each port. CA2 and CB2, can provide a pulse when data is output or when input is accepted. CA1/CB1 can provide an output that goes low when data is output to the corresponding port and stays low until there is an acknowledge pulse on CA2/CB2. CB2 also functions an SPI data line and CB1 as a SPI clock line.

HCS12

Many of the port pinouts are partially based on the freescale MC9S12DP256 board I designed. It connects one full port and one half port to each I/O. So, for example, a dual SPI port is split in half to provide the four handshaking lines for two doudecaports.

Misc Chips



USB Low Pincount Interface (ULPI) Notes:

ULPI defines a 12 line (8 data bit) or 8 line (4 data bit, double pumped) interface between a USB transceiver and a USB controller which supports 480Mbps USB high speed mode. The PHY (transceiver) provides a 60MHz clock signal. Lower speed buses can use a transceiver with a single transmit and receive pin although the overhead signals add many additional pins. Curiously, the standard also describes a Carkit mode which is used to carry USB, UART, or Audio data over the same lines. Carkit spec is $125 frrom CEA.

PCI express and PXPIPE

PCI express is a high speed 2.5Gbps serial version of PCI. One lane in each direction, expandable to 2/4/8/16. PXPIPE is a parallel (8 data + clock in each direction) interface to a few PCI-e SERDES chips. A single pair is used in each direction for 1 lane PCI-e and can be up to 1 Meter long with approx 100 ohm termination (depends on trace impedence, typ 50 ohm each). PCI express uses 8B/10B encoding and is self clocking. Usually, Video cards are 16x (r 8x for two video cards) and other cards are 1x. Credit based flow control. There is a considerable overhead on each packet of 24 to 32 bytes and payload can be from 0-4096 bytes. 250MB/s throughput in each direction (500MB/s total). Interrupts are passed as messages. In addition to the standard PC slot, there are ExpressCard (replaces PCMCIA/Cardbus), Mini PCI Express (notebook internal, 51x30mm), CompactPCIxpress (replaces CompactPCI eurocard format), and IPCI-E (industrial, PCI express on passive ISA backplane format). PCIe switches (www.plxtech.com is one source) allow multiple masters or slaves to be connected to a PCIe channel.

http://www.interfacebus.com/Design_Connector_PCI_Express.html

Access to PCI Express specification requires $3000 PCISIG membership. There is a book which is a cheaper source of info:

http://www.amazon.com/PCI-Express-System-Architecture-Anderson/dp/0321156307/

(includes a substantial preview).






Note that a CPLD can be used to convert double pumped PXPIPE into PXPIPE, cutting the number of FPGA pins needed from 18 down to 10.

Presentation on tight vs loose coupling of PCIe differential pairs:
http://www.plxtech.com/pdf/technical/expresslane/Tight_Coupling_Slides.pdf



Hard drive interfacing

At this point, efficient interfaces to a hard drive are a bit of a problem as hard drives interfaces tend to have either very high pin counts or data rates which are too fast for programmable logic.

It would take at least two ports to connect directly to an IDE interface. Other options include using a CPLD to connect to a single port or to use an IDE controller with an 8 bit multiplexed address/data bus (if availible).

Required signals: D0-D15, CS0, CS1, DIOR, DIOW

Signals which can be ignored or tied to a level: CD1/CD2 (PCMCIA only), DMARQ, DMACK, IORDY, CSEL, PDIAG/CBLID

Optional INTRQ, RESET1

At this point, connecting hard drives (if 8GB flash cards won't do) to an embedded design might be best done through IDE, IDE to SATA bridge, USB to IDE/SATA bridge, PCI Express to SATA bridge, a SATA host controller, PXPIPE to PCI-e to SATA, LPC bus to ISA to IDE, etc.

SERDES

A number of high speed serial busses such as PCI Express, SATA, fiberchannel, etc. use 8b10b SERDES (serializer/deserializer).

While some high end FPGAs have generic SERDES I/Os, the development tools for these chips are expensive. So I am looking for some universal serdes chips. Found a chip for PXPIPE.

88i8030 is a SATA compatible SERDES to PATA bridge.

PMC Siera QuadPHY 6G SERDES is apparently Fiber Channel, iSCSI, STA, SAS, PCI express, and infiniband. $250 each when released.

FPGA to FPGA links

There are a number of options for FPGA to FPGA links. Here, I am concerned with links that connect the internal busses together rather than connecting a simple stream of data.

Options include:

I would like to design a generic bus interface module (master and/or slave) that uses the same set of wires to implement different busses in a common way. This would actually be a good IP core to include in ASIC or dedicated silicon designs as it would allow the same part to be used on a variety of different buses. Although a few of the faster busses can't be implemented on cheaper FPGAs, an expanded version of the core for ASICs could allow PCI, ISA, LPC bus, PXPIPE, multiplexed address/data, and possibly SATA, PCI-e, USB, or Firewire to be used over the same pins with a few extra pins, wire bonds, or JTAG bits selecting the bus interface.

Low Pin Count Bus (LPCbus)

This is a bus defined by intel to eliminate ISA on motherboards to connect to lower speed legacy I/O devices such as keyboard, mouse, serial, parallel, and floppy disk ports. Address, data, and commands are multiplexed over a 4 bit wide interface at 33Mhz. Because of the higher data rate, it is slightly faster than ISA.

http://www.intel.com/design/chipsets/industry/lpc.htm

Required Signals: LAD[3:0], LFARME#, LRESET#, LCLK

Optional Signals: LDRQ#, SERIRQ, CLKRUN#, LPME#, LPCD#, LSMI#

An example chip (not carried by digikey) is the SMSC LPC47N267 super I/O which has 2 16C550 serial, Paralle Port, some GPIO lines, Floppy disk controller, and X-bus. Digikey search of Super I/O, however turns up some other LPC parts

This bus looks well suited to adding a lot of legacy ports to an FPGA based system. Some super I/O ports have as many as 6 serial I/O ports. Some have IRDA/SIR/FIR, RTC, Game port, MIDI, Fan control, GPIO and/or watch dog timer. There are also LPC to ISA bridges.

LPC was part of the ISA to PCI transition but is also used in embedded systems. At least some Geode processors support LPC. In some cases USB may have supplanted LPC. However all USB to serial adapters are defective with respect to XON/XOFF flow control to devices with small buffers or which must pause serial activity while doing other work (such as burning flash).

The winbond W82L518D is an LPC to memory card interface (SD Card, Memory Stick, Smart card)

LPC was apparently used for some docking station interfaces, as well.

The winbond W49V002A is a 256Kx8 3.3V flash memory with LPC interface. The SST49LF020 is also a 256Kx8 LPC flash. Sandisk apparently has some diskonchip models that support LPC.

SMSC, Winbond, and National make Super I/O devices.

LPC interface I/O cards will be intended for FPGA use. They can also be used with microcontrollers, etc. but speed will be slower as the bus will have to be bit banged.

http://warmcat.com/milksop/cheapLPC.html

Someones ABEL file to interface SRAM on LPC bus http://www.j-rex.com/assets/download/lpc_sram.abl

Connector orientation

Microcontroller/FPGA boards should have the ground pins oriented away from the edge of the card. The reason for this is that these cards will normally be double or multilayer cards which can have lines between pads but the I/O cards, which may be home etched prototypes, benefit from having ground at the edge of the card.

An exception to this is if right angle connectors are used on both the FPGA/microcontroller and I/O cards. However, the prefered configuration is to use vertical male on top female on bottom cards which facilitate stacking multiple cards on the same I/O connector and facilitate logic analyzer, oscilliscope, and other test probe access. This also facilitates embedding the microcontroller/FPGA card layout directly into a larger board after prototyping.

A standardized spacing will be defined for pairs of duodecaports to facilitate direct stacking of I/O modules that require more than one port. Currently, it looks like that spacing will be 1.550” from pin1 to pin1.

Standard card size is looking like it will probably be:

Width: 1.5” (38.1 mm)

Length: 100mm (3.937), some cards will be less than full length.

This lets a eurocard be split into four cards with a 100 mil (2.54mm) kerf.

Panel Size:

DSS 160x100mm 4

DSQ 320x200mm 16

10x14: 24

5.5x4: 3

11x8: 14

Memory notes

Memory interfaces tend to use up I/O pins like crazy. And newer DRAM doesn't share a bus well with flash and other devices. This is why I am looking at a two port wide, double pumped multiplexed address data bus. Multiplexing the address with the data will add one clock cycle overhead to each non-sequential memory burst which is a small price to pay for not using up half your FPGA pins.

Xilinx is coming out with a device with over 1MB of flash on the FPGA soon.

New Microcontroller designs

For new microcontroller board designs, the use of an FPGA or CPLD is recommended instead of existing GPIO chips. This is much more flexible and can be cost competitive.

New GPIO designs

I am working on a GPIO design that would be compatible with the pinout and much of the functionality described here. It will initially be implemented in an FPGA. (Note: add keyboard wakeup option on all pins).

I/O cards

This bus is being designed to work with a variety of modules


The plan is for most of the I/O cards to have CPLDs on board. These will allow the same board to be used with alternative interfaces including split SPI, SPI with 8 chip selects, non-standard SPI from various microcontrollers, Parallel interface, etc. CPLDs will also help with level translation, pin count reduction, and buffering. Even trivial cards such as a card with 12 LEDs
will use CPLDs instead of CMOS buffers.


Firewire (IEEE-1394)

TI TSB11LV01 is a 100Mbps firewire PHY. Looks like 9 essential I/O pins. Digikey non-stock, large minimum order.

TSB41AB1PAP is a 100/200/400Mbps firewire PHY. Looks like 10 to 16 pin link interface, depending on speed. However, the

data is single pumped so double pumping could be used to lower pin count with a CPLD. $3.38 at digikey.





3 port PHYs also availible.

Ethernet

National DP83848 is a single port 3.3V MII/RMII interfac6e PHY.

National DP83848 3.3V, 10/100Mb/s, JTAG MII or RMII interface, digikey $4.73, external 50Mhz XTAL oscillator for RMII mode, 48 pin LQFP (7mm x 7mm).
TI TLK2201 2.5V (3.3V tolerant), gigabit ethernet transceiver, higher pin count interface.


SMSC LAN91C96 is a Non-PCI single chip ethernet MAC, 10Mbps only

Magjack jacks contain magnetics inside connector.

3 port PHYs also availible.



Multiplexed Address Data bus

Only a single bus master is supported.

Can use one or two dodecaports. The normal mode is one. 8 bit data transfers per clock cycle in single pumped mode and 16 bit in double pumped. 8/16/32/64 bit addresses are supported, by simply strobing the address line multiple times and sending out data in little endian order. The same number of address bytes need to be used when addressing a specific device but not all devices need to use the same number of bytes. The top 3 or 4 bits are used for the device address. In double pumped mode, the bytes are sent out two per clock cycle. Single and double pumped devices can be mixed. Data or address is transferred on the rising edge of the clock for single pumped and on the falling and rising edges (in that order) for double. Each device looks at the last address transferred on the rising edge to determine if it is selected. To address a device with 16 bit wide registers in single pumped mode, the device will be responsible for buffering the bytes written to the lower byte address and then using them when the upper address is written. A single 8/16 bit conversion latch register can be shared across multiple device registers. Autoincrement of addresses can be supported for burst transfers without the overhead of clocking out an address on each cycle.

Interrupts and reset are somewhat limited by the number of pins for a single port implementation. Reset may be accomplished by writing to a register. Interrupts may be polled or one of the data lines can be driven through a resistor with the bus tristated when not in use. This requires that the master insert enough idle cycles to sample the interrupt lines. The possibility of asserting both the address strobe and data strobe will be looked into as an alternative means of sampling interrupts, with R/W being used as an extra signal to allow extra bus control signals (including perhaps device reset). Address strobe + datastrobe + write = reset (needs to be deglitched), address strobe + datastrobe + read = sample interrupts/dma requests. With appropriate signal levels and async reset, the normal pullups on an FPGA or micro could reset interface boards when master is reset.



Synchronous or async transfers may be supported.

Stacking Headers

Mil-Max SSQ-113-03-G-D is a 26 pin female header with wire wrap pins, suitable for use as a male/female stacking header ($5.33 digikey). SSQ-113-03-S-D is similar but the wire wrap pins are only tin plated instead of gold flash.

Stepper driver interface

Put 2 ohmicron connectors on each set of lines to support ganged axes.

Put DB-25 for other brands

User Interface board

High speed ADC, digital oscilloscope, video in

The AD9054A is a 200MSPS 8 bit ADC. Single 100Mhz or dual 100Mhz parallel outputs. Minimum sample frequency 25Mhz. $31.80 each at digikey ($27.78 for 135Mhz version). 44-LQFP. Good bang for the buck. Minimum clock rate 1Mhz, Maximum 200Mhz. Internal reference. 1V p-p analog input. Minimum interface is 8 data bits, 1 clock, and one data strobe but that halves the operating frequency; optionally the clock can be differential.

ADC08100 is a 8 bit 20MSPS to 100MSPS converter. $8.63 digikey, 24 TSSOP. 3V operation. external reference. Analog input requires buffering.



ADC08B200CIVS ($23.40) 200MSPS with 1024 byte capture buffer, external reference. 500Mhz bandwidth. Buffer can be disabled to read outputs directly (6 cycle delay)

ADCS9888 is a 3 channel (RGB) ADC 205/170/140MSPS video ADC. $22.65 for 205Mhz version, $16.20 at digikey for 170MSPS version, $14.14 fro 140MSPS version. 75/150/300/500Mhz programable bandwidth. 3-3.6V analog supply, 2.2 to 3.6V I/O supply. 0.5V or 1V single ended input, positive going range. High impedence input. Suggest capcitive coupling for clamping and DC restoration.. 128-PQFP, not square. Double outputs for each channel. Optional 4:2:2 pulldown (driving only red and green A ports). In dual channel mode, it can support 6 inputs? It appears you get every sample in single channel mode. Series termination resistors to be used on each output. IIC access to configuration registers. Must disable horizontal sync or video inputs will be clamped. Could probably connect one set of inputs to a VGA connector and the other to BNC connectors (with hsync tied appropriately) to switch between video and scope mode. Put BNC inputs on side of the card. Or use two sets of BNC inputs, in which case I think you can digitize 6 channels at half the frequency. Will require 3 duodecaports but might be able to set it up so you only use two and hang the blue off the side, if you are only using 2/4 inputs or are using 4:2:2 pulldown. The blue pins are located appropriately for this. Could attach two cards to one FPGA, supporting a total of 6 high speed or 12 low speed channels and they would all end up on one side of enclosure, but not much room for memory. 1.3W. Internal reference. Minimum conversion rate 10 MSPS.

For software defined radio, there is a multiband filter board example here: http://wb6dhw.com/SDTCVR.html, using FST3251 (obsolete) muxes. 4-20 ohm on resistiance, 1uA leakage. Uses AD9954, AD9958/59, DACS with a cypress cy7C68013.

ADG918 is a 2GHZ 2:1 mux, unused chanels are terminated to 50 ohms (or ground for ADG919). 8-LFCSP or 8-MSOP package. $1.27 digikey. 1.65 to 2.75 power supply, only switches voltages between rails.

PXPIPE style narrow stream interface

6 lines in each direction. 4 data, double pumped. 1 clock, 1 acknowledge. The acknowledge allows it to be used with slow chips like a CPU. Output nibble, drive clock high, wait for ack to go high, output nibble, drive clock low, wait for clock to go low. If not using ack, could be used as a reset pin.

Related

Make a SD/SDIO expander for PDAs with many slots
Make a SD/MMC SPI GPIO
Make a USB to SDIO adapter