-
Notifications
You must be signed in to change notification settings - Fork 396
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
1 parent
cfe7c2a
commit 35a82e7
Showing
1 changed file
with
173 additions
and
0 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,173 @@ | ||
.. _VIB: | ||
|
||
VIB | ||
============ | ||
The VIB architecture adds modeling support for double-level MUX topology and bent wires. | ||
|
||
.. figure:: ../Images/VIB.png | ||
:align: center | ||
:height: 300 | ||
|
||
VIB architecture. The connections between the inputs and outputs of the LB and the routing wires are all implemented within the VIB. | ||
|
||
.. figure:: ../Images/double-level.png | ||
:align: center | ||
|
||
Double-level MUX topology. | ||
|
||
.. figure:: ../Images/bent_wires.png | ||
:align: center | ||
|
||
Presentation for bent wires. | ||
|
||
FPGA Architecture File Modification (.xml) | ||
-------------------------- | ||
For original tags of FPGA architecture file see :ref:`fpga_architecture_description`. | ||
|
||
Modification for ``<segmentlist>`` Tag | ||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
The content within the ``<segmentlist>`` tag consists of a group of ``<segment>`` tags. | ||
The ``<segment>`` tag and its contents are described below. | ||
|
||
.. arch:tag:: <segment axis="{x|y}" name="unique_name" length="int" type="{bidir|unidir}" res_type="{GCLK|GENERAL}" freq="float" Rmetal="float" Cmetal="float">content</segment> | ||
:req_param content: | ||
The switch names and the depopulation pattern as described below. | ||
|
||
.. arch:tag:: <sb type="pattern">int list</sb> | ||
.. arch:tag:: <cb type="pattern">int list</cb> | ||
.. arch:tag:: <mux name="string"/> | ||
For bent wires, a new content ``<bent>`` is added in the ``<segment>`` tag. | ||
|
||
.. arch:tag:: <cb type="pattern">bent pattern list</cb> | ||
This tag describes the bent pattern for this particular wire segment. | ||
For example, a length 4 wire has a bent pattern of ``- - U``. | ||
A ``-`` indicates no bent at this position and a ``U`` indicates a conterclockwise bent at the position. (``D`` indicates a clockwise bent.) | ||
|
||
.. note:: A bent wire should remain consistent in both the x and y axes. | ||
|
||
New Added Top Level Tag ``<vib_arch>`` | ||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
The content within the ``<vib_arch>`` tag consists of a group of ``<vib>`` tags. Different ``<vib>`` tags describe the paradigms of VIB, which apply to different positions. | ||
|
||
.. arch:tag:: <vib name="vib_name" pbtype_name="pbtype_name" vib_seg_group="int" arch_vib_switch="string">content</vib> | ||
:req_param name: | ||
A unique alphanumeric name to identify this VIB type. | ||
|
||
:req_param pbtype_name: | ||
The name of the block type (e.g. clb, memory) that this VIB connects to. | ||
|
||
:req_param vib_seg_group: | ||
The number of the segment types in this VIB. | ||
|
||
:req_param arch_vib_switch: | ||
Name of the mux switch type used to drive wires in the VIB by default, and a custom switch can override this switch type for specific connections if desired. | ||
|
||
:req_param content: | ||
The segment groups and the multistage MUX topology as described below. | ||
|
||
The ``content`` of ``<vib>`` tag consists of several ``<seg_group>`` tags and a ``<multistage_muxs>`` tag. | ||
For example: | ||
|
||
.. code-block:: xml | ||
<vib_arch> | ||
<vib name="vib0" pbtype_name="clb" vib_seg_group="4" arch_vib_switch="mux0"> | ||
<seg_group name="L1" track_nums="12"/> | ||
<seg_group name="L2" track_nums="20"/> | ||
<seg_group name="L4" track_nums="16"/> | ||
<seg_group name="L8" track_nums="16"/> | ||
<multistage_muxs> | ||
<first_stage switch_name="mux0"> | ||
... | ||
</first_stage> | ||
<second_stage> | ||
... | ||
</second_stage> | ||
</multistage_muxs> | ||
</vib> | ||
<vib name="vib1" pbtype_name="dsp" vib_seg_group="4" arch_vib_switch="mux0"> | ||
... | ||
</vib> | ||
</vib_arch> | ||
.. arch:tag:: <seg_group name="seg_name" track_nums="int"/> | ||
:req_param name: | ||
The name of the segment in this VIB described in ``<segmentlist>``. | ||
|
||
:req_param track_nums: | ||
The track number of the segment in this VIB. | ||
|
||
.. note:: When using unidirectional segments, the track number of the segment represents the number for one direction. For example, the ``track_nums`` is ``10``, which means total ``20`` tracks of the segment in the channel for both (INC & DEC) directions. | ||
|
||
.. arch:tag:: <multistage_muxs>content</multistage_muxs> | ||
:req_param content: | ||
The detaild information for first and second MUXes. | ||
|
||
The ``content`` of ``<multistage_muxs>`` tag consists of a ``<first_stage>`` tag and a ``<secong_stage>`` tag. | ||
|
||
.. arch:tag:: <first_stage switch_name="switch_name">content</first_stage> | ||
:req_param switch_name: | ||
Name of the mux switch type used to drive first stage MUXes in the VIB. | ||
|
||
:req_param content: | ||
The details of each MUX. | ||
|
||
For example: | ||
|
||
.. code-block:: xml | ||
<first_stage switch_name="mux0"> | ||
<mux name="f_mux_0"> | ||
<from>clb.O[0] clb.O[8] clb.O[12:16]</from> | ||
</mux> | ||
<mux name="f_mux_1"> | ||
<from>L1.E2 L1.W2 L1.S8 L1.N8</from> | ||
</mux> | ||
... | ||
</first_stage> | ||
The ``<from>`` tag in ``<mux>`` describes nodes that connects to the MUX. ``clb.O[*]`` means output pin(s); ``L1.E2`` means the track ``2`` in the ``East`` direction of ``L1`` segment. | ||
|
||
.. arch:tag:: <second_stage>content</second_stage> | ||
:req_param content: | ||
The details of each MUX. | ||
|
||
For example: | ||
|
||
.. code-block:: xml | ||
<second_stage switch_name="mux0"> | ||
<mux name="s_mux_0"> | ||
<to>clb.I[0]</to> | ||
<from>clb.O[0] clb.O[8] f_mux_0</from> | ||
</mux> | ||
<mux name="s_mux_1"> | ||
<to>L1.S1</to> | ||
<from>L1.E1 L1.W1 f_mux_0 f_mux_1</from> | ||
</mux> | ||
... | ||
</second_stage> | ||
The ``<to>`` tag describes the node this MUX connects to. ``clb.I[*]`` means input pin(s); ``L1.S1`` means the track ``1`` in the ``South`` direction of ``L1`` segment. The ``<from>`` tag in ``<mux>`` describes nodes that connects to the MUX. ``clb.O[*]`` means output pin(s); ``L1.E2`` means the track ``2`` in the ``East`` direction of ``L1`` segment. ``f_mux_0`` means the name of the specific first stage MUX. | ||
|
||
New Added Top Level Tag ``<vib_layout>`` | ||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
Content inside this tag specifies VIB grid layout to describe different VIBs applied on different locations. | ||
|
||
.. arch:tag:: <fixed_layout name="string">content</fixed_layout> | ||
:req_param name: | ||
The name identifying this VIB grid layout. It should be the same as the corresponding layout name inside the ``<layout>`` tag. | ||
|
||
:req_param content: | ||
The content should contain a set of grid location tags. For grid location tags of vib_layout see :ref:`fpga_architecture_description`; ref:`grid_expressions` |