-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
47 changed files
with
4,683 additions
and
1,031 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -8,7 +8,7 @@ Virtex 2 | |
:caption: Contents: | ||
|
||
intro | ||
structure | ||
geometry | ||
interconnect | ||
clb | ||
bram | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,170 @@ | ||
.. _virtex4-geometry: | ||
|
||
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 ``CLB`` tiles, one for every interconnect tile. | ||
- BRAM column: contains ``BRAM`` tiles, one for every 4 interconnect tiles (ie. 4 ``BRAM`` tiles per region) | ||
- DSP column: contains ``DSP`` tiles, one for every 4 interconnect tiles (ie. 4 ``DSP`` tiles per region) | ||
- IO column: contains ``IO`` tiles, one for every interconnect tile; also contains special ``HCLK_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``, ``SYSMON`` tiles | ||
- MGT column: contains ``MGT`` tiles, 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: | ||
|
||
- ``INT`` tiles, one per interconnect row (16 per region) | ||
- ``INTF`` tiles, one for every ``INT`` tile, except for ``INT`` tiles associated with ``CLB`` tiles | ||
- ``HCLK`` tiles, 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 ``BUFGCTRL`` global clock buffers (located next to the ``CFG`` tile) | ||
- ``CLK_IOB_*`` and ``CLK_DCM_*`` tiles, which multiplex and feed clock sources into the ``BUGCTRL`` primitives | ||
- ``CLK_HROW`` tiles, which buffer the ``BUFGCTRL`` outputs onto HCLK rows | ||
|
||
- the vbrk columns, the significance of which is unknown; on devices with transceivers, they contain ``HCLK_MGT_REPEATER`` tiles | ||
|
||
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 ``SYSMON`` tile; a ``SYSMON`` tile is 8 interconnect tiles high | ||
- 2 to 6 lower ``DCM`` tiles; a ``DCM`` tile is 4 interconnect tiles high | ||
- 0 to 2 lower ``CCM`` tiles; a ``CCM`` tile is 4 interconnect tiles high | ||
- 16, 32, or 48 lower ``IO`` tiles, one per interconnect tile; this block of IO tiles always starts and ends at row 8 of a region | ||
- the singular ``CFG`` tile, 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 ``IO`` tiles | ||
- 0 to 2 upper ``CCM`` tiles | ||
- 2 to 6 upper ``DCM`` tiles | ||
- 0 or 1 upper ``SYSMON`` tile | ||
|
||
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 ``IO`` tiles below and above ``CFG`` is equal | ||
- the amount of ``CCM`` tiles below and above ``CFG`` is equal | ||
- the total height of ``DCM + SYSMON`` tiles below and above ``CFG`` is equal; however, there exist devices that have a ``SYSMON`` only on the bottom on the device, replacing it with two ``DCM`` tiles 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 + CCM`` segments has a ``HCLK_DCM`` tile, routing clocks to the ``DCM`` and ``CCM`` tiles | ||
- every HCLK row completely within one of the IO segments has a ``HCLK_CENTER`` tile, responsible for IO clocking and shared IO bank functionality | ||
- the HCLK row on the boundary between lower ``IO`` tiles and ``CFG`` tile likewise has a ``HCLK_CENTER`` tile | ||
- the HCLK row on the boundary between ``CFG`` tile and upper ``IO`` tiles has a ``HCLK_CENTER_ABOVE_CFG`` tile, which is a variant of the ``HCLK_CENTER`` tile | ||
- the HCLK row on the boundary between lower ``DCM/CCM`` tiles and lower ``IO`` tiles has a ``HCLK_DCMIOB`` tile, combining the responsibilities of ``HCLK_CENTER`` and ``HCLK_DCM`` tiles | ||
- the HCLK row on the boundary between upper ``IO`` tiles and upper ``DCM/CCM`` tiles likewise has a similar ``HCLK_IOBDCM`` tile | ||
|
||
|
||
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 ``CFG`` tile occupies both the center column and the spine column (specifically, the ``BUFGCTRL`` buffers and their multiplexers are in the spine column) | ||
- at the bottom: a single ``CLK_TERM_B`` tile | ||
- at the top: a single ``CLK_TERM_T`` tile | ||
- at every HCLK row: a ``CLK_HROW`` tile | ||
- for every pair of ``DCM`` or ``CCM`` tiles: one ``CLK_DCM_B`` or ``CLK_DCM_T`` tile (which is 8 rows high) | ||
- immediately above ``HCLK_DCMIOB``: one ``CLK_IOB_B`` tile (which is 16 rows high) | ||
- immediately below ``HCLK_IOBDCM``: one ``CLK_IOB_T`` tile (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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,6 +7,7 @@ Virtex 4 | |
:maxdepth: 2 | ||
:caption: Contents: | ||
|
||
geometry | ||
interconnect | ||
clb | ||
bram | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.