[doc] document new command and update file format about fabric_key

This commit is contained in:
tangxifan 2023-07-08 19:10:46 -07:00
parent 124514c80e
commit 8850212465
2 changed files with 190 additions and 159 deletions

View File

@ -23,60 +23,62 @@ The following example shows how to define multiple configuration regions in the
.. code-block:: xml .. code-block:: xml
<fabric_key> <fabric_key>
<region id="0"> <module name="fpga_top">
<bl_shift_register_banks> <region id="0">
<bank id="0" range="bl[0:24]"/> <bl_shift_register_banks>
<bank id="1" range="bl[25:40]"/> <bank id="0" range="bl[0:24]"/>
</bl_shift_register_banks> <bank id="1" range="bl[25:40]"/>
<wl_shift_register_banks> </bl_shift_register_banks>
<bank id="0" range="wl[0:19],wl[40:59]"/> <wl_shift_register_banks>
<bank id="1" range="wl[21:39],wl[60:69]"/> <bank id="0" range="wl[0:19],wl[40:59]"/>
</wl_shift_register_banks> <bank id="1" range="wl[21:39],wl[60:69]"/>
<key id="0" name="grid_io_bottom" value="0" alias="grid_io_bottom_1__0_"/> </wl_shift_register_banks>
<key id="1" name="grid_io_right" value="0" alias="grid_io_right_2__1_"/> <key id="0" name="grid_io_bottom" value="0" alias="grid_io_bottom_1__0_"/>
<key id="2" name="sb_1__1_" value="0" alias="sb_1__1_"/> <key id="1" name="grid_io_right" value="0" alias="grid_io_right_2__1_"/>
</region> <key id="2" name="sb_1__1_" value="0" alias="sb_1__1_"/>
<region id="1"> </region>
<bl_shift_register_banks> <region id="1">
<bank id="0" range="bl[0:24]"/> <bl_shift_register_banks>
<bank id="1" range="bl[25:40]"/> <bank id="0" range="bl[0:24]"/>
</bl_shift_register_banks> <bank id="1" range="bl[25:40]"/>
<wl_shift_register_banks> </bl_shift_register_banks>
<bank id="0" range="wl[0:19]"/> <wl_shift_register_banks>
</wl_shift_register_banks> <bank id="0" range="wl[0:19]"/>
<key id="3" name="cbx_1__1_" value="0" alias="cbx_1__1_"/> </wl_shift_register_banks>
<key id="4" name="grid_io_top" value="0" alias="grid_io_top_1__2_"/> <key id="3" name="cbx_1__1_" value="0" alias="cbx_1__1_"/>
<key id="5" name="sb_0__1_" value="0" alias="sb_0__1_"/> <key id="4" name="grid_io_top" value="0" alias="grid_io_top_1__2_"/>
</region> <key id="5" name="sb_0__1_" value="0" alias="sb_0__1_"/>
<region id="2"> </region>
<bl_shift_register_banks> <region id="2">
<bank id="0" range="bl[0:24]"/> <bl_shift_register_banks>
<bank id="1" range="bl[25:40]"/> <bank id="0" range="bl[0:24]"/>
<bank id="2" range="bl[41:59]"/> <bank id="1" range="bl[25:40]"/>
</bl_shift_register_banks> <bank id="2" range="bl[41:59]"/>
<wl_shift_register_banks> </bl_shift_register_banks>
<bank id="0" range="wl[0:19]"/> <wl_shift_register_banks>
<bank id="1" range="wl[21:39]"/> <bank id="0" range="wl[0:19]"/>
</wl_shift_register_banks> <bank id="1" range="wl[21:39]"/>
<key id="6" name="sb_0__0_" value="0" alias="sb_0__0_"/> </wl_shift_register_banks>
<key id="7" name="cby_0__1_" value="0" alias="cby_0__1_"/> <key id="6" name="sb_0__0_" value="0" alias="sb_0__0_"/>
<key id="8" name="grid_io_left" value="0" alias="grid_io_left_0__1_"/> <key id="7" name="cby_0__1_" value="0" alias="cby_0__1_"/>
</region> <key id="8" name="grid_io_left" value="0" alias="grid_io_left_0__1_"/>
<region id="3"> </region>
<bl_shift_register_banks> <region id="3">
<bank id="0" range="bl[0:24]"/> <bl_shift_register_banks>
<bank id="1" range="bl[25:40]"/> <bank id="0" range="bl[0:24]"/>
</bl_shift_register_banks> <bank id="1" range="bl[25:40]"/>
<wl_shift_register_banks> </bl_shift_register_banks>
<bank id="0" range="wl[0:19]"/> <wl_shift_register_banks>
<bank id="1" range="wl[21:39]"/> <bank id="0" range="wl[0:19]"/>
<bank id="2" range="wl[40:49]"/> <bank id="1" range="wl[21:39]"/>
</wl_shift_register_banks> <bank id="2" range="wl[40:49]"/>
<key id="9" name="sb_1__0_" value="0" alias="sb_1__0_"/> </wl_shift_register_banks>
<key id="10" name="cbx_1__0_" value="0" alias="cbx_1__0_"/> <key id="9" name="sb_1__0_" value="0" alias="sb_1__0_"/>
<key id="11" name="cby_1__1_" value="0" alias="cby_1__1_"/> <key id="10" name="cbx_1__0_" value="0" alias="cbx_1__0_"/>
<key id="12" name="grid_clb" value="0" alias="grid_clb_1__1_"/> <key id="11" name="cby_1__1_" value="0" alias="cby_1__1_"/>
</region> <key id="12" name="grid_clb" value="0" alias="grid_clb_1__1_"/>
</region>
</module>
</fabric_key> </fabric_key>
@ -111,41 +113,43 @@ This key contains only ``alias`` which is easy to craft.
.. code-block:: xml .. code-block:: xml
<fabric_key> <fabric_key>
<region id="0"> <module name="fpga_top">
<key id="0" alias="sb_2__2_"/> <region id="0">
<key id="1" alias="grid_clb_2_2"/> <key id="0" alias="sb_2__2_"/>
<key id="2" alias="sb_0__1_"/> <key id="1" alias="grid_clb_2_2"/>
<key id="3" alias="cby_0__1_"/> <key id="2" alias="sb_0__1_"/>
<key id="4" alias="grid_clb_2_1"/> <key id="3" alias="cby_0__1_"/>
<key id="5" alias="grid_io_left_0_1"/> <key id="4" alias="grid_clb_2_1"/>
<key id="6" alias="sb_1__0_"/> <key id="5" alias="grid_io_left_0_1"/>
<key id="7" alias="sb_1__1_"/> <key id="6" alias="sb_1__0_"/>
<key id="8" alias="cbx_2__1_"/> <key id="7" alias="sb_1__1_"/>
<key id="9" alias="cby_1__2_"/> <key id="8" alias="cbx_2__1_"/>
<key id="10" alias="grid_io_right_3_2"/> <key id="9" alias="cby_1__2_"/>
<key id="11" alias="cbx_2__0_"/> <key id="10" alias="grid_io_right_3_2"/>
<key id="12" alias="cby_1__1_"/> <key id="11" alias="cbx_2__0_"/>
<key id="13" alias="grid_io_right_3_1"/> <key id="12" alias="cby_1__1_"/>
<key id="14" alias="grid_io_bottom_1_0"/> <key id="13" alias="grid_io_right_3_1"/>
<key id="15" alias="cby_2__1_"/> <key id="14" alias="grid_io_bottom_1_0"/>
<key id="16" alias="sb_2__1_"/> <key id="15" alias="cby_2__1_"/>
<key id="17" alias="cbx_1__0_"/> <key id="16" alias="sb_2__1_"/>
<key id="18" alias="grid_clb_1_2"/> <key id="17" alias="cbx_1__0_"/>
<key id="19" alias="cbx_1__2_"/> <key id="18" alias="grid_clb_1_2"/>
<key id="20" alias="cbx_2__2_"/> <key id="19" alias="cbx_1__2_"/>
<key id="21" alias="sb_2__0_"/> <key id="20" alias="cbx_2__2_"/>
<key id="22" alias="sb_1__2_"/> <key id="21" alias="sb_2__0_"/>
<key id="23" alias="cby_0__2_"/> <key id="22" alias="sb_1__2_"/>
<key id="24" alias="sb_0__0_"/> <key id="23" alias="cby_0__2_"/>
<key id="25" alias="grid_clb_1_1"/> <key id="24" alias="sb_0__0_"/>
<key id="26" alias="cby_2__2_"/> <key id="25" alias="grid_clb_1_1"/>
<key id="27" alias="grid_io_top_2_3"/> <key id="26" alias="cby_2__2_"/>
<key id="28" alias="sb_0__2_"/> <key id="27" alias="grid_io_top_2_3"/>
<key id="29" alias="grid_io_bottom_2_0"/> <key id="28" alias="sb_0__2_"/>
<key id="30" alias="cbx_1__1_"/> <key id="29" alias="grid_io_bottom_2_0"/>
<key id="31" alias="grid_io_top_1_3"/> <key id="30" alias="cbx_1__1_"/>
<key id="32" alias="grid_io_left_0_2"/> <key id="31" alias="grid_io_top_1_3"/>
</region> <key id="32" alias="grid_io_left_0_2"/>
</region>
</module>
</fabric_key> </fabric_key>
The following shows another example of a fabric key generate by OpenFPGA for a 2 :math:`\times` 2 FPGA. The following shows another example of a fabric key generate by OpenFPGA for a 2 :math:`\times` 2 FPGA.
@ -154,41 +158,43 @@ This key contains only ``name`` and ``value`` which is fast to parse.
.. code-block:: xml .. code-block:: xml
<fabric_key> <fabric_key>
<region id="0"> <module name="fpga_top">
<key id="0" name="sb_2__2_" value="0"/> <region id="0">
<key id="1" name="grid_clb" value="3"/> <key id="0" name="sb_2__2_" value="0"/>
<key id="2" name="sb_0__1_" value="0"/> <key id="1" name="grid_clb" value="3"/>
<key id="3" name="cby_0__1_" value="0"/> <key id="2" name="sb_0__1_" value="0"/>
<key id="4" name="grid_clb" value="2"/> <key id="3" name="cby_0__1_" value="0"/>
<key id="5" name="grid_io_left" value="0"/> <key id="4" name="grid_clb" value="2"/>
<key id="6" name="sb_1__0_" value="0"/> <key id="5" name="grid_io_left" value="0"/>
<key id="7" name="sb_1__1_" value="0"/> <key id="6" name="sb_1__0_" value="0"/>
<key id="8" name="cbx_1__1_" value="1"/> <key id="7" name="sb_1__1_" value="0"/>
<key id="9" name="cby_1__1_" value="1"/> <key id="8" name="cbx_1__1_" value="1"/>
<key id="10" name="grid_io_right" value="1"/> <key id="9" name="cby_1__1_" value="1"/>
<key id="11" name="cbx_1__0_" value="1"/> <key id="10" name="grid_io_right" value="1"/>
<key id="12" name="cby_1__1_" value="0"/> <key id="11" name="cbx_1__0_" value="1"/>
<key id="13" name="grid_io_right" value="0"/> <key id="12" name="cby_1__1_" value="0"/>
<key id="14" name="grid_io_bottom" value="0"/> <key id="13" name="grid_io_right" value="0"/>
<key id="15" name="cby_2__1_" value="0"/> <key id="14" name="grid_io_bottom" value="0"/>
<key id="16" name="sb_2__1_" value="0"/> <key id="15" name="cby_2__1_" value="0"/>
<key id="17" name="cbx_1__0_" value="0"/> <key id="16" name="sb_2__1_" value="0"/>
<key id="18" name="grid_clb" value="1"/> <key id="17" name="cbx_1__0_" value="0"/>
<key id="19" name="cbx_1__2_" value="0"/> <key id="18" name="grid_clb" value="1"/>
<key id="20" name="cbx_1__2_" value="1"/> <key id="19" name="cbx_1__2_" value="0"/>
<key id="21" name="sb_2__0_" value="0"/> <key id="20" name="cbx_1__2_" value="1"/>
<key id="22" name="sb_1__2_" value="0"/> <key id="21" name="sb_2__0_" value="0"/>
<key id="23" name="cby_0__1_" value="1"/> <key id="22" name="sb_1__2_" value="0"/>
<key id="24" name="sb_0__0_" value="0"/> <key id="23" name="cby_0__1_" value="1"/>
<key id="25" name="grid_clb" value="0"/> <key id="24" name="sb_0__0_" value="0"/>
<key id="26" name="cby_2__1_" value="1"/> <key id="25" name="grid_clb" value="0"/>
<key id="27" name="grid_io_top" value="1"/> <key id="26" name="cby_2__1_" value="1"/>
<key id="28" name="sb_0__2_" value="0"/> <key id="27" name="grid_io_top" value="1"/>
<key id="29" name="grid_io_bottom" value="1"/> <key id="28" name="sb_0__2_" value="0"/>
<key id="30" name="cbx_1__1_" value="0"/> <key id="29" name="grid_io_bottom" value="1"/>
<key id="31" name="grid_io_top" value="0"/> <key id="30" name="cbx_1__1_" value="0"/>
<key id="32" name="grid_io_left" value="1"/> <key id="31" name="grid_io_top" value="0"/>
</region> <key id="32" name="grid_io_left" value="1"/>
</region>
</module>
</fabric_key> </fabric_key>
The following shows another example of a fabric key generate by OpenFPGA for a 2 :math:`\times` 2 FPGA using memory bank. The following shows another example of a fabric key generate by OpenFPGA for a 2 :math:`\times` 2 FPGA using memory bank.
@ -197,41 +203,43 @@ This key contains only ``name``, ``value``, ``row`` and ``column``.
.. code-block:: xml .. code-block:: xml
<fabric_key> <fabric_key>
<region id="0"> <module name="fpga_top">
<key id="0" name="sb_2__2_" value="0" alias="sb_2__2_" column="5" row="5"/> <region id="0">
<key id="1" name="grid_clb" value="3" alias="grid_clb_2__2_" column="4" row="4"/> <key id="0" name="sb_2__2_" value="0" alias="sb_2__2_" column="5" row="5"/>
<key id="2" name="sb_0__1_" value="0" alias="sb_0__1_" column="1" row="3"/> <key id="1" name="grid_clb" value="3" alias="grid_clb_2__2_" column="4" row="4"/>
<key id="3" name="cby_0__1_" value="0" alias="cby_0__1_" column="1" row="2"/> <key id="2" name="sb_0__1_" value="0" alias="sb_0__1_" column="1" row="3"/>
<key id="4" name="grid_clb" value="2" alias="grid_clb_2__1_" column="4" row="2"/> <key id="3" name="cby_0__1_" value="0" alias="cby_0__1_" column="1" row="2"/>
<key id="5" name="grid_io_left" value="0" alias="grid_io_left_0__1_" column="0" row="2"/> <key id="4" name="grid_clb" value="2" alias="grid_clb_2__1_" column="4" row="2"/>
<key id="6" name="sb_1__0_" value="0" alias="sb_1__0_" column="3" row="1"/> <key id="5" name="grid_io_left" value="0" alias="grid_io_left_0__1_" column="0" row="2"/>
<key id="7" name="sb_1__1_" value="0" alias="sb_1__1_" column="3" row="3"/> <key id="6" name="sb_1__0_" value="0" alias="sb_1__0_" column="3" row="1"/>
<key id="8" name="cbx_1__1_" value="1" alias="cbx_2__1_" column="4" row="3"/> <key id="7" name="sb_1__1_" value="0" alias="sb_1__1_" column="3" row="3"/>
<key id="9" name="cby_1__1_" value="1" alias="cby_1__2_" column="3" row="4"/> <key id="8" name="cbx_1__1_" value="1" alias="cbx_2__1_" column="4" row="3"/>
<key id="10" name="grid_io_right" value="0" alias="grid_io_right_3__2_" column="6" row="4"/> <key id="9" name="cby_1__1_" value="1" alias="cby_1__2_" column="3" row="4"/>
<key id="11" name="cbx_1__0_" value="1" alias="cbx_2__0_" column="4" row="1"/> <key id="10" name="grid_io_right" value="0" alias="grid_io_right_3__2_" column="6" row="4"/>
<key id="12" name="cby_1__1_" value="0" alias="cby_1__1_" column="3" row="2"/> <key id="11" name="cbx_1__0_" value="1" alias="cbx_2__0_" column="4" row="1"/>
<key id="13" name="grid_io_right" value="1" alias="grid_io_right_3__1_" column="6" row="2"/> <key id="12" name="cby_1__1_" value="0" alias="cby_1__1_" column="3" row="2"/>
<key id="14" name="grid_io_bottom" value="1" alias="grid_io_bottom_1__0_" column="2" row="0"/> <key id="13" name="grid_io_right" value="1" alias="grid_io_right_3__1_" column="6" row="2"/>
<key id="15" name="cby_2__1_" value="0" alias="cby_2__1_" column="5" row="2"/> <key id="14" name="grid_io_bottom" value="1" alias="grid_io_bottom_1__0_" column="2" row="0"/>
<key id="16" name="sb_2__1_" value="0" alias="sb_2__1_" column="5" row="3"/> <key id="15" name="cby_2__1_" value="0" alias="cby_2__1_" column="5" row="2"/>
<key id="17" name="cbx_1__0_" value="0" alias="cbx_1__0_" column="2" row="1"/> <key id="16" name="sb_2__1_" value="0" alias="sb_2__1_" column="5" row="3"/>
<key id="18" name="grid_clb" value="1" alias="grid_clb_1__2_" column="2" row="4"/> <key id="17" name="cbx_1__0_" value="0" alias="cbx_1__0_" column="2" row="1"/>
<key id="19" name="cbx_1__2_" value="0" alias="cbx_1__2_" column="2" row="5"/> <key id="18" name="grid_clb" value="1" alias="grid_clb_1__2_" column="2" row="4"/>
<key id="20" name="cbx_1__2_" value="1" alias="cbx_2__2_" column="4" row="5"/> <key id="19" name="cbx_1__2_" value="0" alias="cbx_1__2_" column="2" row="5"/>
<key id="21" name="sb_2__0_" value="0" alias="sb_2__0_" column="5" row="1"/> <key id="20" name="cbx_1__2_" value="1" alias="cbx_2__2_" column="4" row="5"/>
<key id="22" name="sb_1__2_" value="0" alias="sb_1__2_" column="3" row="5"/> <key id="21" name="sb_2__0_" value="0" alias="sb_2__0_" column="5" row="1"/>
<key id="23" name="cby_0__1_" value="1" alias="cby_0__2_" column="1" row="4"/> <key id="22" name="sb_1__2_" value="0" alias="sb_1__2_" column="3" row="5"/>
<key id="24" name="sb_0__0_" value="0" alias="sb_0__0_" column="1" row="1"/> <key id="23" name="cby_0__1_" value="1" alias="cby_0__2_" column="1" row="4"/>
<key id="25" name="grid_clb" value="0" alias="grid_clb_1__1_" column="2" row="2"/> <key id="24" name="sb_0__0_" value="0" alias="sb_0__0_" column="1" row="1"/>
<key id="26" name="cby_2__1_" value="1" alias="cby_2__2_" column="5" row="4"/> <key id="25" name="grid_clb" value="0" alias="grid_clb_1__1_" column="2" row="2"/>
<key id="27" name="grid_io_top" value="1" alias="grid_io_top_2__3_" column="4" row="6"/> <key id="26" name="cby_2__1_" value="1" alias="cby_2__2_" column="5" row="4"/>
<key id="28" name="sb_0__2_" value="0" alias="sb_0__2_" column="1" row="5"/> <key id="27" name="grid_io_top" value="1" alias="grid_io_top_2__3_" column="4" row="6"/>
<key id="29" name="grid_io_bottom" value="0" alias="grid_io_bottom_2__0_" column="4" row="0"/> <key id="28" name="sb_0__2_" value="0" alias="sb_0__2_" column="1" row="5"/>
<key id="30" name="cbx_1__1_" value="0" alias="cbx_1__1_" column="2" row="3"/> <key id="29" name="grid_io_bottom" value="0" alias="grid_io_bottom_2__0_" column="4" row="0"/>
<key id="31" name="grid_io_top" value="0" alias="grid_io_top_1__3_" column="2" row="6"/> <key id="30" name="cbx_1__1_" value="0" alias="cbx_1__1_" column="2" row="3"/>
<key id="32" name="grid_io_left" value="1" alias="grid_io_left_0__2_" column="0" row="4"/> <key id="31" name="grid_io_top" value="0" alias="grid_io_top_1__3_" column="2" row="6"/>
</region> <key id="32" name="grid_io_left" value="1" alias="grid_io_left_0__2_" column="0" row="4"/>
</region>
</module>
</fabric_key> </fabric_key>
BL Shift Register Banks BL Shift Register Banks

View File

@ -269,6 +269,8 @@ build_fabric
Output current fabric key to an XML file. For example, ``--write_fabric_key fpga_2x2.xml`` See details in :ref:`file_formats_fabric_key`. Output current fabric key to an XML file. For example, ``--write_fabric_key fpga_2x2.xml`` See details in :ref:`file_formats_fabric_key`.
.. warning:: This option will be deprecated. Use :ref:`cmd_write_fabric_key`` as a replacement.
.. option:: --frame_view .. option:: --frame_view
Create only frame views of the module graph. When enabled, top-level module will not include any nets. This option is made for save runtime and memory. Create only frame views of the module graph. When enabled, top-level module will not include any nets. This option is made for save runtime and memory.
@ -281,6 +283,27 @@ build_fabric
.. note:: This is a must-run command before launching FPGA-Verilog, FPGA-Bitstream, FPGA-SDC and FPGA-SPICE .. note:: This is a must-run command before launching FPGA-Verilog, FPGA-Bitstream, FPGA-SDC and FPGA-SPICE
.. _cmd_write_fabric_key:
write_fabric_key
~~~~~~~~~~~~~~~~
Output current fabric key to an XML file. For example, ``write_fabric_key --file fpga_2x2.xml`` See details in :ref:`file_formats_fabric_key`.
.. note:: This command can output module-level keys while the ``--write_fabric_key`` option in command ``build_fabric`` does NOT support! Strongly recommend to use this command to obtain fabric key.
.. option:: --file <string> or -f <string>
Specify the file name. For example, ``--file fabric_key_echo.xml``.
.. option:: --include_module_keys
Output module-level keys to the file.
.. option:: --verbose
Show verbose log
.. _cmd_add_fpga_core_to_fabric: .. _cmd_add_fpga_core_to_fabric:
add_fpga_core_to_fabric add_fpga_core_to_fabric