FC2カウンター FPGAの部屋 2020年05月30日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

xclbinutil を使ってみる

Xilinx の日本語ビデオ資料の”ザイリンクス XCLBIN ユーティリティの概要 (日本語吹替)”を見たので、xclbinutil を使ってみたくなったので、やってみた。

xilinx の日本語ビデオ資料の”ザイリンクス XCLBIN ユーティリティの概要 (日本語吹替)”を参照して、やってみた。

まずは、 xclbinutil コマンドへのパスを設定する。
xrt の環境変数を設定する。
source /opt/xilinx/xrt/setup.sh

どの xclbin を見てみようということで、Vitis を起動して、アプリケーション・プロジェクトを見たところ、最初の all_layers_template プロジェクトを見てみよう。
xclbinutil_1_200530.png

all_layers_dnn.xclbin ファイルは /home/masaaki/Vitis_Work/2019.2/all_layers_template/Hardware/sd_card ディレクトリにある。
xclbinutil_2_200530.png

Vitis のアクセラレーション・カーネルがあるディレクトリに移動する。
cd /home/masaaki/Vitis_Work/2019.2/all_layers_template/Hardware/sd_card

最初に help を見てみよう。
xclbinutil --help
xclbinutil_3_200530.png
xclbinutil_4_200530.png

masaaki@masaaki-H110M4-M01:~/Vitis_Work/2019.2/all_layers_template/Hardware/sd_card$ xclbinutil --help
This utility operates on a xclbin produced by xocc.

For example:
  1) Reporting xclbin information  : xclbinutil --info --input binary_container_1.xclbin
  2) Extracting the bitstream image: xclbinutil --dump-section BITSTREAM:RAW:bitstream.bit --input binary_container_1.xclbin
  3) Extracting the build metadata : xclbinutil --dump-section BUILD_METADATA:HTML:buildMetadata.json --input binary_container_1.xclbin
  4) Removing a section            : xclbinutil --remove-section BITSTREAM --input binary_container_1.xclbin --output binary_container_modified.xclbin
  5) Signing xclbin                : xclbinutil --private-key key.priv --certificate cert.pem --input binary_container_1.xclbin --output signed.xclbin

Command Line Options
Options:
  -h [ --help ]             Print help messages
  -i [ --input ] arg        Input file name. Reads xclbin into memory.
  -o [ --output ] arg       Output file name. Writes in memory xclbin image to 
                            a file.
  --private-key arg         Private key used in signing the xclbin image.
  --certificate arg         Certificate used in signing and validating the 
                            xclbin image.
  --digest-algorithm arg    Digest algorithm. Default: sha512
  --validate-signature      Validates the signature for the given xclbin 
                            archive.
  -v [ --verbose ]          Display verbose/debug information.
  -q [ --quiet ]            Minimize reporting information.
  --migrate-forward         Migrate the xclbin archive forward to the new 
                            binary format.
  --remove-section arg      Section name to remove.
  --add-section arg         Section name to add.  Format: 
                            <section>:<format>:<file>
  --dump-section arg        Section to dump. Format: <section>:<format>:<file>
  --replace-section arg     Section to replace. 
  --key-value arg           Key value pairs.  Format: [USER|SYS]:<key>:<value>
  --remove-key arg          Removes the given user key from the xclbin archive.
  --add-signature arg       Adds a user defined signature to the given xclbin 
                            image.
  --remove-signature        Removes the signature from the xclbin image.
  --get-signature           Returns the user defined signature (if set) of the 
                            xclbin image.
  --info [=arg(=<console>)] Report accelerator binary content.  Including: 
                            generation and packaging data, kernel signatures, 
                            connectivity, clocks, sections, etc.  Note: 
                            Optionally an output file can be specified.  If 
                            none is specified, then the output will go to the 
                            console.
  --list-sections           List all possible section names (Stand Alone 
                            Option)
  --version                 Version of this executable.
  --force                   Forces a file overwrite.

Addition Syntax Information
---------------------------
Syntax: <section>:<format>:<file>
    <section> - The section to add or dump (e.g., BUILD_METADATA, BITSTREAM, etc.)
                Note: If a JSON format is being used, this value can be empty.  If so, then
                      the JSON metadata will determine the section it is associated with.
                      In addition, only sections that are found in the JSON file will be reported.

    <format>  - The format to be used.  Currently, there are three formats available: 
                RAW: Binary Image; JSON: JSON file format; and HTML: Browser visible.

                Note: Only selected operations and sections supports these file types.

    <file>    - The name of the input/output file to use.

  Used By: --add_section and --dump_section
  Example: xclbinutil --add-section BITSTREAM:RAW:mybitstream.bit


all_layers_dnn.xclbin の情報を見てみよう。
xclbinutil --info --input all_layers_dnn.xclbin
xclbinutil_5_200530.png
xclbinutil_6_200530.png

masaaki@masaaki-H110M4-M01:~/Vitis_Work/2019.2/all_layers_template/Hardware/sd_card$ xclbinutil --info --input all_layers_dnn.xclbin 
XRT Build Version: 2.3.1301
       Build Date: 2019-10-24 20:05:16
          Hash ID: 192e706aea53163a04c574f9b3fe9ed76b6ca471
------------------------------------------------------------------------------
Warning: The option '--output' has not been specified. All operations will    
         be done in memory with the exception of the '--dump-section' command.
------------------------------------------------------------------------------
Reading xclbin file into memory.  File: all_layers_dnn.xclbin

==============================================================================
XRT Build Version: 2.3.1301
       Build Date: 2019-10-24 20:05:16
          Hash ID: 192e706aea53163a04c574f9b3fe9ed76b6ca471
==============================================================================
xclbin Information
------------------
   Generated by:           v++ (2019.2) on Thu Oct 24 18:45:48 MDT 2019
   Version:                2.3.1301
   Kernels:                all_layers_dnn
   Signature:              
   Content:                Bitstream
   UUID (xclbin):          5def028b-c959-4a11-b9c6-8aed2fda4be3
   Sections:               BITSTREAM, MEM_TOPOLOGY, IP_LAYOUT, CONNECTIVITY, 
                           BUILD_METADATA, EMBEDDED_METADATA, SYSTEM_METADATA
==============================================================================
Hardware Platform (Shell) Information
-------------------------------------
   Vendor:                 vendor
   Board:                  Ultra96V2
   Name:                   ultra96v2_min2
   Version:                1.0
   Generated Version:      Vivado 2019.2 (SW Build: 2700185)
   Created:                Fri Nov 29 04:12:55 2019
   FPGA Device:            xczu3eg
   Board Vendor:           em.avnet.com
   Board Name:             em.avnet.com:ultra96v2:1.0
   Board Part:             em.avnet.com:ultra96v2:part0:1.0
   Platform VBNV:          vendor_Ultra96V2_ultra96v2_min2_1_0
   Static UUID:            00000000-0000-0000-0000-000000000000
   Feature ROM TimeStamp:  0

Clocks
------
   No clock frequency data available.

Memory Configuration
--------------------
   Name:         HPC
   Index:        0
   Type:         MEM_DRAM
   Base Address: 0x0
   Address Size: 0x0
   Bank Used:    No

   Name:         HPC
   Index:        1
   Type:         MEM_DRAM
   Base Address: 0x0
   Address Size: 0x0
   Bank Used:    No

   Name:         HP
   Index:        2
   Type:         MEM_DRAM
   Base Address: 0x0
   Address Size: 0x80000000
   Bank Used:    Yes

   Name:         HP
   Index:        3
   Type:         MEM_DRAM
   Base Address: 0x0
   Address Size: 0x0
   Bank Used:    No

   Name:         HP
   Index:        4
   Type:         MEM_DRAM
   Base Address: 0x0
   Address Size: 0x0
   Bank Used:    No

   Name:         HP
   Index:        5
   Type:         MEM_DRAM
   Base Address: 0x0
   Address Size: 0x0
   Bank Used:    No
==============================================================================
Kernel: all_layers_dnn

Definition
----------
   Signature: all_layers_dnn (* inm, * output, * dot2, int x_size, int y_size)

Ports
-----
   Port:          M_AXI_GMEM
   Mode:          master
   Range (bytes): 0xFFFFFFFF
   Data Width:    32 bits
   Port Type:     addressable

   Port:          M_AXI_GMEM2
   Mode:          master
   Range (bytes): 0xFFFFFFFF
   Data Width:    32 bits
   Port Type:     addressable

   Port:          S_AXI_CONTROL
   Mode:          slave
   Range (bytes): 0x1000
   Data Width:    32 bits
   Port Type:     addressable

--------------------------
Instance:        all_layers_dnn_1
   Base Address: 0xa0000000

   Argument:          inm
   Register Offset:   0x10
   Port:              M_AXI_GMEM
   Memory:            HP (MEM_DRAM)

   Argument:          output
   Register Offset:   0x1C
   Port:              M_AXI_GMEM
   Memory:            HP (MEM_DRAM)

   Argument:          dot2
   Register Offset:   0x28
   Port:              M_AXI_GMEM2
   Memory:            HP (MEM_DRAM)

   Argument:          x_size
   Register Offset:   0x34
   Port:              S_AXI_CONTROL
   Memory:            <not applicable>

   Argument:          y_size
   Register Offset:   0x3C
   Port:              S_AXI_CONTROL
   Memory:            <not applicable>
==============================================================================
Generated By
------------
   Command:       v++
   Version:       2019.2 - Thu Oct 24 18:45:48 MDT 2019 (SW BUILD: 2700185)
   Command Line:  v++ --target hw --link --config common-config.ini --config all_layers_dnn-link.ini -oall_layers_dnn.xclbin ../src/all_layers_dnn.xo 
   Options:       --target hw
                  --link
                  --config common-config.ini
                  --config all_layers_dnn-link.ini
                  -oall_layers_dnn.xclbin ../src/all_layers_dnn.xo 
==============================================================================
User Added Key Value Pairs
--------------------------
   <empty>
==============================================================================
Leaving xclbinutil.


セクション項目を観察するために xclbin ファイルのセクション項目をリストしてみよう。
xclbinutil --list-section
xclbinutil_7_200530.png
xclbinutil_8_200530.png

masaaki@masaaki-H110M4-M01:~/Vitis_Work/2019.2/all_layers_template/Hardware/sd_card$ xclbinutil --list-section
XRT Build Version: 2.3.1301
       Build Date: 2019-10-24 20:05:16
          Hash ID: 192e706aea53163a04c574f9b3fe9ed76b6ca471
All supported section names supported by this tool:
  BITSTREAM
  BITSTREAM_PARTIAL_PDI
  BMC
  BUILD_METADATA
  CLEARING_BITSTREAM
  CLOCK_FREQ_TOPOLOGY
  CONNECTIVITY
  DEBUG_DATA
  DEBUG_IP_LAYOUT
  DESIGN_CHECKPOINT
  DNA_CERTIFICATE
  EMBEDDED_METADATA
  EMULATION_DATA
  FIRMWARE
  IP_LAYOUT
  KEYVALUE_METADATA
  MCS
  MEM_TOPOLOGY
  PARTITION_METADATA
  PDI
  SCHED_FIRMWARE
  SOFT_KERNEL
  SYSTEM_METADATA
  USER_METADATA


MEM_TOPOLOGY セッションを mem.json ファイルに書き出す。
xclbinutil --dump-section MEM_TOPOLOGY:json:mem.json -i all_layers_dnn.xclbin
xclbinutil_9_200530.png

mem.json ファイルが生成された。
xclbinutil_10_200530.png

mem.json ファイルを示す。

{
    "mem_topology": {
        "m_count": "6",
        "m_mem_data": [
            {
                "m_type": "MEM_DRAM",
                "m_used": "0",
                "m_sizeKB": "0x0",
                "m_tag": "HPC",
                "m_base_address": "0x0"
            },
            {
                "m_type": "MEM_DRAM",
                "m_used": "0",
                "m_sizeKB": "0x0",
                "m_tag": "HPC",
                "m_base_address": "0x0"
            },
            {
                "m_type": "MEM_DRAM",
                "m_used": "1",
                "m_sizeKB": "0x200000",
                "m_tag": "HP",
                "m_base_address": "0x0"
            },
            {
                "m_type": "MEM_DRAM",
                "m_used": "0",
                "m_sizeKB": "0x0",
                "m_tag": "HP",
                "m_base_address": "0x0"
            },
            {
                "m_type": "MEM_DRAM",
                "m_used": "0",
                "m_sizeKB": "0x0",
                "m_tag": "HP",
                "m_base_address": "0x0"
            },
            {
                "m_type": "MEM_DRAM",
                "m_used": "0",
                "m_sizeKB": "0x0",
                "m_tag": "HP",
                "m_base_address": "0x0"
            }
        ]
    }
}


もう1つ IP_LAYOUT セクション項目を ip_layout.json に出力した。
xclbinutil --dump-section IP_LAYOUT:json:ip_layout.json -i all_layers_dnn.xclbin
xclbinutil_11_200530.png

ip_layout.json が生成された。
xclbinutil_12_200530.png

ip_layout.json ファイルを示す。

{
    "ip_layout": {
        "m_count": "1",
        "m_ip_data": [
            {
                "m_type": "IP_KERNEL",
                "m_int_enable": "1",
                "m_interrupt_id": "0",
                "m_ip_control": "AP_CTRL_HS",
                "m_base_address": "0xa0000000",
                "m_name": "all_layers_dnn:all_layers_dnn_1"
            }
        ]
    }
}

  1. 2020年05月30日 07:17 |
  2. Vitis
  3. | トラックバック:0
  4. | コメント:0