Database schema
The device database is provided in machine-readable form as three JSON files:
xc9500.json
, describing all XC9500 devicesxc9500xl.json
, describing all XC9500XL devicesxc9500xv.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:
chips
(list of object): list of chipbonds
(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
Chip
A chip is a structure describing a particular XC9500 die. A chip is referenced from a part. A chip is an object with the following fields:
-
kind
(string): the kind of the chip, one of:"xc9500"
"xc9500xl"
"xc9500xv"
All chips within a single file will have the same kind.
-
idcode
(number): the JTAG IDCODE of the chip -
fbs
(number): the number of FBs in the chip -
ios
(map from string to number): describes the I/O pads available on the chip. 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 chip -
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 chip. The keys can be:"GCLK[0-2]"
"GSR"
"GOE[0-3]"
The values are of the form
"IOB_{fb_idx}_{mc_idx}"
. Note that sometimes items in this map are overriden by the bond. -
imux_bits
(object) : a :ref:tile <xc9500-db-tile>
describing per-FB bits corresponding to IMUX -
uim_ibuf_bits
(object or null): for XC95288 chip, a :ref:tile <xc9500-db-tile>
describing the UIM IBUF bits; for every other chip,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 chip 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 chip'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 chip. A part is an object with the following fields:
name
(string): the base name of the part, in lowercasechip
(number): the index of the corresponding chip in thechips
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 chip 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 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 chips in the database, the coordinate is a list of three numbers, in order:
- always 0
- row coordinate of the fuse
- always 0
-
per-FB bits tile: identical for all chips in the database, the coordinate is a list of 3 numbers, in order:
-
always 0
-
row
-
bit within row; this should be decoded into column and bit as follows:
- column:
crd.bit % 9
- bit:
6 + crd.bit // 9
- column:
-
-
IMUX bits tile: chip-specific, the coordinate is the same as for per-FB bits tile
-
global bits tile: identical for all chips in the database, the coordinate is a list of 4 numbers, in order:
-
fb
-
row
-
bit within row; this should be decoded into column and bit as follows:
- column:
crd.bit % 9
- bit:
6 + crd.bit // 9
- column:
-
-
UIM IBUF bits tile: chip-specific, only for XC995288, the coordinate is the same as for global bits tile