.. _xs1_port_to_pin_mapping: XS1 port-to-pin mapping ----------------------- On XS1 devices, pins are used to interface with external components via ports and to construct links to other devices over which channels are established. The ports are multiplexed, allowing the pins to be configured for use by ports of different widths. :ref:`xs1_port_to_pin_mapping_table` gives the XS1 port-to-pin mapping, which is interpreted as follows: - The name of each pin is given in the format XD where n is a valid xCORE Tile number for the device and pq exists in the table. The physical position of the pin depends on the packaging and is given in the device datasheet. - Each link is identified by a letter A-D. The wires of a link are identified by means of a superscripted digit 0-4. - Each port is identified by its width (the first number 1, 4, 8, 16 or 32) and a letter that distinguishes multiple ports of the same width (A-P). These names correspond to port identifiers in the header file ```` (for example port 1A corresponds to the identifier ``XS1_PORT_1A``). The individual bits of the port are identified by means of a superscripted digit 0-31. - The table is divided into six rows (or *banks*). The first four banks provide a selection of 1, 4 and 8-bit ports, with the last two banks enabling the single 32-bit port. Different packaging options may export different numbers of banks; the 16-bit and 32-bit ports are not available on small devices. The ports used by a program are determined by the set of XC port declarations. For example, the declaration:: on tile [0] : in port p = XS1_PORT_1A uses the 1-bit port 1A on xCORE Tile 0, which is connected to pin X0D00. Usually the designer should ensure that there is no overlap between the pins of the declared ports, but the precedence has been designed so that, if required, portions of the wider ports can be used when overlapping narrower ports are used. The ports to the left of the table have precedence over ports to the right. If two ports are declared that share the same pin, the narrower port takes priority. For example:: on tile[2] : out port p1 = XS1_PORT_32A; on tile[2] : out port p2 = XS1_PORT_8B; on tile[2] : out port p3 = XS1_PORT_4C; In this example: - I/O on port ``p1`` uses pins X2D02 to X2D09 and X2D49 to X2D70. - I/O on port ``p2`` uses pins X2D16 to X2D19; inputting from ``p2`` results in undefined values in bits 0, 1, 6 and 7. - I/O on port ``p3`` uses pins X2D14, X2D15, X2D20 and X2D21; inputting from ``p1`` results in undefined values in bits 28-31, and when outputting these bits are not driven. .. _xs1_port_to_pin_mapping_table: .. csv-table:: Available ports and links for each pin :file: portmap.csv :header-rows: 2