Device geometry
General structure
Virtex 5 devices follow the same general structure as Virtex 4 devices, with minor changes.
Virtex 5 devices are divided into "regions". A region is exactly 20 interconnect tiles high. In addition to 20 interconnect rows, each region has a special HCLK row running through the middle (between rows 9 and 10), which is not counted in the row numbering.
The exact sequence of columns varies with the device. The main available column types are:
- CLBLL column: contains 
CLBLLtiles, one for every interconnect tile. - CLBLM column: contains 
CLBLMtiles, one for every interconnect tile. - BRAM column: contains 
BRAMtiles, one for every 5 interconnect tiles (ie. 4BRAMtiles per region) - hard logic column: a variant of BRAM column; contains a mixture of:
BRAMtilesEMACtiles (10 interconnect tiles high, replaces twoBRAMtiles)PCIEtiles (40 interconnect tiles high, replaces 8BRAMtiles)
 - DSP column: contains 
DSPtiles, one for every 5 interconnect tiles (ie. 4DSPtiles per region) - IO column: contains 
IOtiles, one for every interconnect tile; also contains specialHCLK_IOItiles in the HCLK rows - the center column: there is exactly one of those per device; it contains a mixture of 
CFG,IO,CMTtiles - GT column: contains 
GTPorGTXtiles, one for every region (ie. one for every 20 interconnect tiles) 
Each of the above types of columns is colocated with a single interconnect column. The interconnect column consists of:
INTtiles, one per interconnect row (16 per region)INTForINTF.DELAYtiles, one for everyINTtile, except forINTtiles associated withCLB*tilesINTFis associated withBRAM,DSP,IO,CMT, andCFGtilesINTF.DELAYis associated withGTP,GTX,PCIE,EMAC, andPPCtiles
HCLKtiles, one per region (located in the HCLK row)
Additionally, there are two special kinds of columns that are not counted in the normal column numbering, and exist in between interconnect columns:
- the clock column, which is always immediately to the right of the center column; it contains:
- the 
BUFGCTRLglobal clock buffers (located next to theCFGtile) CLK_IOB_*,CLK_CMT_*, andCLK_MGT_*tiles, which multiplex and feed clock sources into theBUGCTRLprimitivesCLK_HROWtiles, which buffer theBUFGCTRLoutputs onto HCLK rows
 - the 
 - the vbrk columns, the significance of which is unknown
 
There can be up to two dedicated IO columns per device, the left and right IO column. The center column counts as the third IO column.  The left IO column is the leftmost column of the device, except for devices that have a left MGT column, where it is a few columns away from the left edge.  The right IO column is present on all devices except xc5vlx20t, and is located a few columns away from the right edge.
There can be up to two MGT columns on the device, depending on the device type:
- the 
lxtandsxtdevices have exactly one MGT column, which containsGTPtiles and is the rightmost column of the device - the 
lxdevices have no MGT columns; however, they are suspiciously identical tolxtdevices with the rightmost two columns cut off - the 
fxtdevices have exactly one MGT column, which containsGTXtiles and is the rightmost column of the device - the 
txtdevices have exactly two MGT columns, which containGTXtiles and are the leftmost and rightmost columns of the device 
If the device contains MGT columns, it also has a hard logic column, which is the second rightmost column of the device, right next to the right MGT column. lx devices have no hard logic column.
The other kinds of columns (CLB, BRAM, DSP) come in varying numbers, locations, and proportions, depending on device size and kind.
PowerPC holes
Some devices have hard PPC cores, which are the only exceptions to the otherwise regular structure, creating a hole in the interconnect grid. The hole is 2 regions (40 rows) high and 14 columns across. The 14 columns involved are always the following, in order:
- CLBLM
 - CLBLL
 - BRAM
 - CLBLM
 - CLBLL
 - CLBLM
 - CLBLL
 - CLBLM
 - CLBLL
 - BRAM
 - CLBLM
 - CLBLL
 - CLBLM
 - CLBLL
 
The hole always starts at row 0 of a region, and ends at row 19 of another region (ie. it takes up 2 whole regions).
The leftmost/rightmost columns of the hole contain interconnect tiles as usual, providing inputs/outputs to the PPC core. However, the inner 12 columns have no interconnect tiles, and some interconnect lines terminate at the boundaries.
Center column
The full-featured center column contains the following main tiles, in order:
- region 
c - 6throughc - 4: 20 IO tiles per region, one per row, belong to banks 10, 8, 6 (in order from the bottom) - region 
c - 3and bottom half of regionc - 2: threeCMTtiles, each of them 10 interconnect rows high - top half of region 
c - 2: 10 IO tiles, belonging to bank 4 - bottom half of region 
c - 1: 10 IO tiles, belonging to bank 2 - top half of region 
c - 1and bottom half of regionc: theCFGtile, which is 20 interconnect rows high - top half of region 
c: 10 IO tiles, belonging to bank 1 - bottom half of region 
c + 1: 10 IO tiles, belonging to bank 3 - top half of region 
c + 1and all of regionc + 2: threeCMTtiles, each of them 10 interconnect rows high - region 
c + 3throughc + 5: 20 IO tiles per region, belonging to banks 5, 7, 9 (in order from the bottom) 
In devices that are less than 12 regions high, this full-featured column will be truncated at the top and the bottom — first trimming off banks 9 and 10, then 7 and 8, then 5 and 6, then CMTs, then finally trimming bank 3.  The center column on the smallest device, xc5vlx20t, contains only one CMT at the bottom, the CFG tile, and banks 1, 2, 4.
In addition to the main tiles, the center column also has special tiles in HCLK rows:
HCLK_IOI_CMTin the HCLK row above lowerCMTsegments (regionc - 2)HCLK_IOI_BOTCENin the HCLK row right belowCFG(regionc - 1)HCLK_IOI_TOPCENin the HCLK row right aboveCFG(regionc)HCLK_CMT_IOIin the HCLK row below upperCMTsegments (regionc + 1)HCLK_CMTin the HCLK rows between twoCMTtiles (regionsc - 3andc + 2)HCLK_IOI_CENTERin the remaining HCLK rows
Spine column
The spine column is responsible for global clock routing. It has no corresponding interconnect column, borrowing interconnect from the center column where necessary. It has the following tiles:
- the 
CFGtile occupies both the center column and the spine column (specifically, theBUFGCTRLbuffers and their multiplexers are in the spine column) - at every HCLK row: a 
CLK_HROWtile - next to bank 4: a 
CLK_IOB_Btile (10 rows high) - next to bank 2: a 
CLK_IOB_Ttile (10 rows high) - next to every 
CMTtile: aCLK_CMT_B(belowCFG) orCLK_CMT_T(aboveCFG) tile (10 rows high) - next to banks 5-10: a 
CLK_MGT_B(belowCFG) orCLK_MGT_T(aboveCFG) tile, one per bank (or per region); the tile is 10 rows high and occupies the top half of the region (belowCFG), or the bottom half of the region (aboveCFG) 
Bitstream geometry
The bitstream is made of frames, which come in two types:
- 0: main area
 - 1: BRAM data area
 
The bitstream is split by region — each frame covers 20 interconnect rows plus the HCLK row, and the frame size is independent of device size.
Frames are identified by their type, region, major and minor numbers. The major number identifies a column (interconnect column or the clock spine), and the minor number identifies a frame within a column. The major numbers are counted separately for each type of frame.
For bitstream purposes, the regions are counted using the CFG tile as the origin. Top region 0 is considered to be the region that contains the upper half of the CFG tile, top region 1 is the region above that, and so on. Bottom region 0 is considered to be the region that contains the lower half of the CFG tile, bottom region 1 is the region below that, and so on.
The main area contains all interconnect columns and the clock spine, with major numbers assigned sequentially from 0 on the left, one for each column. The clock spine is included right after the center column, with a separate major number. The columns have the following widths:
- CLBLL and CLBLM columns: 36 frames
 - BRAM or hard logic column: 30 frames
 - DSP column: 28 frames
 - center or IO column: 54 frames
 - MGT column: 32 frames
 - spine column: 4 frames
 
The BRAM data area contains 128 frames for each BRAM column, in order from left. The major numbers are assigned sequentially for each BRAM column starting from 0.
Each frame is exactly 1312 bits long and has the following structure:
- bits 0-639: interconnect rows 0 to 9 of the region, 64 bits per row
 - bits 640-651: ECC
 - bits 652-655: HCLK row
 - bits 656-671: unused
 - bits 672-1311: interconnect rows 10 to 19 of the region, 64 bits per row
 
Every interconnect tile thus corresponds to a bitstream tile that is 28×64 to 54×64 bits. The actual interconnect tile is 26×64 bits, occupying the first 26 frames of the column. If INTF or INTF.DELAY tile is present in the tile, it occupies frames 26-27.  The remaining frames, as well as unused space in frames 26-27, are used for configuring the associated primitive tile.
The HCLK row has smaller bitstream tiles, 28×4 to 54×4 bits in size.
The spine column also has smaller bitstream tiles, 4×64 in size, as well as the extra-small 4×4 tiles on intersections with HCLK rows.
The BRAM data tiles are 128×320 bits in size (covering the height of 5 interconnect rows). The area at intersection with HCLK rows is unused.
ECC
TODO: reverse, document