Search code examples
yosysice40

Correspondence between iCE40 I/O blocks and package pins


Is the correspondence between the I/O blocks of an iCE40 FPGA and the pins of the package they drive documented somewhere?

The I/O tile documentation of Project IceStorm gives a list of I/O blocks, and for each block where its IE and REN bits are located in the bitstream. A few blocks are missing from this list:

 0 16 *
 0 15 *
 0  7 *
 0  1 *
13  3 0
13  5 *
13 10 *
13 16 *
 6 17 0

Does that mean that these blocks don't exist?

While lacking a documentation, I was able to deduce the following correspondence for the iCE40-HX1K-TQ144 and the pins used on the iCEstick evaluation board by examining the bitstreams generated by the Yosys/arachne-pnr/Icestorm flow:

 0  8 1 ->  21 (PIO3_00 / clock)
 4  0 0 ->  44 (PIO2_10 / J3 10)
 4  0 1 ->  45 (PIO2_11 / J3 9)
 5  0 0 ->  47 (PIO2_12 / J3 8)
 5  0 1 ->  48 (PIO2_13 / J3 7)
 7  0 1 ->  56 (PIO2_14 / J3 6)
 8  0 1 ->  60 (PIO2_15 / J3 5)
 9  0 0 ->  61 (PIO2_16 / J3 4)
 9  0 1 ->  62 (PIO2_17 / J3 3)
13  3 1 ->  78 (PIO1_02 / Pmod 1)
13  4 0 ->  79 (PIO1_03 / Pmod 2)
13  4 1 ->  80 (PIO1_04 / Pmod 3)
13  6 0 ->  81 (PIO1_05 / Pmod 4)
13  6 1 ->  87 (PIO1_06 / Pmod 7)
13  7 0 ->  88 (PIO1_07 / Pmod 8)
13  7 1 ->  90 (PIO1_08 / Pmod 9)
13  8 0 ->  91 (PIO1_09 / Pmod 10)
13  9 1 ->  95 (PIO1_10 / D5)
13 11 0 ->  96 (PIO1_11 / D4)
13 11 1 ->  97 (PIO1_12 / D3)
13 12 0 ->  98 (PIO1_13 / D2)
13 12 1 ->  99 (PIO1_14 / D1)
13 14 1 -> 105 (PIO1_18 / TXD)
13 15 0 -> 106 (PIO1_19 / RXD)
13 15 1 -> 107 (PIO1_20 / SD)
12 17 0 -> 113 (PIO0_03 / J1 4)
12 17 1 -> 112 (PIO0_02 / J1 3)
11 17 0 -> 115 (PIO0_05 / J1 6)
11 17 1 -> 114 (PIO0_04 / J1 5)
10 17 0 -> 117 (PIO0_07 / J1 8)
10 17 1 -> 116 (PIO0_06 / J1 7)
 9 17 0 -> 119 (PIO0_09 / J1 10)
 9 17 1 -> 118 (PIO0_08 / J1 9)

However, I'd like to cross-check this information if possible.


Solution

  • Does that mean that these blocks don't exist?

    It means those blocks are not connected to actual IO pins. I would assume they still exist on the silicon. But since I've never looked at the actual die, I have no way of knowing.

    However, I'd like to cross-check this information if possible.

    See the .pins tq144 section of chipdb-1k.txt. For example:

    Your list: 0  8 1 ->  21
    My list: 21 0 8 1