FPGAの部屋

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

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。ご利用ください。 http://marsee101.web.fc2.com/index.html

xclbinutil を使ってみる”の続き。

前回は、Xilinx の日本語ビデオ資料の”ザイリンクス XCLBIN ユーティリティの概要 (日本語吹替)”を見たので、xclbinutil を使ってみたくなったので、やってみたのだが、一部ビデオの内容にあったのにやらなかったオプションがあった。私には要らなかな?と思ってやらなかったのだが、やはりやってみることにした。今回は、その抜けていたオプションの --key-value、 --add-signature、 --get-signature を使ってみよう。

key - value ペアを xclbin ファイルに埋め込むオプションが --key-value オプションだ。USER と SYS があるようだが、USER で key - valule ペアを埋め込んだ xclbin ファイルを生成する。
xclbinutil -i all_layers_dnn.xclbin -o all_layers_dnn_key.xclbin --key-value USER:layers_template:20200531
cb2a9a26.png


all_layers_dnn_key.xclbin が生成されているのが分かる。

それでは、 --info オプションで埋め込んだ key - valule ペアを確かめてみよう。
xclbinutil --info -i all_layers_dnn_key.xclbin
3482f74d.png


情報の最後に User Added Key Value Pairs が見える。

次に、 signature を xclbin に埋め込む。
やはり、 signature を埋め込んだ新しい xclbin ファイルを生成する。
xclbinutil -i all_layers_dnn.xclbin -o all_layers_dnn_sign.xclbin --add-signature all_laysers_template_20200531
ccd5d5e6.png


all_layers_dnn_sign.xclbin が生成された。

all_layers_dnn_sign.xclbin の signature を見る時は、 --get-signature を使用する。
xclbinutil -i all_layers_dnn_sign.xclbin --get-signature
8ec43f04.png


signature を取得することができた。

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

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

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

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


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


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

最初に help を見てみよう。
xclbinutil --help
2805d7c7.png

db28baf8.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
b0598a66.png

59558f25.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
19d27ba5.png

528227fe.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
ab40a8e8.png


mem.json ファイルが生成された。
8ed6c1f4.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
9d2c5003.png


ip_layout.json が生成された。
060d475c.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"
            }
        ]
    }
}


finn をやってみる4(1_brevitas_network_import.ipynb その1)”の続き。

前回は、 basics の 1_brevitas_network_import.ipynb の 2. Call Brevitas FINN-ONNX export and visualize with Netron までをやってみた。今回は、 basics の 1_brevitas_network_import.ipynb の 3. Import into FINN and call cleanup transformations をやってみよう。

basics の 1_brevitas_network_import.ipynb のコードや文章、またそれの Google 翻訳を引用する。

88e3274d.png

a81d912e.png

5b6d6d0f.png


すべて正常に実行することができた。
最後に /tmp/LFCW1A1-clean.onnx のグラフを示す。
finn_31_200529.png

↑このページのトップヘ