Skip to content

Commit 77df6c6

Browse files
authored
Merge pull request #2916 from Wang-Yuanqi-source/patch-1
VIB description update
2 parents 4d881fa + 579b136 commit 77df6c6

File tree

4 files changed

+93
-12
lines changed

4 files changed

+93
-12
lines changed

doc/src/Images/VIB.png

13 KB
Loading

doc/src/Images/double-level.png

1.47 KB
Loading

doc/src/Images/vib_example.png

42.4 KB
Loading

doc/src/vpr/VIB.rst

Lines changed: 93 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,28 @@
11
.. _VIB:
22

3-
VIB
3+
VIB Architecture
44
============
5-
The VIB architecture adds modeling support for double-level MUX topology and bent wires.
5+
The VIB architecture adds modeling support for double-level MUX topology and bent wires. In past, switch blocks have only one level of routing MUXes, whose inputs are driven by outputs of programmable blocks and routing tracks. Now outputs of programmable blocks can shape the first level of routing MUXes, while the inputs of second level involves the outputs of first level and other routing tracks. This can reduce the number and input sizes of routing MUXes.
6+
7+
Figure 1 shows the proposed VIB architecture which is tile-based. Each tile is composed of a CLB and a VIB. Each CLB can interact with the corresponding VIB which contains all the routing programmable switches in one tile. Figure 2 shows an example of the detailed interconnect architecture in VIB. The CLB input muxes and the driving muxes of wire segments can share the same fanins. A routing path of a net with two sinks is presented red in the Figure.
68

79
.. figure:: ../Images/VIB.png
810
:align: center
911
:height: 300
1012

11-
VIB architecture. The connections between the inputs and outputs of the LB and the routing wires are all implemented within the VIB.
13+
Figure 1. VIB architecture. The connections between the inputs and outputs of the LB and the routing wires are all implemented within the VIB.
1214

1315
.. figure:: ../Images/double-level.png
1416
:align: center
1517

16-
Double-level MUX topology.
18+
Figure 2. Double-level MUX topology.
19+
20+
Figure 3 shows the modeling for bent wires. A bent L-length wire is modeled as two segments in CHANX and CHANY respectively connected by a delayless switch. The orange and red arrows represent conterclockwise and clockwise bent wires respectively. The bent wires can connect to both bent and straight wire segments.
1721

1822
.. figure:: ../Images/bent_wires.png
1923
:align: center
2024

21-
Presentation for bent wires.
25+
Figure 3. Presentation for bent wires.
2226

2327
FPGA Architecture File Modification (.xml)
2428
--------------------------
@@ -61,6 +65,8 @@ The content within the ``<vib_arch>`` tag consists of a group of ``<vib>`` tags.
6165

6266
:req_param pbtype_name:
6367
The name of the block type (e.g. clb, memory) that this VIB connects to.
68+
69+
.. note:: A block (e.g. clb, dsp) is connected to the VIB on its top-right side, so the input and output pins of the block should be on the top or right side.
6470

6571
:req_param vib_seg_group:
6672
The number of the segment types in this VIB.
@@ -120,27 +126,47 @@ The ``content`` of ``<multistage_muxs>`` tag consists of a ``<first_stage>`` tag
120126

121127
:req_param content:
122128
The details of each MUX.
129+
130+
The ``content`` of ``<first_stage>`` tag consists of many ``<mux>`` tags.
131+
132+
.. arch:tag:: <mux name="mux_name">content</mux>
133+
134+
:req_param name:
135+
Name of the MUX.
136+
137+
:req_param content:
138+
A ``<from>`` tag to describe what pins and wires connect to this MUX.
123139

124140
For example:
125141

126142
.. code-block:: xml
127143
128144
<first_stage switch_name="mux0">
129145
<mux name="f_mux_0">
130-
<from>clb.O[0] clb.O[8] clb.O[12:16]</from>
146+
<from>clb.O[0] clb.O[1:3] clb.O[4]</from>
131147
</mux>
132148
<mux name="f_mux_1">
133-
<from>L1.E2 L1.W2 L1.S8 L1.N8</from>
149+
<from>L1.E1 L1.S1 L2.E0</from>
134150
</mux>
135151
...
136152
</first_stage>
137153
138-
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.
154+
The ``<from>`` tag in ``<mux>`` describes nodes that connects to the MUX. ``clb.O[*]`` means output pin(s); ``L1.E1`` means the track ``1`` in the ``East`` direction of ``L1`` segment.
139155

140156
.. arch:tag:: <second_stage>content</second_stage>
141157
142158
:req_param content:
143159
The details of each MUX.
160+
161+
The ``content`` of ``<second_stage>`` tag consists of many ``<mux>`` tags.
162+
163+
.. arch:tag:: <mux name="mux_name">content</mux>
164+
165+
:req_param name:
166+
Name of the MUX.
167+
168+
:req_param content:
169+
A ``<to>`` tag to describe where this MUX connect to and a ``<from>`` tag to describe what pins and wires connect to this MUX.
144170

145171
For example:
146172

@@ -149,16 +175,53 @@ For example:
149175
<second_stage switch_name="mux0">
150176
<mux name="s_mux_0">
151177
<to>clb.I[0]</to>
152-
<from>clb.O[0] clb.O[8] f_mux_0</from>
178+
<from>clb.O[4] f_mux_0 f_mux_1</from>
153179
</mux>
154180
<mux name="s_mux_1">
155-
<to>L1.S1</to>
156-
<from>L1.E1 L1.W1 f_mux_0 f_mux_1</from>
181+
<to>L1.E1</to>
182+
<from>L1.S2 f_mux_0 f_mux_1</from>
157183
</mux>
158184
...
159185
</second_stage>
160186
161-
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.
187+
The ``<to>`` tag describes the node this MUX connects to. ``clb.I[*]`` means input pin(s); ``L1.E1`` means the track ``1`` in the ``East`` direction of ``L1`` segment. The ``<from>`` tag in ``<mux>`` describes nodes that connects to the MUX. ``clb.O[*]`` means output pin(s); ``L1.S2`` means the track ``2`` in the ``South`` direction of ``L1`` segment. ``f_mux_0`` means the name of the specific first stage MUX.
188+
189+
Here is a complete example of the ``<vib>`` tag:
190+
191+
.. code-block:: xml
192+
193+
<vib name="vib_clb" pbtype_name="clb" vib_seg_group="2" arch_vib_switch="mux0">
194+
<seg_group name="L1" track_nums="12"/>
195+
<seg_group name="L2" track_nums="20"/>
196+
<multistage_muxs>
197+
<first_stage switch_name="mux0">
198+
<mux name="f_mux_0">
199+
<from>clb.O[0] clb.O[1:3] clb.O[4]</from>
200+
</mux>
201+
<mux name="f_mux_1">
202+
<from>L1.E1 L1.S1 L2.E0</from>
203+
</mux>
204+
</first_stage>
205+
<second_stage>
206+
<mux name="s_mux_0">
207+
<to>clb.I[0]</to>
208+
<from>clb.O[4] f_mux_0 f_mux_1</from>
209+
</mux>
210+
<mux name="s_mux_1">
211+
<to>L1.E1</to>
212+
<from>L1.S2 f_mux_0 f_mux_1</from>
213+
</mux>
214+
</second_stage>
215+
</multistage_muxs>
216+
</vib>
217+
218+
Its corresponding detailed architecture is shown in Figure 4.
219+
220+
.. figure:: ../Images/vib_example.png
221+
:align: center
222+
:height: 600
223+
224+
Figure 4. The corresponding detaied architecture of the example.
162225

163226
New Added Top Level Tag ``<vib_layout>``
164227
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -171,3 +234,21 @@ Content inside this tag specifies VIB grid layout to describe different VIBs app
171234

172235
:req_param content:
173236
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`
237+
238+
For example:
239+
240+
.. code-block:: xml
241+
242+
<vib_layout>
243+
<fixed_layout name="fixed_layout">
244+
<perimeter type="vib_IO" priority="101"/>
245+
<fill type="vib_clb" priority="10"/>
246+
<col type="vib_memory" startx="5" starty="1" priority="100"/>
247+
...
248+
</fixed_layout>
249+
</vib_layout>
250+
251+
In this VIB grid layout, ``perimeter``, ``fill``, ``col`` and so on are tags in original ``<layout>`` tag to describe positions of each type of VIB block. The attibute ``type`` should correspond to the ``name`` of a ``<vib>`` tag in ``<vib_arch>``.
252+
Besides, the ``pbtype_name`` of corresponding ``<vib>`` must be the same as the physical block type at this position.
253+
254+
In this example, IO blocks are located on the perimeter of the layout. Memory blocks are on column 5 and CLBs are on the rest positions. The ``vib_io``, ``vib_clb`` and ``vib_memory`` are different types of vib blocks corresponding to IO, CLB and memory blocks respectively.

0 commit comments

Comments
 (0)