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).
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.
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
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.
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