Device geometry
General structure
Virtex 4 devices are the first to use fully columnar architecture — as opposed to earlier devices that had I/O ring surrounding the device, Virtex 4 devices are made almost entirely of fully uniform columns consisting of a single kind of tiles.
Virtex 4 devices are also divided in "regions". A region is always exactly 16 interconnect tiles high. The device always has a height that is a multiple of 32 interconnect tiles, or 2 regions. In addition to the 16 interconnect rows, each region has a special HCLK row running through the middle (between rows 7 and 8), which is not counted in the row numbering.
The exact sequence of columns varies with the device. The main available column types are:
- CLB column: contains 
CLBtiles, one for every interconnect tile. - BRAM column: contains 
BRAMtiles, one for every 4 interconnect tiles (ie. 4BRAMtiles per region) - DSP column: contains 
DSPtiles, one for every 4 interconnect tiles (ie. 4DSPtiles per region) - IO column: contains 
IOtiles, one for every interconnect tile; also contains specialHCLK_IOIS_*tiles in the HCLK rows - the center column: there is exactly one of those per device; it contains a mixture of 
CFG,IO,DCM,CCM,SYSMONtiles - MGT column: contains 
MGTtiles, one for every 2 regions (ie. one for every 32 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)INTFtiles, one for everyINTtile, except forINTtiles associated withCLBtilesHCLKtiles, 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_*andCLK_DCM_*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; on devices with transceivers, they contain 
HCLK_MGT_REPEATERtiles 
There are always exactly two dedicated IO columns per device, and one center column which counts as the third IO column.
If the MGT columns are present on the device, there are exactly two of them, and they are the leftmost and the rightmost column, with the left and right IO columns a few columns away from them. If the MGT columns are not present, the leftmost and rightmost columns are IO columns.
The other kinds of columns (CLB, BRAM, DSP) come in varying numbers, locations, and proportions, depending on device size and kind.
The leftmost column of the device, whether it is MGT or IO, contains a special HCLK_TERM_L tile in every HCLK row. Likewise, the rightmost column of the device contains a special HCLK_TERM_R tile in every HCLK row.
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 24 rows high and 9 columns across. The 9 columns involved are always the following, in order:
- BRAM column
 - 4 CLB columns
 - BRAM column
 - 3 CLB columns
 
The hole always starts at row 12 of a region, and ends at row 3 of another region (ie. it takes up 4 rows of one region, all 16 rows of the second region, and 4 more rows of the third region).
The bottom/top rows and leftmost/rightmost columns of the hole contain interconnect tiles as usual, providing inputs/outputs to the PPC core. However, the inner area consisting of 22 rows and 7 columns has no interconnect tiles, and some interconnect lines terminate at this boundary.
Center column
The center column consists of the following main tiles, in order:
- 0 or 1 lower 
SYSMONtile; aSYSMONtile is 8 interconnect tiles high - 2 to 6 lower 
DCMtiles; aDCMtile is 4 interconnect tiles high - 0 to 2 lower 
CCMtiles; aCCMtile is 4 interconnect tiles high - 16, 32, or 48 lower 
IOtiles, one per interconnect tile; this block of IO tiles always starts and ends at row 8 of a region - the singular 
CFGtile, which is 16 interconnect tiles high and straddles two regions (top 8 rows of one region, then bottom 8 rows of the next region) - 16, 32, or 48 upper 
IOtiles - 0 to 2 upper 
CCMtiles - 2 to 6 upper 
DCMtiles - 0 or 1 upper 
SYSMONtile 
The CFG tile, or rather the midpoint of it, is considered the center point of the device. The center column is mostly symmetric around the CFG tile:
- the amount of 
IOtiles below and aboveCFGis equal - the amount of 
CCMtiles below and aboveCFGis equal - the total height of 
DCM + SYSMONtiles below and aboveCFGis equal; however, there exist devices that have aSYSMONonly on the bottom on the device, replacing it with twoDCMtiles on the top 
In addition to the main tiles, the center column also has special tiles in HCLK rows:
- every HCLK row completely within one of the 
SYSMON + DCM + CCMsegments has aHCLK_DCMtile, routing clocks to theDCMandCCMtiles - every HCLK row completely within one of the IO segments has a 
HCLK_CENTERtile, responsible for IO clocking and shared IO bank functionality - the HCLK row on the boundary between lower 
IOtiles andCFGtile likewise has aHCLK_CENTERtile - the HCLK row on the boundary between 
CFGtile and upperIOtiles has aHCLK_CENTER_ABOVE_CFGtile, which is a variant of theHCLK_CENTERtile - the HCLK row on the boundary between lower 
DCM/CCMtiles and lowerIOtiles has aHCLK_DCMIOBtile, combining the responsibilities ofHCLK_CENTERandHCLK_DCMtiles - the HCLK row on the boundary between upper 
IOtiles and upperDCM/CCMtiles likewise has a similarHCLK_IOBDCMtile 
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 the bottom: a single 
CLK_TERM_Btile - at the top: a single 
CLK_TERM_Ttile - at every HCLK row: a 
CLK_HROWtile - for every pair of 
DCMorCCMtiles: oneCLK_DCM_BorCLK_DCM_Ttile (which is 8 rows high) - immediately above 
HCLK_DCMIOB: oneCLK_IOB_Btile (which is 16 rows high) - immediately below 
HCLK_IOBDCM: oneCLK_IOB_Ttile (which is 16 rows high) 
Bitstream geometry
The bitstream is made of frames, which come in three types:
- 0: main area
 - 1: BRAM data area
 - 2: BRAM interconnect area
 
The bitstream is now split by region — each frame covers 16 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 columns except BRAM columns but including 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:
- CLB column: 22 frames
 - DSP column: 21 frames
 - center or IO column: 30 frames
 - MGT column: 20 frames
 - spine column: 3 frames
 
The BRAM data area contains 64 frames for each BRAM column, in order from left. The major numbers are assigned sequentially for each BRAM column starting from 0.
The BRAM interconnect area contains 20 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. There are:
- 80 bits per interconnect row
 - 4 bits for HCLK row
 - 12 bits for ECC
 - 16 unused bits
 
The exact structure of the frame varies between the bottom and top halves of the device. The frames in the top half of the device have the following structure:
- bits 0-639: interconnect rows 0 to 7 of the region, 80 bits per row
 - bits 640-651: ECC
 - bits 652-655: HCLK row
 - bits 656-671: unused
 - bits 672-1311: interconnect rows 8 to 15 of the region, 80 bits per row
 
The frames in the bottom half of the device are almost but not entirely flipped — the bits corresponding to the interconnect rows are completely mirrored upside-down, but the bits corresponding to the ECC and HCLK row stay in the same place:
- bits 0-639: interconnect rows 15 to 8 of the region, 80 bits per row, with all bits in reverse order
 - bits 640-651: ECC
 - bits 652-655: HCLK row
 - bits 656-671: unused
 - bits 672-1311: interconnect rows 7 to 0 of the region, 80 bits per row, with all bits in reverse order
 
Every interconnect tile thus corresponds to a bitstream tile that is 20×80 to 30×80 bits. The actual interconnect tile is 19×80 bits, occupying the first 19 frames of the column. The remaining frames, as well as unused space in frame 19, are used for configuring the associated primitive tile.
The HCLK row has smaller bitstream tiles, 20×4 to 30×4 bits in size.
The spine column also has smaller bitstream tiles, 3×80 in size, as well as the extra-small 3×4 tiles on intersections with HCLK rows.
The BRAM data tiles are 64×320 bits in size (covering the height of 4 interconnect rows). The area at intersection with HCLK rows is unused.
ECC
TODO: reverse, document