Database schema
The device database is provided in machine-readable form as three JSON files:
xc9500.json, describing all XC9500 devices
xc9500xl.json, describing all XC9500XL devices
xc9500xv.json, describing all XC9500XV devices
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 devicebonds
(list of object): list of bondspeeds
(list of object): list of speedparts
(list of object): list of partmc_bits
(object): a tile describing per-MC bitsfb_bits
(object): a tile describing per-FB bitsglobal_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 devicefbs
(number): the number of FBs in the deviceios
(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 devicetdo_bank
(number): the I/O bank index that is used to drive the TDO special pinio_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 IMUXuim_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 µserase_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’sio_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 pinGND
,VCCINT
,VCCIO{bank}
: power and ground pinsIOB_{fb}_{mc}
: an I/O pinTMS
,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 lowercasedevice
(number): the index of the corresponding device in thedevices
field of the databasepackages
(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 thebonds
database fieldspeeds
(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 thespeeds
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 setone 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 inbits
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