Database schema

The device database is provided in machine-readable form as three JSON files:

All three files have the same schema.

Top level

The top level of the database is an object, with the following fields:

  • devices (list of object): list of device

  • bonds (list of object): list of bond

  • speeds (list of object): list of speed

  • parts (list of object): list of part

  • mc_bits (object): a tile describing per-MC bits

  • fb_bits (object): a tile describing per-FB bits

  • global_bits (object): a tile describing global bits

Device

A device is a structure describing a particular device die. A device is referenced from a part. A device is an object with the following fields:

  • kind (string): the kind of the device, one of:

    • "xc9500"

    • "xc9500xl"

    • "xc9500xv"

    All devices within a single file will have the same kind.

  • idcode (number): the JTAG IDCODE of the device

  • fbs (number): the number of FBs in the device

  • ios (map from string to number): describes the I/O pads available on the device. The keys are of the form "IOB_{fb_idx}_{mc_idx}" and identify the MC that owns the IOB. The value corresponding to the key is the bank index that the IOB belongs to.

  • banks (number): the number of I/O banks in the device

  • tdo_bank (number): the I/O bank index that is used to drive the TDO special pin

  • io_special (map from string to pair of numbers): describes the I/O pads with special functions on the device. The keys can be:

    • "GCLK[0-2]"

    • "GSR"

    • "GOE[0-3]"

    The values are two-element lists of numbers. The first number is FB index, and the second is MC index. Note that sometimes items in this map are overriden by the bond.

  • imux_bits (object) : a tile describing per-FB bits corresponding to IMUX

  • uim_ibuf_bits (object or null): for XC95288 device, a tile describing the UIM IBUF bits; for every other device, null

  • program_time (number): maximum time required by a program operation, in µs

  • erase_time (number): maximum time required by an erase operation, in µs

Bond

A bond is a structure describing the mapping of device pads to package pins. Bonds are referenced from part packages. A bond is an object with the following fields:

  • io_special_override (map from string to pair of numbers): a map like the device’s io_special map, containing per-bond overrides to the defaults (usually empty)

  • pins (map from string to string): the pins of the package; they keys are package pin names, and the values are:

    • NC: unconnected pin

    • GND, VCCINT, VCCIO{bank}: power and ground pins

    • IOB_{fb}_{mc}: an I/O pin

    • TMS, TCK, TDI, TDO: JTAG pins

Speed

A speed is a structure describing the timings of a device. They are referenced from part speed grades. A speed is an object with one field:

  • timing (map of string to number): a map from timing parameter name to timing data. All timing data is given in picoseconds, and is always an integer number.

Part

A part is a structure describing a particular commercially available part number. Several parts may correspond to the same device. A part is an object with the following fields:

  • name (string): the base name of the part, in lowercase

  • device (number): the index of the corresponding device in the devices field of the database

  • packages (map from string to int): the packages in which this part is available; the key is package name, and the value is the index of the corresponding bond in the bonds database field

  • speeds (map from string to int): the speed grades in which this part is available; the key is speed grade name (including the leading -), and the value is the index of the corresponding speed in the speeds database field

Tile

A tile is a structure describing a set of device fuses. There are multiple kinds of tiles used to describe the bitstream. The base structure of a tile is the same for all of these kinds.

A tile is an object where the keys are fuse set names, and the values are objects with the following keys:

  • bits (list of coordinate): the list of fuse coordinates in this fuse set

  • one of:

    • values (map of string to list of bool): used for an enumerated fuse set; the list of possible values for this fuse set; the value is a list of fuse values, corresponding one to one to the coordinates in bits

    • invert (bool): used for a plain bool / bitvec fuse set; if true, it means that the value of this bitvec or bool is stored inverted in the datastream (0 means true, 1 means false); if false, the value is stored directly without inversion

The type and interpretation of coordinate depends on the tile kind.

The following tile kinds exist:

  • per-MC bits tile: identical for all devices in the database, the coordinate is a single number and corresponds to the row coordinate of the fuse

  • per-FB bits tile: identical for all devices in the database, the coordinate is a list of 3 numbers, in order:

    • row

    • bit

    • column

  • IMUX bits tile: device-specific, the coordinate is the same as for per-FB bits tile

  • global bits tile: identical for all devices in the database, the coordinate is a list of 4 numbers, in order:

    • fb

    • row

    • bit

    • column

  • UIM IBUF bits tile: device-specific, only for XC995288, the coordinate is the same as for global bits tile