dpu for convolutional neural network v3.0 dpu ip 製品ガイド · dpu for convolutional neural...

50
DPU for Convolutional Neural Network v3.0 DPU IP 製品ガイド PG338 (v3.0) 2019 8 13 この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資料に よっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報につきま しては、必ず最新英語版をご参照ください。

Upload: others

Post on 27-Dec-2019

7 views

Category:

Documents


0 download

TRANSCRIPT

DPU for Convolutional

Neural Network v3.0

DPU IP 製品ガイド

PG338 (v3.0) 2019 年 8 月 13 日

この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資料によっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報につきましては、必ず最新英語版をご参照ください。

DPU IP 製品ガイド japan.xilinx.com 2

PG338 (v3.0) 2019 年 8 月 13 日

改訂履歴

次の表に、この文書の改訂履歴を示します。

セクション 改訂内容

2019 年 8 月 13 日、バージョン 3.0

DNNDK 説明を更新。

[RAM Usage] 説明を追加。

[Channel Augmentation] 説明を追加。

[Softmax] 数値を更新。

[DSP48 Maximum Cascade Length] 注記を追加。

[DSP48 Usage] DSP の最大使用量における LUT の数値を更新。

PetaLinux プロジェクトのビルド

コードを更新。

2019 年 7 月 31 日、バージョン 3.0

第 1 章: 概要 章全体を更新。

第 2 章: 製品仕様 章全体を更新。

表 1: DPU の信号の説明 dpu_2x_clk_ce の説明を追加。

第 3 章: DPU のコンフィギュレーション 章全体を更新。

はじめに 説明を更新。

表 7: DPU でサポートされる DNN の機

能とパラメーター

「DepthwiseConv」と「最大プーリング」の説明を更新。

コンフィギュレーション オプション 図を更新。「チャネル拡張」と「dpu_2x クロック ゲーティング」のセクションを追加、すべて

の説明のセクションを更新。

第 4 章: クロッキングとリセット 章全体を更新。

dpu_2x_clk の CE を追加

セクションを追加。

第 5 章: 開発フロー 章全体を更新。

DPU IP をリポジトリに追加する/DPU を

以前のバージョンからアップグレードする

セクションを更新。

Zynq-7000 デバイスでのコアのカスタマ

イズおよび生成

図を更新。

第 6 章: サンプル デザイン 章全体を更新。

DPU のコンフィギュレーション セクションを更新。

2019 年 6 月 7 日、バージョン 2.0

DNNDK 説明を追加。

表 1: DPU の信号の説明 softmax の説明を追加。

割り込み 注記を更新。

表 7: DPU でサポートされる DNN の機

能とパラメーター

「DepthwiseConv」を追加。

コンフィギュレーション オプション 新機能を追加: DepthwiseConv、AveragePool、ReLU Type、softmax。DPU GUI の一部

の図を更新。s-axi クロック モードに関する説明を追加。

DPU IP 製品ガイド japan.xilinx.com 3

PG338 (v3.0) 2019 年 8 月 13 日

表 13: 各モデルの性能 表を更新。

表 14: DPU-B1152 および DPU-B4096

で必要な I/O 帯域幅

表を更新。

レジスタ クロック DPU クロックの推奨周波数を修正。

DPU パラメーターを設定する 図を更新。

DPU をザイリンクス SoC のプロセッシン

グ システムに接続する

セクションを更新。

DPU のレジスタ アドレスを割り当てる

注記を更新。

デバイス ツリー セクションを追加。

Zynq-7000 デバイスでのコアのカスタマ

イズおよび生成

セクションを追加。

デザイン ファイル 図を更新。

DPU のコンフィギュレーション 図を更新。

ソフトウェア デザイン フロー セクションを更新。

2019 年 3 月 26 日、バージョン 1.2

PetaLinux プロジェクトのビルド 説明を更新。

デモの構築 図を更新。

デモの実行 コードを更新。

2019 年 3 月 8 日、バージョン 1.1

表 6: reg_dpu_base_addr 説明を更新。

図 10: DPU のコンフィギュレーション –

[Arch] タブ

図を更新。

PetaLinux プロジェクトのビルド コードを更新。

デモの構築 説明を更新。

2019 年 3 月 5 日、バージョン 1.1

第 6 章: サンプル デザイン DPU ターゲット リファレンス デザインに関する章を追加。

2019 年 2 月 28 日、バージョン 1.0

初版 N/A

DPU IP 製品ガイド japan.xilinx.com 4

PG338 (v3.0) 2019 年 8 月 13 日

目次

改訂履歴 ..................................................................................................................................................................................................... 2

IP の概要 .......................................................................................................................................................................................................... 6

はじめに ....................................................................................................................................................................................................... 6

第 1 章: 概要 .................................................................................................................................................................................................... 7

はじめに ....................................................................................................................................................................................................... 7

開発ツール .................................................................................................................................................................................................. 8

DPU を統合したシステム例 ........................................................................................................................................................................ 9

DNNDK ....................................................................................................................................................................................................... 9

ライセンスおよび注文情報 ........................................................................................................................................................................ 10

第 2 章: 製品仕様 .......................................................................................................................................................................................... 11

ハードウェア アーキテクチャ ..................................................................................................................................................................... 11

DPU および DSP の拡張使用 .................................................................................................................................................................. 12

レジスタ空間 .............................................................................................................................................................................................. 14

割り込み ..................................................................................................................................................................................................... 18

第 3 章: DPU のコンフィギュレーション .......................................................................................................................................................... 19

はじめに ..................................................................................................................................................................................................... 19

コンフィギュレーション オプション ............................................................................................................................................................. 20

[Advanced] タブ......................................................................................................................................................................................... 24

[Summary] タブ ......................................................................................................................................................................................... 26

各デバイスの DPU 性能 ........................................................................................................................................................................... 27

各モデルの性能 ........................................................................................................................................................................................ 27

必要な I/O 帯域幅 .................................................................................................................................................................................... 28

第 4 章: クロッキングとリセット ....................................................................................................................................................................... 29

はじめに ..................................................................................................................................................................................................... 29

クロック ドメイン .......................................................................................................................................................................................... 29

基準クロックの生成 .................................................................................................................................................................................... 30

リセット ........................................................................................................................................................................................................ 33

第 5 章: 開発フロー ........................................................................................................................................................................................ 34

MPSoC でのコアのカスタマイズと生成 ..................................................................................................................................................... 34

Zynq-7000 デバイスでのコアのカスタマイズおよび生成.......................................................................................................................... 41

第 6 章: サンプル デザイン ............................................................................................................................................................................ 42

はじめに ..................................................................................................................................................................................................... 42

ハードウェア デザイン フロー .................................................................................................................................................................... 44

DPU IP 製品ガイド japan.xilinx.com 5

PG338 (v3.0) 2019 年 8 月 13 日

ソフトウェア デザイン フロー ...................................................................................................................................................................... 47

付録 A 「その他のリソースおよび法的通知」 ................................................................................................................................................ 50

ザイリンクス リソース ................................................................................................................................................................................... 50

参考資料 ................................................................................................................................................................................................... 50

お読みください: 重要な法的通知 ............................................................................................................................................................. 50

DPU IP 製品ガイド japan.xilinx.com 6

PG338 (v3.0) 2019 年 8 月 13 日

IP の概要

はじめに

ザイリンクス Deep Learning Processor Unit (DPU) は、たたみ込み

ニューラル ネットワーク (CNN) 専用の構成可能なエンジンです。エ

ンジンで使用される並列度はデザイン パラメーターであり、ターゲッ

ト デバイスとアプリケーションに応じて選択できます。また、高度に

最適化された一連の命令が含まれており、VGG、ResNet、

GoogLeNet、YOLO、SSD、MobileNet、FPN など、ほとんどのたた

み込みニューラル ネットワークをサポートします。

機能

• コンフィギュレーション レジスタおよびステータス レジスタへの

アクセス用に 1 つの AXI スレーブ インターフェイス。

• 命令アクセス用に 1 つの AXI マスター インターフェイス。

• データ アクセス用にターゲット デバイスに応じて 64 または 128

ビットに構成可能な AXI マスター インターフェイスをサポート。

• チャネルごとに個別の構成が可能。

• オプションで割り込み要求生成をサポート。

• DPU の主な機能は次のとおりです。

o 構成可能なアーキテクチャ: B512、B800、B1024、B1152、

B1600、B2304、B3136、および B4096

o 最大 3 つまでのコアを設定可能

o Convolution、Deconvolution

o DepthwiseConv

o Max Pooling

o AveragePool

o ReLU、ReLU6、および Leaky ReLU

o Concat

o Elementwise-sum

o Dilation

o Reorg

o Fully Connected Layer

o Softmax

o Batch Normalization

o Split

この DPU IP について

コアの概要

サポートされる

デバイス ファミリ

Zynq®-7000 SoC および

UltraScale+™ MPSoC ファミリ

サポートされる

ユーザー

インターフェイス

メモリ マップド AXI インターフェイス

リソース 第 3 章: DPU コンフィギュレーション

参照

コアに含まれるもの

デザイン ファイル 暗号化済み RTL

サンプル

デザイン Verilog

制約ファイル ザイリンクス デザイン制約ファイル

(.xdc)

サポートされる

ソフトウェア

ドライバー

PetaLinux に付属

テスト済みデザイン フロー

デザイン入力 Vivado® Design Suite

シミュレーション N/A

合成 Vivado 合成

サポート

ザイリンクス サポート ウェブ ページで提供

注記:

1. Linux OS およびドライバー サポートの情報は、DPU TRD または

DNNDK を参照してください。

2. ターゲット デバイスが Zynq-7000 SoC の場合は、「第 5 章: 開発フ

ロー」に記載されている制限事項を参照してください。

3. サポートされているツール バージョンは、『Vivado Design Suite ユー

ザー ガイド: リリース ノート、インストールおよびライセンス』 (UG973:

英語版、日本語版) を参照してください。

4. DPU は、DNNC コンパイラが生成する命令によって駆動されます。

ターゲット NN、DPU ハードウェア アーキテクチャ、または AXI デー

タ幅が変更された場合、DPU 命令を含む関連する .elf ファイルを再

生成する必要があります。

DPU IP 製品ガイド japan.xilinx.com 7

PG338 (v3.0) 2019 年 8 月 13 日

第 1 章: 概要

はじめに

ザイリンクス Deep Learning Processor Unit (DPU) は、たたみ込みニューラル ネットワーク (CNN) 向けに最適化されたプログラマブルな

エンジンです。DPU には、高性能スケジューラ モジュール、ハイブリッド コンピューティング アレイ モジュール、命令フェッチ ユニット モ

ジュール、グローバル メモリ プール モジュールがあります。DPU は、多くのたたみ込みニューラル ネットワークを効率よく実行実行する

ことに特化した命令セットを使用します。運用されているたたみ込みニューラル ネットワークの例としては、VGG、ResNet、GoogLeNet、

YOLO、SSD、MobileNet、FPN などがあります。

DPU IP は、一部の Zynq®-7000 SoC または Zynq UltraScale+™ MPSoC デバイスのプログラマブル ロジック (PL) に実装し、プロセッシ

ング システム (PS) と直接接続できます。DPU には、ニューラル ネットワークを実行するための命令と、入力イメージおよび一時的なデー

タと出力データを格納するアクセス可能なメモリ位置が必要です。さらに、割り込み処理とデータ転送調整のために、アプリケーション プ

ロセッシング (APU) で実行するプログラムも必要です。

次に、DPU の最上位ブロック図を示します。

APU

RAM

High Speed Data Tube

DPU

High

Performance

Scheduler

Instruction

Fetch UnitGlobal Memory Pool

Hybrid Computing Array

PE PE PE PE

X22327-072219

図 1: DPU の最上位ブロック図

第 1 章: 概要

DPU IP 製品ガイド japan.xilinx.com 8

PG338 (v3.0) 2019 年 8 月 13 日

開発ツール

DPU をプロジェクトに統合するには、ザイリンクス Vivado Design Suite が必要です。Vivado Design Suite 2019.1 またはそれ以降のバー

ジョンを推奨します。プロジェクトに古いバージョンの Vivado を使用する必要がある場合は、ザイリンクス販売代理店にお問い合わせく

ださい。

デバイス リソース

DPU のロジック リソース使用量は、ザイリンクス UltraScale+ MPSoC および Zynq-7000 デバイスでスケーラブルです。リソース使用量の

詳細は、「第 3 章: DPU コンフィギュレーション」を参照してください。

DPU の開発フロー

DPU には、ザイリンクス ディープ ニューラル ネットワーク開発キット (DNNDK) ツールチェーンに含まれるデバイス ドライバーが必要で

す。

開発者リソースはザイリンクス ウェブサイトから無償で入手できます。

https://japan.xilinx.com/products/design-tools/ai-inference/ai-developer-hub.html#edge

DNNDK ツールで DPU を使用する基本的な手順は、『DNNDK ユーザー ガイド』 (UG1327: 英語版、日本語版) で説明しています。基

本的な開発フローは、次の図のとおりです。まず、Vivado を使用してビットストリームを生成します。次に、ビットストリームをターゲット

ボードにダウンロードして、DPU ドライバーをインストールします。DPU ドライバーおよび依存関係のあるライブラリのインストール手順は、

『DNNDK ユーザー ガイド』 (UG1327: 英語版、日本語版) を参照してください。

Hardware Platform

DPU Driver

Lib

API

Vivado

DPU

User Application Third Party

bitf ile

X22328-072219

図 2: 基本的な開発フロー

第 1 章: 概要

DPU IP 製品ガイド japan.xilinx.com 9

PG338 (v3.0) 2019 年 8 月 13 日

DPU を統合したシステム例

次の図に、ザイリンクス UltraScale+ MPSoC にカメラ入力を接続したシステム例のブロック図を示します。システムに統合された DPU は

AXI インターコネクト経由で、イメージ分類、物体検出、セマンティック セグメンテーションなどの深層学習の推論タスクを実行します。

DPUCamera

AXI Interconnect

Controller DDR

Arm Cortex-A53 Arm

Cortex-R5

DisplayPort

USB3.0

SATA3.1

PCIe Gen2

GigE

USB2.0

UART

SPI

Quad SPI

NAND

SD

demosaic gammaColor_

conversion

DMAAXI

Interconnect

AXI

Interconnect

MIPI

CSI2

AXI Interconnect

MIPI

CSI2

X22329-072619

図 3: DPU を統合したシステム例

DNNDK

DNNDK (ディープ ニューラル ネットワーク開発キット) は、DPU を使用した推論向けのフルスタック深層学習ツールチェーンです。

次の図に示すように、DNNDK は DECENT (ディープ コンプレッション ツール)、DNNC (ディープ ニューラル ネットワーク コンパイラ)、

ニューラル ネットワーク ランタイム (N2Cube)、および DPU プロファイラーで構成されます。

DECENT N2Cube

DNNC Prof iler

OS

APU DPU

X22330-072619

図 4: DNNDK ツールチェーン

DPU 命令は DNNC を使用してオフラインで生成され、命令ファイルの拡張子は .elf になります。命令は、DPU アーキテクチャ、ターゲッ

ト ニューラル ネットワーク、および AXI データ幅に厳格に関連付けられます。これらの設定を変更した場合、それに応じて命令ファイル

を再生成する必要があります。次の図に、DPU を使用してターゲット ハードウェア プラットフォーム上で深層学習アプリケーションを実行

する際の階層を示します。

第 1 章: 概要

DPU IP 製品ガイド japan.xilinx.com 10

PG338 (v3.0) 2019 年 8 月 13 日

Industry-standard

LibrariesLoader

Operating System

APU

Deep Learning App

(DPU-accelerated)

Prof iler Library

DPU Driver

DPU

User Space

Kernel Space

Hardware Platform

X22331-072619

図 5: アプリケーション実行階層

DNNDK ツールは、DPU でのニューラル ネットワークの運用に必要です。最新のザイリンクス DNNDK_V3.1 パッケージは、

https://japan.xilinx.com/products/design-tools/ai-inference/ai-developer-hub.html#edge からダウンロードできます。

DNNDK v3.1 パッケージには Ubuntu 14.04 および 16.04 の DNNC バイナリが含まれ、それぞれ

xilinx_dnndk_v3.1/host_x86/pkgs/ubuntu14.04/ と xilinx_dnndk_v3.1/host_x86/pkgs/ubuntu16.04/ に

あります。

ライセンスおよび注文情報

この IP モジュールは、ザイリンクス エンドユーザー ライセンス規約のもと追加コストなしで提供されています。

この IP およびその他の IP モジュールに関する情報は、IP コアのページから入手できます。その他のザイリンクス IP モジュールおよび

ツールの価格や提供状況については、ザイリンクス販売代理店にお問い合わせください。

DPU IP 製品ガイド japan.xilinx.com 11

PG338 (v3.0) 2019 年 8 月 13 日

第 2 章: 製品仕様

ハードウェア アーキテクチャ

次の図に、DPU のハードウェア アーキテクチャの詳細を示します。起動後、DPU はオフチップ メモリから命令をフェッチし、演算エンジ

ンの動作を制御します。命令は、高度な最適化機能を持つ DNNC によって生成されます。

オンチップ メモリを入力データ、中間データ、および出力データのバッファーとして使用することで、高スループットと高い効率性を実現

します。メモリ帯域幅を抑えるため、なるべく多くのデータを再利用します。演算エンジンには、多段パイプライン デザインを使用していま

す。プロセッシング エレメント (PE) はザイリンクス デバイスに含まれる乗算器、加算器、アキュムレータなどの構築ブロックを最大限に利

用します。

Inst

ruction

Sched

ule

r

CPU (DNNDK) Memory Controller

Bus

Fetcher

Decoder

Dispatcher

On

-Chip

Buff

er

Contr

olle

rData Mover

On-Chip BRAM

BRAM Reader/Writer

Com

puting

Engin

e

Conv

Engin

e

Mis

c

Engin

e

PE PE PE

Processing System (PS)

Programmable Logic (PL)

Off-Chip Memory

X22332-072619

図 6: DPU のハードウェア アーキテクチャ

第 2 章: 製品仕様

DPU IP 製品ガイド japan.xilinx.com 12

PG338 (v3.0) 2019 年 8 月 13 日

DSP DDR を使用した DPU

DSP の DDR 手法を利用して、デバイスで達成可能な性能を高めています。つまり、DPU には汎用ロジック用と DSP スライス用に 2 つの

入力クロックが必要です。次の図に、DSP の DDR 手法を使用しない DPU と使用した場合の DPU アーキテクチャの違いを示します。

特に記載のない限り、この資料で DPU アーキテクチャと称しているものはすべて DPU を指しています。

IMG ram

IMG ram

WGT ram

A

D

B B

RES

+

×

DSP48 Slice

A+D

M

clk1x

IMG ram

IMG ram

WGT ram

A

D

B

+

×

DSP48 Slice

A+D

M

clk2x

WGT ram

RES0

DLY

RES1

OUT0

OUT1

+

A

DLY

D

DLY

B0

Async

B1

Async

D

Async

A

Async

BB

SEL

PCIN

P

PCOUT

PCOUT

RES0

clk1x clk1x

X22333-022019

図 7: DSP DDR を使用しない場合と使用した場合の DPU の違い

ポートの説明

次の図に、DPU の最上位インターフェイスを示します。

図 8: DPU の I/O ポート

第 2 章: 製品仕様

DPU IP 製品ガイド japan.xilinx.com 13

PG338 (v3.0) 2019 年 8 月 13 日

次の表に、DPU の I/O 信号とその説明を示します。

表 1: DPU の信号の説明

信号名 インターフェイス タイプ 幅 I/O 説明

S_AXI メモリ マップド AXI

スレーブ インターフェイス

32 I/O レジスタ アクセス用の 32 ビット メモリ マップド

AXI インターフェイス。

s_axi_aclk クロック 1 I S_AXI 用の AXI クロック入力。

s_axi_aresetn リセット 1 I S_AXI のリセット (アクティブ Low)。

dpu_clk_2x クロック 1 I DPU の DSP ブロックで使用する入力クロック。

周波数は m_axi_dpu_aclk の 2 倍です。

dpu_2x_resetn リセット 1 I DSP ブロックのリセット (アクティブ Low)。

m_axi_dpu_aclk クロック 1 I DPU の汎用ロジックで使用する入力クロック。

m_axi_dpu_aresetn リセット 1 I DPU の汎用ロジックのリセット (アクティブ

Low)。

DPUx_M_AXI_INSTR メモリ マップド AXI

マスター インターフェイス

32 I/O DPU の命令に使用する 32 ビット メモリ マップ

ド AXI インターフェイス。

DPUx_M_AXI_DATA0 メモリ マップド AXI

マスター インターフェイス

128 I/O DPU データに使用する 128 ビット メモリ マップ

ド AXI インターフェイス。

DPUx_M_AXI_DATA1 メモリ マップド AXI

マスター インターフェイス

128 I/O DPU データに使用する 128 ビット メモリ マップ

ド AXI インターフェイス。

dpu_interrupt 割り込み 1 ~ 3 O DPU からの割り込み出力 (アクティブ High)。

データ幅は、DPU コアの数によって決まりま

す。

SFM_M_AXI (オプション) メモリ マップド AXI

マスター インターフェイス

128 I/O softmax データに使用する 128 ビット メモリ

マップド AXI インターフェイス。

sfm_interrupt (オプション) 割り込み 1 O Softmax モジュールからの割り込み出力 (アク

ティブ High)。

dpu_2x_clk_ce (オプション) クロック イネーブル 1 O DPU 2x クロック ゲーティングが有効な場合

に、入力 DPU 2x クロックを制御するクロック イ

ネーブル信号。

注記:

1. softmax インターフェイスは、DPU の softmax オプションが有効になっている場合にのみ現れます。

第 2 章: 製品仕様

DPU IP 製品ガイド japan.xilinx.com 14

PG338 (v3.0) 2019 年 8 月 13 日

レジスタ空間

DPU IP は、レジスタをプログラマブル ロジックに実装します。表 2 に、DPU IP のレジスタを示します。これらのレジスタには、S_AXI イン

ターフェイス経由で APU からアクセスできます。

reg_dpu_reset DPU IP に統合されたすべての DPU コアのリセットを制御します。このレジスタの下位 3 ビットで、最大 3 つの DPU コアのリセットを制御

します。これらのリセット信号はいずれもアクティブ High です。表 2 に、reg_dpu_reset の詳細を示します。

表 2: reg_dpu_reset

レジスタ アドレス

オフセット

幅 タイプ 説明

reg_dpu_reset 0x004 32 R/W [n] – DPU コアの n リセット

reg_dpu_isr

DPU IP に統合されたすべての DPU コアの割り込みステータスを表します。このレジスタの下位 3 ビットで、最大 3 つの DPU コアの割り

込みステータスを示します。表 3 に、reg_dpu_irq の詳細を示します。

表 3: reg_dpu_isr

レジスタ アドレス

オフセット

幅 タイプ 説明

reg_dpu_isr 0x608 32 R [n] – DPU コアの n 割り込みステータス

reg_dpu_start

DPU コアの開始信号です。各 DPU コアに 1 つずつ開始レジスタがあります。表 4 に、reg_dpu_start の詳細を示します。

表 4: reg_dpu_start

レジスタ アドレス

オフセット

幅 タイプ 説明

reg_dpu0_start 0x220 32 R/W DPU coreX 開始信号

reg_dpu1_start 0x320 32 R/W DPU coreX 開始信号

reg_dpu2_start 0x420 32 R/W DPU coreX 開始信号

第 2 章: 製品仕様

DPU IP 製品ガイド japan.xilinx.com 15

PG338 (v3.0) 2019 年 8 月 13 日

reg_dpu_instr_addr

DPU コアの命令アドレスを示すために使用します。各 DPU コアには reg_dpu_instr_addr レジスタがあります。表 5 に、

reg_dpu_instr_addr の詳細を示します。

表 5: reg_dpu_instr_addr

レジスタ アドレス オフ

セット

幅 タイプ 説明

reg_dpu0_instr_addr 0x20c 32 R/W 外部メモリに格納した DPU coreX 命令の開始

アドレス。

注記: 「[0]」は不要。

reg_dpu1_instr_addr 0x30c 32 R/W 外部メモリに格納した DPU coreX 命令の開始

アドレス。

注記: 「[0]」は不要。

reg_dpu2_instr_addr 0x40c 32 R/W 外部メモリに格納した DPU coreX 命令の開始

アドレス。

注記: 「[0]」は不要。

reg_dpu_base_addr

各 DPU の入力イメージとパラメーターの外部メモリ アドレスを示すために使用します。DPU のベース アドレスの幅は 40 ビットで、最大

1TB のアドレス空間をサポートできます。ただしレジスタはすべて 32 ビット幅のため、40 ビット幅のベース アドレスを表現するには 2 つの

レジスタが必要です。reg_dpu0_base_addr0_l は DPU コア 0 のベース アドレス 0 の下位 32 ビットを表し、reg_dpu0_base_addr0_h は

DPU コア 0 のベース アドレス 0 の上位 8 ビットを表します。

DPU ベース アドレスのグループは各 DPU コアに対して 8 つあり、最大で 3 つの DPU コアに対して 24 の DPU ベース アドレス グルー

プがあります。表 6 に、reg_dpu_base_addr の詳細を示します。

第 2 章: 製品仕様

DPU IP 製品ガイド japan.xilinx.com 16

PG338 (v3.0) 2019 年 8 月 13 日

表 6: reg_dpu_base_addr

レジスタ アドレス

オフセット

幅 タイプ 説明

reg_dpu0_base_addr0_l 0x224 32 R/W DPU コア 0 のベース アドレス 0 の下位 32 ビット。

reg_dpu0_base_addr0_h 0x228 32 R/W このレジスタの下位 8 ビットで、DPU コア 0 のベース アドレス 0

の上位 8 ビットを表します。

reg_dpu0_base_addr1_l 0x22C 32 R/W DPU コア 0 のベース アドレス 1 の下位 32 ビット。

reg_dpu0_base_addr1_h 0x230 32 R/W このレジスタの下位 8 ビットで、DPU コア 0 のベース アドレス 1

の上位 8 ビットを表します。

reg_dpu0_base_addr2_l 0x234 32 R/W DPU コア 0 のベース アドレス 2 の下位 32 ビット。

reg_dpu0_base_addr2_h 0x238 32 R/W このレジスタの下位 8 ビットで、DPU コア 0 のベース アドレス 2

の上位 8 ビットを表します。

reg_dpu0_base_addr3_l 0x23C 32 R/W DPU コア 0 のベース アドレス 3 の下位 32 ビット。

reg_dpu0_base_addr3_h 0x240 32 R/W このレジスタの下位 8 ビットで、DPU コア 0 のベース アドレス 3

の上位 8 ビットを表します。

reg_dpu0_base_addr4_l 0x244 32 R/W DPU コア 0 のベース アドレス 4 の下位 32 ビット。

reg_dpu0_base_addr4_h 0x248 32 R/W このレジスタの下位 8 ビットで、DPU コア 0 のベース アドレス 4

の上位 8 ビットを表します。

reg_dpu0_base_addr5_l 0x24C 32 R/W DPU コア 0 のベース アドレス 5 の下位 32 ビット。

reg_dpu0_base_addr5_h 0x250 32 R/W このレジスタの下位 8 ビットで、DPU コア 0 のベース アドレス 5

の上位 8 ビットを表します。

reg_dpu0_base_addr6_l 0x254 32 R/W DPU コア 0 のベース アドレス 6 の下位 32 ビット。

reg_dpu0_base_addr6_h 0x258 32 R/W このレジスタの下位 8 ビットで、DPU コア 0 のベース アドレス 6

の上位 8 ビットを表します。

reg_dpu0_base_addr7_l 0x25C 32 R/W DPU コア 0 のベース アドレス 7 の下位 32 ビット。

reg_dpu0_base_addr7_h 0x260 32 R/W このレジスタの下位 8 ビットで、DPU コア 0 のベース アドレス 7

の上位 8 ビットを表します。

reg_dpu1_base_addr0_l 0x324 32 R/W DPU コア 1 のベース アドレス 0 の下位 32 ビット。

reg_dpu1_base_addr0_h 0x328 32 R/W このレジスタの下位 8 ビットで、DPU コア 1 のベース アドレス 0

の上位 8 ビットを表します。

reg_dpu1_base_addr1_l 0x32C 32 R/W DPU コア 1 のベース アドレス 1 の下位 32 ビット。

reg_dpu1_base_addr1_h 0x330 32 R/W このレジスタの下位 8 ビットで、DPU コア 1 のベース アドレス 1

の上位 8 ビットを表します。

reg_dpu1_base_addr2_l 0x334 32 R/W DPU コア 1 のベース アドレス 2 の下位 32 ビット。

reg_dpu1_base_addr2_h 0x338 32 R/W このレジスタの下位 8 ビットで、DPU コア 1 のベース アドレス 2

の上位 8 ビットを表します。

reg_dpu1_base_addr3_l 0x33C 32 R/W DPU コア 1 のベース アドレス 3 の下位 32 ビット。

reg_dpu1_base_addr3_h 0x340 32 R/W このレジスタの下位 8 ビットで、DPU コア 1 のベース アドレス 3

の上位 8 ビットを表します。

reg_dpu1_base_addr4_l 0x344 32 R/W DPU コア 1 のベース アドレス 4 の下位 32 ビット。

reg_dpu1_base_addr4_h 0x348 32 R/W このレジスタの下位 8 ビットで、DPU コア 1 のベース アドレス 4

の上位 8 ビットを表します。

第 2 章: 製品仕様

DPU IP 製品ガイド japan.xilinx.com 17

PG338 (v3.0) 2019 年 8 月 13 日

reg_dpu1_base_addr5_l 0x34C 32 R/W DPU コア 1 のベース アドレス 5 の下位 32 ビット。

reg_dpu1_base_addr5_h 0x350 32 R/W このレジスタの下位 8 ビットで、DPU コア 1 のベース アドレス 5

の上位 8 ビットを表します。

reg_dpu1_base_addr6_l 0x354 32 R/W DPU コア 1 のベース アドレス 6 の下位 32 ビット。

reg_dpu1_base_addr6_h 0x358 32 R/W このレジスタの下位 8 ビットで、DPU コア 1 のベース アドレス 6

の上位 8 ビットを表します。

reg_dpu1_base_addr7_l 0x35C 32 R/W DPU コア 1 のベース アドレス 7 の下位 32 ビット。

reg_dpu1_base_addr7_h 0x360 32 R/W このレジスタの下位 8 ビットで、DPU コア 1 のベース アドレス 7

の上位 8 ビットを表します。

reg_dpu2_base_addr1_l 0x42C 32 R/W DPU コア 2 のベース アドレス 1 の下位 32 ビット。

reg_dpu2_base_addr1_h 0x430 32 R/W このレジスタの下位 8 ビットで、DPU コア 2 のベース アドレス 1

の上位 8 ビットを表します。

reg_dpu2_base_addr2_l 0x434 32 R/W DPU コア 2 のベース アドレス 2 の下位 32 ビット。

reg_dpu2_base_addr2_h 0x438 32 R/W このレジスタの下位 8 ビットで、DPU コア 2 のベース アドレス 2

の上位 8 ビットを表します。

reg_dpu2_base_addr3_l 0x43C 32 R/W DPU コア 2 のベース アドレス 3 の下位 32 ビット。

reg_dpu2_base_addr3_h 0x440 32 R/W このレジスタの下位 8 ビットで、DPU コア 2 のベース アドレス 3

の上位 8 ビットを表します。

reg_dpu2_base_addr4_l 0x444 32 R/W DPU コア 2 のベース アドレス 4 の下位 32 ビット。

reg_dpu2_base_addr4_h 0x448 32 R/W このレジスタの下位 8 ビットで、DPU コア 2 のベース アドレス 4

の上位 8 ビットを表します。

reg_dpu2_base_addr5_l 0x44C 32 R/W DPU コア 2 のベース アドレス 5 の下位 32 ビット。

reg_dpu2_base_addr5_h 0x450 32 R/W このレジスタの下位 8 ビットで、DPU コア 2 のベース アドレス 5

の上位 8 ビットを表します。

reg_dpu2_base_addr6_l 0x454 32 R/W DPU コア 2 のベース アドレス 6 の下位 32 ビット。

reg_dpu2_base_addr6_h 0x458 32 R/W このレジスタの下位 8 ビットで、DPU コア 2 のベース アドレス 6

の上位 8 ビットを表します。

reg_dpu2_base_addr7_l 0x45C 32 R/W DPU コア 2 のベース アドレス 7 の下位 32 ビット。

reg_dpu2_base_addr7_h 0x460 32 R/W このレジスタの下位 8 ビットで、DPU コア 2 のベース アドレス 7

の上位 8 ビットを表します。

第 2 章: 製品仕様

DPU IP 製品ガイド japan.xilinx.com 18

PG338 (v3.0) 2019 年 8 月 13 日

割り込み

DPU は、タスクの完了を通知する割り込みを生成します。DPU コア 0 の DPU タスクが開始すると、reg_dpu0_start が High になります。タ

スクが完了すると、DPU が割り込みを生成し、reg_dpu_isr のビット 0 が 1 にセットされます。reg_dpu_isr のどのビットがセットされるかは、

DPU コアの番号ごとに決まっています。たとえば DPU コア 1 がタスクを完了し、DPU コア 0 がまだタスクを実行中の場合、reg_dpu_isr

には 2’b10 が含まれます。

dpu_interrupt 信号の幅は、DPU コアの数によって決まります。DPU_NUM パラメーターを 2 に設定すると、DPU IP には 2 つの DPU コ

アが含まれ、dpu_interrupt 信号の幅は 2 となります。この場合、下位ビットが DPU コア 0 の割り込みを表し、上位ビットが DPU コア 1 の

割り込みを表します。

DPU と PS の割り込み接続は、デバイス ツリー ファイルに記述されています。このファイルには、PS に接続された DPU の割り込み番号

が示されています。次の図に、推奨する接続を示します。

図 9: DPU 割り込みの推奨接続

注記:

1. softmax オプションが有効の場合、デバイス ツリーの記述に従って softmax 割り込みを PS に正しく接続する必要があります。

2. irq7 ~ irq0 が pl_ps_irq0[7:0] に対応します。

3. irq15 ~ irq8 が pl_ps_irq1[7:0] に対応します。

DPU IP 製品ガイド japan.xilinx.com 19

PG338 (v3.0) 2019 年 8 月 13 日

第 3 章: DPU のコンフィギュレーション

はじめに

DPU IP には、リソース使用量を最適化したり異なる機能をカスタマイズしたりするためのユーザー設定可能なパラメーターがあります。使

用可能なプログラマブル ロジック リソースの量に応じて、DSP スライス、LUT、ブロック RAM (BRAM)、および UltraRAM の使用量を設

定できます。チャネル拡張、AveragePool、DepthwiseConv、softmax などの追加機能のオプションもあります。さらに、1 つの DPU IP にイ

ンスタンシエートする DPU コアの数を指定するオプションもあります。

次の表に、DPU でサポートされるディープ ニューラル ネットワークと関連パラメーターを示します。

表 7: DPU でサポートされる DNN の機能とパラメーター

機能 説明

Convolution

カーネル サイズ W: 1 ~ 16、H: 1 ~ 16

ストライド W: 1 ~ 4、H: 1 ~4

パディング_w 1: kernel_w - 1

パディング_h 1: kernel_h - 1

入力サイズ 任意の値

入力チャネル 1 ~ 256 * channel_parallel

出力チャネル 1 ~ 256 * channel_parallel

アクティベーション ReLU、LeakyReLU、または ReLU6

ディレーション dilation * input_channel <= 256 * channel_parallel &&

stride_w == 1 && stride_h == 1

Depthwise

Convolution

カーネル サイズ W: 1 ~ 16、H: 1 ~ 16

ストライド W: 1 ~ 4、H: 1 ~4

パディング_w 1: kernel_w - 1

パディング_h 1: kernel_h - 1

入力サイズ 任意の値

入力チャネル 1 ~ 256 * channel_parallel

出力チャネル 1 ~ 256 * channel_parallel

アクティベーション ReLU または ReLU6

ディレーション dilation * input_channel <= 256 * channel_parallel &&

stride_w == 1 && stride_h == 1

Deconvolution

カーネル サイズ W: 1 ~ 16、H: 1 ~ 16

ストライド_w stride_w * output_channel <= 256 * channel_parallel

ストライド_h 任意の値

パディング_w 1: kernel_w - 1

パディング_h 1: kernel_h - 1

入力サイズ 任意の値

入力チャネル 1 ~ 256 * channel_parallel

出力チャネル 1 ~ 256 * channel_parallel

第 3 章: DPU のコンフィギュレーション

DPU IP 製品ガイド japan.xilinx.com 20

PG338 (v3.0) 2019 年 8 月 13 日

アクティベーション ReLU または LeakyReLU

Max Pooling

カーネル サイズ W: 1 ~ 8、H: 1 ~ 8

ストライド W: 1 ~ 4、H: 1 ~4

パディング W: 1 ~ 4、H: 1 ~4

Elementwise-sum 入力チャネル 1 ~ 256 * channel_parallel

入力サイズ 任意の値

Concat 出力チャネル 1 ~ 256 * channel_parallel

Reorg ストライド stride * stride * input_channel <= 256 * channel_parallel

FC 入力チャネル Input_channel <= 2048 * channel_parallel

出力チャネル 任意の値

注記:

1. パラメーター channel_parallel は、DPU のアーキテクチャによって決まります。たとえば、DPU-B1152 の channel_parallel は 12 で、

DPU-B4096 の channel_parallel は 16 です (表 8 参照)。

コンフィギュレーション オプション

DPU は、DPU コアの数、たたみ込みアーキテクチャ、DSP カスケード、DSP 使用量、UltraRAM 使用量のオプションを設定して構成でき

ます。これらのオプションにより、DSP スライス、LUT、ブロック RAM、および UltraRAM の使用量を設定できます。次の図に、DPU のコ

ンフィギュレーション ページを示します。

図 10: DPU のコンフィギュレーション – [Arch] タブ

第 3 章: DPU のコンフィギュレーション

DPU IP 製品ガイド japan.xilinx.com 21

PG338 (v3.0) 2019 年 8 月 13 日

[Number of DPU Core]

1 つの DPU IP で最大 3 つのコアを選択できます。複数の DPU コアを使用すると、より高い性能が得られますが、使用するプログラマブ

ル ロジック リソースも多くなります。

4 つ以上のコアが必要な場合は、ザイリンクス販売代理店にお問い合わせください。

[Arch of DPU]

DPU IP は、たたみ込みアーキテクチャを選択できます。このアーキテクチャは、たたみ込みユニットの並列度に関係します。DPU

IP のアーキテクチャには、B512、B800、B1024、B1152、B1600、B2304、B3136、および B4096 があります。

DPU のたたみ込みアーキテクチャには、ピクセル並列度、入力チャネル並列度、出力チャネル並列度の 3 つの次元の並列度があ

ります。入力チャネル並列度は、常に出力チャネル並列度と同じです (表 7 の channel_parallel と等価)。必要なプログラマブル ロ

ジック リソースは、アーキテクチャによって異なります。大規模なアーキテクチャの方が性能は高くなりますが、使用するリソース量も

多くなります。次の表に、各アーキテクチャの並列度を示します。

表 8: 各たたみ込みアーキテクチャの並列度

たたみ込み

アーキテクチャ ピクセル並列度 (PP)

入力チャネル並列度

(ICP)

出力チャネル並列度

(OCP)

ピーク OPS

(1 クロックあたりの演算

実行回数)

B512 4 8 8 512

B800 4 10 10 800

B1024 8 8 8 1024

B1152 4 12 12 1150

B1600 8 10 10 1600

B2304 8 12 12 2304

B3136 8 14 14 3136

B4096 8 16 16 4096

注記:

1. たたみ込みアレイは、1 クロック サイクルで乗算と累算を実行します。これらは 2 つの演算としてカウントされます。したがって、ピーク

OPS = PP*ICP*OCP*2 です。

[RAM Usage]

重み、バイアス、および中間の各機能は、オンチップ メモリにバッファーされます。オンチップ メモリは RAM で構成され、BRAM および

UltraRAM としてインスタンシエートできます。[RAM Usage] で、DPU アーキテクチャで使用されるオンチップ メモリの合計を指定しま

す。ここでの設定は DPU IP 内のすべての DPU コアに適用されます。[RAM Usage] を [High] に設定すると、オンチップ メモリ ブロック

が大きくなり、DPU は中間データをより柔軟に処理できるようになります。また、この設定により各 DPU コアのパフォーマンスがより高くな

ります。次の表に、各アーキテクチャで使用される BRAM36K ブロックの数を、[RAM Usage] が [Low] と [High] の場合に分けて示しま

す。

DPU 命令セットは、[RAM Usage] の設定ごとに異なります。[RAM Usage] の設定を変更した場合、それに応じて DPU 命令ファイルを再

生成する必要があります。結果は、[DepthwiseConv] を有効にした DPU を使用した場合のものです。

第 3 章: DPU のコンフィギュレーション

DPU IP 製品ガイド japan.xilinx.com 22

PG338 (v3.0) 2019 年 8 月 13 日

表 9: 各 DPU コアで使用される BRAM36K ブロックの数 (DPU アーキテクチャ別)

DPU アーキテクチャ [RAM Usage] = [Low] [RAM Usage] = [High]

B512 (4x8x8) 73.5 89.5

B800 (4x10x10) 91.5 109.5

B1024 (8x8x8) 105.5 137.5

B1152 (4x12x12) 123 145

B1600 (8x10x10) 127.5 163.5

B2304 (8x12x12) 167 211

B3136 (8x14x14) 210 262

B4096 (8x16x16) 257 317.5

[Channel Augmentation]

チャネル拡張は、使用可能なチャネル並列度をはるかに下回る数の入力チャネルを処理する場合に、DPU の効率を向上させるために

使用するオプション機能です。たとえば、ほとんどの CNN の最初のレイヤーの入力チャネルは 3 つであり、使用可能なすべてのハード

ウェア チャネルを完全に利用していません。ただし、入力チャネルの数がチャネル並列度よりも多い場合、チャネル拡張を有効にしても

違いはありません。

つまり、チャネル拡張を有効にすると、ほとんどの CNN において全体的な効率を向上させることができますが、追加のロジック リソースが

必要となります。次の表に、チャネル拡張で使用される追加の LUT リソースを示します。この統計は参照用です。

表 10: チャネル拡張を有効にした DPU で必要となる追加の LUT 数

DPU アーキテクチャ チャネル拡張を有効にした場合に必要となる追加の LUT 数

B1024 (8x8x8) 2670

B1152 (4x12x12) 2189

B4096 (8x16x16) 1550

B512 (4x8x8) 1475

B800 (4x10x10) 2796

B1600 (8x10x10) 2832

B2304 (8x12x12) 1697

B3136 (8x14x14) 1899

[DepthwiseConv]

標準のたたみ込みでは、各入力チャネルは特定の 1 つのカーネルで演算を実行する必要があり、結果は、すべてのチャネルの結

果を合計したものとなります。

depthwise たたみ込みは、空間方向のたたみ込みとチャネル方向のたたみ込みという 2 つのステップで実行されます。次の図の左

側に示すように、空間方向のたたみ込みは各機能マップに対して個別に実行されます。次のステップでは、チャネル方向のたたみ

込みが実行されます。これは、カーネル サイズが 1x1 の標準のたたみ込みと同義です。depthwise たたみ込みの並列度は、ピクセ

ル並列度の半分となります。

第 3 章: DPU のコンフィギュレーション

DPU IP 製品ガイド japan.xilinx.com 23

PG338 (v3.0) 2019 年 8 月 13 日

12

12

3

5

5 11

1 8

83

Three 5×5×1

kernels

Intermediate

8×8×3 result

311

311

...

256 1×1×3

kernels

8

8

256

Final 8×8×256

result

Depthwise Convolution Pointwise Convolution

図 11: 空間方向のたたみ込みとチャネル方向のたたみ込み

[AveragePool]

[AveragePool] は、DPU で平均プーリングを実行するかどうかを指定します。サポートされるサイズの範囲は 2x2、3x3、…、8x8 で、

平方のサイズのみがサポートされます。

[ReLU Type]

[ReLU Type] は、DPU で使用可能な ReLU 関数を指定します。ReLU および ReLU6 ([ReLU + ReLU6]) がデフォルトでサポートさ

れています。

[ReLU + LeakyReLU + ReLU6] を指定すると、DPU では活性化関数の LeakyReLU に対して可能な係数に制限が生じる場合があ

ります。LeakyRelU 係数は 0.1 に固定されています。

[Softmax]

[Softmax] の設定により、softmax 関数をハードウェアに実装できます。softmax のハードウェア実装は、ソフトウェア実装よりも 160

倍高速です。softmax ハードウェア モジュールには、約 10,000 の LUT、4 つの BRAM、および 14 の DSP が必要です。このオプ

ションを有効にするかどうかは、使用可能なハードウェア リソースと必要なスループットによります。

softmax を有効にすると、SFM_M_AXI という AXI マスター インターフェイスと sfm_interrupt という割り込みポートが DPU IP に現れ

ます。softmax モジュールは、m_axi_dpu_aclk を SFM_M_AXI の AXI クロックとして、また演算用に使用します。softmax 関数は

Zynq-7000 デバイスではサポートされていません。

第 3 章: DPU のコンフィギュレーション

DPU IP 製品ガイド japan.xilinx.com 24

PG338 (v3.0) 2019 年 8 月 13 日

[Advanced] タブ

次の図に、DPU のコンフィギュレーションの [Advanced] タブを示します。

図 12: DPU のコンフィギュレーション – [Advanced] タブ

[S-AXI Clock Mode]

s_axi_aclk は S-AXI インターフェイス クロックです。[Common with M-AXI Clock] をオンにすると、s_axi_aclk は m_axi_aclk

と同じクロックを共有し、s_axi_aclk ポートは非表示になります。[Independent] をオンにすると、m_axi_aclk とは異なるクロックが供

給可能です。

[dpu_2x Clock Gating]

[dpu_2x Clock Gating] は、DPU の消費電力を削減するためのオプションです。このオプションを有効にすると、各 DPU コアに対して

dpu_2x_clk_ce というポートが現れます。dpu_2x_clk_ce ポートは、dpu_clk_wiz IP の clk_dsp_ce ポートに接続する必要

があります。DPU の演算エンジンがアイドル状態の場合、dpu_2x_clk_ce 信号によって dpu_2x_clk をシャットダウンできます。

dpu_clk_wiz IP で clk_dsp_ce ポートを生成するには、Clocking Wizard IP を特定のオプションを用いて設定する必要がありま

す。詳細は、「基準クロックの生成」を参照してください。[dpu_2x Clock Gating] は Zynq-7000 デバイスではサポートされていません。

[DSP48 Maximum Cascade Length]

[DSP48 Maximum Cascade Length] で、DSP48E スライス カスケード チェーンの最大長を設定できます。通常、カスケード チェーンを長

くするとロジック リソースの使用が抑えられますが、タイミングが悪化することがあります。カスケード チェーンを短くすると、より多くのハー

ドウェア リソースが必要となるため、小型のデバイスには適さない場合があります。最初は中間値の 4 を選択し、タイミングを満たすことが

できない場合は、反復により値を調整することを推奨します。

注記: [DSP48 Maximum Cascade Length] は Zynq-7000 デバイスではサポートされておらず、1 に固定されています。

第 3 章: DPU のコンフィギュレーション

DPU IP 製品ガイド japan.xilinx.com 25

PG338 (v3.0) 2019 年 8 月 13 日

[DSP48 Usage]

[DSP48 Usage] で、DPU たたみ込みモジュールの累算に DSP48E スライスを使用するかどうかを選択できます。DSP の使用量を最

小 [Low] に設定した場合、DPU IP はたたみ込みの乗算にのみ DSP スライスを使用します。DSP の使用量を最大 [High] に設定し

た場合は、乗算と累算の両方に DSP スライスが使用されます。この場合は DSP スライスの使用量が増え、LUT の使用量が減りま

す。次の表に、DSP の使用量を最大に設定した場合と最小に設定した場合のロジック使用量をそれぞれ示します。このデータは、

Depthwise Conv、Average Pooling、Channel Augmentation、および Leaky ReLU の機能を使用しない、ザイリンクス ZCU102 プラッ

トフォームの DPU に基づくものです。

表 11: DSP 使用量とリソースの関係

[Ultra-RAM Use per DPU]

Zynq® UltraScale+™ デバイスには、ブロック RAM と UltraRAM の 2 種類のオンチップ メモリ リソースがあります。各メモリ リソース量は

デバイスによって異なります。各 BRAM ブロックは、9b * 4096、18b * 2048、または 36b * 1024 として構成可能な 2 つの BRAM 18K ス

ライスからなります。UltraRAM の構成は 72b * 4096 に固定されています。DPU のメモリ ユニットの幅は ICP * 8 ビットで、深さ (ワード数)

は 2048 です。B1024 アーキテクチャの場合、ICP は 8 で、メモリ ユニットの幅は 8 * 8 ビットです。各メモリ ユニットは、1 つの UltraRAM

ブロックでインスタンシエートできます。ICP が 8 よりも大きい場合、DPU の各メモリ ユニットには少なくとも 2 つの UltraRAM ブロックが必

要です。

DPU は、デフォルトで BRAM をメモリ ユニットとして使用します。BRAM と UltraRAM の両方を含むターゲット デバイスの場合、[Ultra-

RAM User per DPU] で、一部の BRAM の置き換える UltraRAM の数を指定します。UltraRAM の数は、DPU のメモリ ユニットに必要な

UltraRAM の数の倍数に設定する必要があります。図 14 の [Summary] ページに、BRAM および UltraRAM の使用量の例を示しま

す。

[TIMESTAMP]

[Enable timestamp auto-update] を有効にすると、DPU は DPU プロジェクトが合成された時間を記録します。無効にすると、タイムスタン

プは最後の IP 更新時の値を保持します。タイムスタンプ情報は、DNNDK ツールを使用して取得できます。

注記: ほとんどの DPU コンフィギュレーション設定には、DNNDK ツールを使用してアクセスできます。次の図に、DNNDK ツールによっ

て読み出された情報を示します。

DSP 使用量 = 最大 DSP 使用量 = 最小

アー

キテク

チャ

LUT レジスタ BRAM DSP アーキ

テクチャ LUT レジスタ BRAM DSP

B512 20055 28849 69.5 98 B512 21171 33572 69.5 66

B800 21490 34561 87 142 B800 22900 33752 87 102

B1024 24349 46241 101.5 194 B1024 26341 49823 101.5 130

B1152 23527 46906 117.5 194 B1152 25250 49588 117.5 146

B1600 26728 56267 123 282 B1600 29270 60739 123 202

B2304 39562 67481 161.5 386 B2304 32684 72850 161.5 290

B3136 32190 79867 203.5 506 B3136 35797 86132 203.5 394

B4096 37266 92630 249.5 642 B4096 41412 99791 249.5 514

第 3 章: DPU のコンフィギュレーション

DPU IP 製品ガイド japan.xilinx.com 26

PG338 (v3.0) 2019 年 8 月 13 日

図 13: タイムスタンプの例

[Summary] タブ

[Summary] タブにコンフィギュレーション設定のサマリが表示されます。[Target Version] には、DPU 命令セットのバージョン番号が表示

されます。

図 14: DPU コンフィギュレーションの [Summary] タブ

第 3 章: DPU のコンフィギュレーション

DPU IP 製品ガイド japan.xilinx.com 27

PG338 (v3.0) 2019 年 8 月 13 日

各デバイスの DPU 性能

次の表に、各デバイスにおける DPU の論理上のピーク性能を示します。

表 12: 各デバイスにおける DPU の性能 (GOPS)

デバイス DPU の構成 周波数 (MHz) 論理上のピーク性能

(GOPS)

Z7020 B1152x1 200 230

ZU2 B1152x1 370 426

ZU3 B2304x1 370 852

ZU5 B4096x1 350 1400

ZU7EV B4096x2 330 2700

ZU9 B4096x3 333 4100

各モデルの性能

このセクションでは、一部のモデルの性能を参考として示します。次の表に示した結果は、ザイリンクス ZCU102 ボードと DNNDK v3.1 を

使用し、16 スレッドを使用する 3 つの B4096 コアを 287MHz で動作させて測定した値です。すべての精度には 8 ビット固定小数点の量

子化を使用しています。

表 13: 各モデルの性能

ネットワーク モデル ワークロード

(1 イメージあたり

の GOPS)

入力イメージ

解像度

精度 (DPU) フレーム レート (FPS)

Inception-v1 3.2 224*224 Top-1: 0.6954 452.4

ResNet50 7.7 224*224 Top-1: 0.7338 163.4

MobileNet_v2 0.6 299*299 Top-1: 0.6352 587.2

SSD_ADAS_VEHICLE1 6.3 480*360 mAP: 0.4190 306.2

SSD_ADAS_PEDESTRIAN1 5.9 640*360 mAP: 0.5850 279.2

SSD_MobileNet_v2 6.6 480*360 mAP: 0.2940 124.7

YOLO-V3-VOC 65.4 416*416 mAP: 0.8153 43.6

YOLO-V3_ADAS1 5.5 512*256 mAP: 0.5301 239.7

注記:

1. これらのモデルは、ザイリンクスのプルーニング ツールでプルーニングされています。

第 3 章: DPU のコンフィギュレーション

DPU IP 製品ガイド japan.xilinx.com 28

PG338 (v3.0) 2019 年 8 月 13 日

必要な I/O 帯域幅

複数のニューラル ネットワークが DPU で実行されている場合、必要な I/O 帯域幅は、現在 DPU で実行されているニューラル ネットワー

クによって異なります。また、同じニューラル ネットワークでも、レイヤーによって I/O 帯域幅の要件は異なります。1 つの DPU コアをフル

スピードで動作させ、いくつかのニューラル ネットワークで必要な I/O 帯域幅 (全レイヤーの平均値) をテストしました。次の表に、3 つの

ニューラル ネットワークで必要な I/O 帯域幅のピーク値と平均値を示します。この表には、よく使用される 2 つの DPU アーキテクチャ

(B1152、B4096) の数値のみを示しています。複数の DPU コアを並列に動作させた場合、I/O 帯域幅の制限により、各コアをフル スピー

ドで動作させることができなくなることがあります。

表 14: DPU-B1152 および DPU-B4096 で必要な I/O 帯域幅

ネットワーク モデル DPU-B1152 DPU-B4096

ピーク (MB/s) 平均 (MB/s) ピーク (MB/s) 平均 (MB/s)

Inception-v1 1704 890 4626 2474

ResNet50 2052 1017 5298 3132

SSD ADAS VEHICLE 1516 684 5724 2049

YOLO-V3-VOC 2076 986 6453 3290

1 つの DPU コアをフル スピードで動作させる必要がある場合は、ピーク I/O 帯域幅の要件を満たす必要があります。I/O 帯域幅は、主

に AXI マスター インターフェイス (DPU0_M_AXI_DATA0 および DPU0_M_AXI_DATA1) 経由でのデータ アクセスに使用します。

DPU IP 製品ガイド japan.xilinx.com 29

PG338 (v3.0) 2019 年 8 月 13 日

第 4 章: クロッキングとリセット

はじめに

DPU IP には 3 つのクロック ドメイン (レジスタ コンフィギュレーション モジュール、データ コントローラー、演算ユニット) があります。

3 つの入力クロックは、要件に応じて設定できます。したがって、3 つの入力クロックに対応するリセットを正しく設定する必要がありま

す。

クロック ドメイン

次の図に、3 つのクロック ドメインを示します。

PL

s_axi_aclk

DPU

Register Configuration

Data Controller

Computation Unit

m_axi_dpu_aclk

dpu_2x_aclk

X22334-022019

図 15: DPU のクロック ドメイン

レジスタ クロック

レジスタ コンフィギュレーション モジュールには、s_axi_aclk を使用します。このモジュールは、S_AXI インターフェイス経由で DPU

コンフィギュレーションを受信します。S_AXI クロックは、M-AXI クロックと共通するクロックまたは独立したクロックに設定できます。DPU

のコンフィギュレーション レジスタは非常に低速の周波数で更新され、これらレジスタのほとんどはタスク開始時に設定されます。M-AXI

は高周波数クロックとして使用され、ザイリンクスは S-AXI クロックを周波数 100MHz の独立したクロックとして設定することを推奨します。

第 4 章: クロッキングとリセット

DPU IP 製品ガイド japan.xilinx.com 30

PG338 (v3.0) 2019 年 8 月 13 日

データ コントローラー クロック

データ コントローラー モジュールの主な役割は、DPU IP のデータフローをスケジューリングすることです。データ コントローラー モ

ジュールは m_axi_dpu_aclk で動作します。DPU と外部メモリ間のデータ転送は、データ コントローラー クロック ドメインで実行されま

す。このため、m_axi_dpu_aclk は DPU IP の AXI_MM マスター インターフェイス用の AXI クロックでもあります。m_axi_dpu_aclk は

AXI_MM マスター クロックに接続する必要があります。

演算クロック

演算ユニット モジュールの DSP スライスは、データ コントローラー モジュールの 2 倍のクロック周波数の dpu_2x_clk ドメインで動作しま

す。また、これら 2 つの関連クロックはエッジが揃っている必要があります。

基準クロックの生成

DPU には 3 つの入力クロックがあります。dpu_2x_clk の周波数は m_axi_dpu_aclk の 2 倍にする必要があります。m_axi_dpu_aclk と

dpu_2x_clk は同期している必要があります。次に、推奨する回路デザインを示します。

MMCM

RST

CLKIN

CLKOUT

BUFGCE_DIV

CE

CLR

I

O

BUFGCE_DIV_CLK2_INST

dpu_clk_2x

BUFGCE_DIV

CE

CLR

I

O

BUFGCE_DIV_CLK1_INST

dpu_clk

clk_in1

resetn

X22335-022019

図 16: 推奨回路

この回路は、MMCM と 2 つの BUFGCE_DIV ブロックをインスタンシエートして作成できます。clk_in1 の周波数は任意で、MMCM の

出力クロック CLKOUT の周波数は、dpu_clk_2x と同じにする必要があります。BUFGCE_DIV_CLK1_INST は、CLKOUT の周波数を 2

で分周します。dpu_clk と dpu_clk_2x は同じクロックから生成されるため、同期クロックとなります。2 つの BUFGCE_DIV によって 2 つの

クロック間のスキューが減少し、タイミング クロージャが容易になります。

Clocking Wizard の設定

前述の回路は、Clocking Wizard IP をインスタンシエートして実装できます。このリファレンス デザインでは、s_axi_aclk の周波数は

100MHz に設定され、m_axi_dpu_aclk は 325MHz に設定されています。したがって、dpu_clk_2x の周波数は必要に応じて 650MHz に

設定する必要があります。次の図に、[Clocking Options] タブの推奨設定を示します。[Primitive] で [Auto] をオンにする必要がありま

す。

第 4 章: クロッキングとリセット

DPU IP 製品ガイド japan.xilinx.com 31

PG338 (v3.0) 2019 年 8 月 13 日

図 17: Clocking Wizard の [Clocking Options] の推奨設定

さらに、Clocking Wizard IP の [Output Clocks] で、m_axi_dpu_aclk と dpu_clk_2x の [Matched Routing] をオンにする必要があります。

[Matched Routing] をオンにすると、これら 2 つのクロックが BUFGCE_DIV を使用して生成され、クロック間のスキューが大幅に削減され

ます。次の図に、このコンフィギュレーションを示します。

図 18: Clocking Wizard の [Matched Routing]

第 4 章: クロッキングとリセット

DPU IP 製品ガイド japan.xilinx.com 32

PG338 (v3.0) 2019 年 8 月 13 日

dpu_2x_clk の CE を追加

[dpu_2x Clock Gating] オプションで、DPU の消費電力を削減できます。このオプションを有効にした場合、生成される clk_dsp の数と

DPU コアの数を同じにする必要があります。各 clk_dsp は、Clocking Wizard IP で CE 付きのバッファーとして設定する必要があります。

次の図に示すように、出力クロックが CE 付きとして設定されている場合、3 つの clk_dsp_ce が現れます。[dpu_2x Clock Gating] を有効

にするには、各 clk_dsp_ce ポートを DPU の対応する dpu_2x_clk_ce ポートに接続する必要があります。

図 19: Clocking Wizard でのバッファー CE の設定

Clocking Wizard での設定が完了したら、clock_dsp_ce を DPU の対応するポートに接続する必要があります。接続は次の図のようになり

ます。

図 20: クロック CE および DPU の接続

第 4 章: クロッキングとリセット

DPU IP 製品ガイド japan.xilinx.com 33

PG338 (v3.0) 2019 年 8 月 13 日

リセット

DPU IP には 3 つの入力クロックがあり、それぞれのクロックに対応するリセットがあります。各リセットは、対応するクロックに同期する必要

があります。クロックとリセットが同期していない場合、DPU は正しく動作しない可能性があります。同期リセット信号を生成するには、

Processor System Reset IP の使用を推奨します。次の図に、リファレンス デザインを示します。

図 21: リセットのリファレンス デザイン

DPU IP 製品ガイド japan.xilinx.com 34

PG338 (v3.0) 2019 年 8 月 13 日

第 5 章: 開発フロー

MPSoC でのコアのカスタマイズと生成

次の各セクションでは、Vivado® Design Suite で DPU IP を使用する開発フローについて説明します。

• DPU IP をリポジトリに追加する/DPU を以前のバージョンからアップグレードする

• DPU IP をブロック デザインに追加

• DPU パラメーターを設定する

• DPU のレジスタ アドレスを割り当てる

• ビットストリームを生成する

• BOOT.BIN の作成

• デバイス ツリー

DPU IP をリポジトリに追加する/DPU を以前のバージョンからアップグレードする

Vivado GUI で [Project Manager] の下にある [IP Catalog] をクリックします。IP カタログで右クリックして [Add Repository] (次の図を参照)

をクリックし、DPU IP の場所を選択します。

図 22: リポジトリへの追加

第 5 章: 開発フロー

DPU IP 製品ガイド japan.xilinx.com 35

PG338 (v3.0) 2019 年 8 月 13 日

DPU IP が IP カタログに表示されます。

図 23: リポジトリ内の DPU IP

既存のハードウェア プロジェクトに古いバージョンの DPU がある場合、最新バージョンにアップグレードする必要があります。次の手順を

実行します。

1. ブロック デザインおよび IP リポジトリ内にある古い DPU IP を削除します。

2. IP リポジトリに新しい DPU IP を追加します。

3. 新しい DPU IP をブロック デザインに追加します。

DPU IP をブロック デザインに追加

ブロック デザイン インターフェイスで DPU IP を検索し、DPU IP をブロック デザインに追加します。次の図に、この手順を示します。

図 24: DPU IP を検索

第 5 章: 開発フロー

DPU IP 製品ガイド japan.xilinx.com 36

PG338 (v3.0) 2019 年 8 月 13 日

図 25: DPU IP をブロック デザインに追加

DPU パラメーターを設定する

次の図に示すように、DPU IP を設定できます。パラメーターの詳細は、「第 3 章: DPU のコンフィギュレーション」を参照してください。

図 26: DPU を設定

第 5 章: 開発フロー

DPU IP 製品ガイド japan.xilinx.com 37

PG338 (v3.0) 2019 年 8 月 13 日

DPU をザイリンクス SoC のプロセッシング システムに接続する

DPU IP にはスレーブ インターフェイスが 1 つだけ含まれます。DPU コアの数は、パラメーター DPU_NUM により異なります。各 DPU コ

アには 3 つのマスター インターフェイス (命令フェッチ用に 1 つと、データ アクセス用に 2 つ) があります。

DPU が DDR メモリ空間に正しくアクセスできている限り、AXI Interconnection IP で DPU IP をプロセッシング システム (PS) に接続でき

ます。一般に、データが Interconnect IP を介して転送されると、データ トランザクションの遅延が大きくなります。Interconnect IP を介する

ことで発生する遅延により、DPU の性能が低下します。したがって、PS の AXI スレーブ ポートが十分にある場合、DPU の各マスター イ

ンターフェイスと PS の接続には AXI Interconnect IP を使用せず、直接接続することを推奨します。

DPU に対して PS の AXI スレーブ ポートが十分にない場合、AXI Interconnect IP を使用する必要があります。データ フェッチ用の 2 つ

の AXI マスター ポートは高帯域幅ポートであり、命令フェッチ用の AXI マスター ポートは低帯域幅ポートです。一般に、命令フェッチ

用のすべてのマスター ポートは 1 つのインターコネクトを介して PS の S_AXI_LPD に接続することを推奨します。残りのデータ フェッチ

用マスター ポートは、可能な限り PS に直接接続します。優先度の高い DPU コアのマスターポート (DPU0 などの小さい番号) を優先度

の高い PS のスレーブ ポート (S_AXI_HP0_FPD などの小さい番号) に直接接続することを推奨します。

たとえば、3 つの DPU コアと 1 つの SFM コアがある場合、7 つのマスター ポートと 4 つのスレーブ ポート (S_AXI_HP1 ~ 3 および

S_AXI_HPC0) があります。可能な接続のセットアップは次のとおりです。

• DPU0_DATA0 ~ HP1

• DPU0_DATA1 ~ HP2

• DPU1_DATA0 および DPU1_DATA1 ~ HP3

• DPU2_DATA0、DPU2_DATA1、および SFM ~ HPC0

ザイリンクスでは、DPU のスレーブ ポートを PS の M_AXI_HPM0_LPD に接続することを推奨しています。

次に、UltraScale+™ MPSoC の DPU と PS の推奨接続を示します。DPU コアの数は 3 に設定され、softmax 関数は有効です。

図 27: MPSoC の DPU と PS の接続

第 5 章: 開発フロー

DPU IP 製品ガイド japan.xilinx.com 38

PG338 (v3.0) 2019 年 8 月 13 日

DPU のレジスタ アドレスを割り当てる

DPU の接続が完了したら、次に AXI スレーブ インターフェイスのレジスタ アドレスを割り当てます。DPU には 16MB 以上の空間が必要

です。DPU スレーブ インターフェイスは、ホスト CPU からアクセス可能な任意の開始アドレスに割り当てることができます。

注記: DPU のベース アドレスは、16MB の範囲で設定する必要があります。デバイス ドライバーおよびデバイス ツリー ファイル内のアド

レスは、Vivado で割り当てられたアドレスと同じである必要があります。

次に、推奨する DPU のアドレスの割り当てを示します。

図 28: DPU のアドレスの割り当て

第 5 章: 開発フロー

DPU IP 製品ガイド japan.xilinx.com 39

PG338 (v3.0) 2019 年 8 月 13 日

ビットストリームを生成する

次に示すように、Vivado で [Generate Bitstream] をクリックします。

図 29: ビットストリームの生成

BOOT.BIN を生成する

BOOT.BIN ファイルは、Vivado SDK または PetaLinux を使用して生成できます。Vivado SDK を使用したブート イメージの作成方法

は、『Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル』 (UG1209: 英語版、日本語版) を参照してください。PetaLinux を

使用する場合は、『PetaLinux ツール資料: リファレンス ガイド』 (UG1144: 英語版、日本語版) を参照してください。

デバイス ツリー

DPU ドライバーが正しく動作するように、DPU デバイスは PetaLinux デバイス ツリーで正確に設定する必要があります。DPU 用の新しい

ノードを作成し、それを <plnx-proj-root>/project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi の下にある amba の子ノー

ドとして配置します。次の表に、DPU および softmax ノードに対するパラメーターをリストし、説明します。

次の図に、Zynq UltraScale+ MPSoC のデバイス ツリー設定の例を示します。

&amba {

...

dpu {

compatible = "xilinx,dpu";

base-addr = <0x8f000000>;//CHANGE THIS ACCORDING TO YOUR

DESIGN

dpucore {

compatible = "xilinx,dpucore";

interrupt-parent = <&intc>;

interrupts = <0x0 106 0x1 0x0 107 0x1>;

core-num = <0x2>;

};

};

softmax {

compatible = “xilinx, smfc”;

interrupt-parent = <&intc>;

interrupts = <0x0 110 0x1>;

core-num = <0x1>;

....

}

第 5 章: 開発フロー

DPU IP 製品ガイド japan.xilinx.com 40

PG338 (v3.0) 2019 年 8 月 13 日

次の表は、パラメーターについて説明しています。

表 15: デバイス ツリー フィールド

パラメーター 説明

dpu DPU デバイスのノード エントリ。変更する必要はありません。

dpu->compatible 「xilinx,dpu」に設定された固定値。

dpu->base-addr ハードウェア デザインで割り当てられた DPU ベース レジスタ アドレス。

dpucore->compatible 「xilinx,dpucore」に設定された固定値。

dpucore->interrupt-parent 割り込み制御デバイスを指定。

注記: Zynq-7000 デバイスの場合は「intc」、Zynq UltraScale+ デバイスの場合は

「gic」とします。

dpucore->interrupts DPU IP コアの割り込みコンフィギュレーション。各 DPU コアには 3 つのフィール

ドがあり、各フィールドの 2 番目の値は割り込み番号と一致します。割り込み番号

はハードウェア コンフィギュレーションと一致する必要があります。上記の例で

は、トリプレット「0x0 106 0x1」は割り込み番号 106 の DPU コア 0 に対応し、トリプ

レット「0x0 107 0x1」は割り込み番号 107 の DPU コア 1 に対応します。トリプレッ

ト「0x0」および「0x1」のその他 2 つの値は固定値であり、変更する必要はありませ

ん。

dpucore->core-num ハードウェア コンフィギュレーションで指定された DPU コアの数。

softmax->compatible 「xilinx, smfc」に設定された固定値。

softmax->interrupt-parent 割り込み制御デバイスを指定。

注記: Zynq-7000 デバイスの場合は「intc」、Zynq UltraScale+ デバイスの場合は

「gic」とします。

softmax->interrupts DPU の softmax の割り込みコンフィギュレーション。このフィールドの 2 番目の値

は、割り込み番号と一致します。割り込み番号はハードウェア コンフィギュレー

ションと一致する必要があります。上記の例では、トリプレット「0x0 110 0x1」は割り

込み番号 110 の softmax に対応します。トリプレット「0x0」および「0x1」のその他

2 つの値は固定値であり、変更する必要はありません。

softmax ->core-num softmax がハードウェア コンフィギュレーションでプロジェクトに追加される場合、

この値は「0x1」に固定されます。

デバイス ツリーの DPU 記述は、DPU ハードウェア プロジェクトのコンフィギュレーション、特に割り込みと常に一致している必要がありま

す。DPU プロジェクトで割り込みが変更されたら、それに応じてデバイス ツリーの記述を変更する必要があります。

第 5 章: 開発フロー

DPU IP 製品ガイド japan.xilinx.com 41

PG338 (v3.0) 2019 年 8 月 13 日

Zynq-7000 デバイスでのコアのカスタマイズおよび生成

最新の DPU は Zynq-7000 デバイス プロジェクトに統合できますが、次の制限があります。

1. DPU IP を Zynq-7000 デバイス プロジェクトに統合する場合、Zynq-7000 をターゲット デバイスに指定して、新しい Vivado プロジェ

クトを作成する必要があります。DPU を含む既存の Vivado プロジェクトのターゲット デバイスを Zynq UltraScale+ MPSoC から

Zynq-7000 に変更するだけでは機能しません。

2. softmax ハードウェア モジュールは Zynq-7000 デバイスではサポートされていません。softmax コアのオプションは 0 に設定されて

おり、変更できません。これは今後のリリースで変更される可能性があります。

Zynq-7000 のプロセッシング システム (PS) の AXI ポートの最大データ幅は 64 ビットです。DPU のデータ幅は 128 ビットから 64 ビットに

変更されます。AXI インターフェイスのデータ幅が変更された場合、それに応じて DNNC で命令ファイルを再生成する必要があります。

次の図に、Zynq-7000 デバイスの DPU のデフォルト設定を示します。

図 30: Zynq-7000 デバイスの DPU の設定

DPU IP 製品ガイド japan.xilinx.com 42

PG338 (v3.0) 2019 年 8 月 13 日

第 6 章: サンプル デザイン

はじめに

ザイリンクス DPU ターゲット リファレンス デザイン (TRD) は、ザイリンクス SoC プラットフォームで DPU を使用し、ディープ ニューラル

ネットワーク アプリケーションを構築および実行する方法を紹介するためのものです。TRD は Vivado® IP インテグレーター フローを使

用してハードウェア デザインをビルドし、ザイリンクス Yocto PetaLinux フローを使用してソフトウェア デザインをビルドします。この TRD

は、Zynq® UltraScale+™ MPSoC プラットフォームを使用して作成しています。Zynq-7000 SoC プラットフォームでも、同じフローで使用で

きます。TRD は、次のリンクから利用できます。

https://japan.xilinx.com/products/intellectual-property/dpu.html#overview

この章では、リファレンス デザインのアーキテクチャおよび各コンポーネントの機能について説明します。全体の構成は次のとおりです。

「DPU TRD の概要」では、Zynq UltraScale+ MPSoC デバイスのアーキテクチャ、リファレンス デザインのアーキテクチャ、および主な機

能の概要について説明します。

「ハードウェア デザイン フロー」では、ザイリンクス Vivado Design Suite を使用してリファレンス ハードウェア デザインを生成する方法に

ついて説明します。

「Softw ソフトウェア デザイン フロー」では、PetaLinux 環境でプロジェクトを作成するデザイン フローについて説明します。

「デモの実行」では、TRD で作成したアプリケーションの実行方法について説明します。

DPU TRD の概要

この TRD は、ザイリンクス Zynq UltraScale+ MPSoC デバイス上で一般的なディープ ニューラル ネットワーク モデルである Resnet50 を

実行し、イメージ分類アプリケーションを構築します。TRD の全体的な機能はプロセッシング システム (PS) とプログラマブル ロジック

(PL) に分割され、PL に DPU を置くことで性能の最適化を図っています。

次に、TRD のブロック図を示します。ホストは、イーサネットまたは UART ポートを介して ZCU102 ボードと通信します。TRD への入力イ

メージは、SD カードに格納します。TRD を実行すると、入力データが DDR メモリに読み込まれます。DPU は DDR メモリからデータを

読み出し、結果を DDR メモリに書き戻します。この結果は、APU からイーサネットまたは UART を介して転送され、ホストの画面に表示

されます。

Host: Linux/

Windows

UART/Ethernet

ZCU102 Board

PL

DDR Memory

PS

APU DPU

X23041-072519

図 31: DPU TRD の概要

第 6 章: サンプル デザイン

DPU IP 製品ガイド japan.xilinx.com 43

PG338 (v3.0) 2019 年 8 月 13 日

要件

TRD には次のものが必要です。

ターゲット プラットフォーム:

• ZCU102 評価ボード (プロダクション シリコン搭載)。『ZCU102 評価ボード ユーザー ガイド』 (UG1182) を参照してください。

ザイリンクス ツール:

• Vivado Design Suite 2019.1

• PetaLinux 2019.1

ハードウェア ペリフェラル:

• SD カード

• イーサネット

• UART

Linux または Windows ホスト システム:

• シリアル ターミナル

• ネットワーク ターミナル

デザイン ファイル

デザイン ファイルは、次のディレクトリ構造に格納されています。

Zcu102-dpu-trd-2019-1-v3.0

apu

apps

resnet50

dpu_petalinux_bsp

doc

images

BOOT.BIN

image.ub

resnet50

pl

const rs

pre-built

scripts

srcs

README.md

図 32: ディレクトリ構造

注記: DPU_IP は pl/srcs/dpu_ip/ ディレクトリにあります。

第 6 章: サンプル デザイン

DPU IP 製品ガイド japan.xilinx.com 44

PG338 (v3.0) 2019 年 8 月 13 日

ハードウェア デザイン フロー

このセクションでは、ザイリンクス Vivado® Design Suite を使用して DPU リファレンス デザイン プロジェクトを作成し、BIT ファイルを生成

する手順について説明します。リファレンス デザインの DPU IP は、パラメーターが適切に設定されています。DPU 割り込みの接続、お

よび DPU のアドレスは、リファレンス デザインのものを変更せず使用してください。これらの接続やアドレスを変更した場合、リファレンス

デザインが正しく動作しない可能性があります。

ボードのセットアップ

次の図に、ZCU102 ボードと各インターフェイスの位置を示します。

図 33: ZCU102 ボード

第 6 章: サンプル デザイン

DPU IP 製品ガイド japan.xilinx.com 45

PG338 (v3.0) 2019 年 8 月 13 日

ZCU102 ボードの設定

1. micro USB ケーブルを ZCU102 ボードの micro USB UART (J83) ポートに接続し、もう一方の端をホスト PC の空いている USB

ポートに接続します。このケーブルで、UART-over-USB 通信を実行します。

2. TRD イメージ ファイルの内容を書き込んだ SD カードを SD カード スロットに挿入します。

3. SD カードからブートするように、スイッチ SW6 を次のように設定します。

図 34: SD からのブート

4. 12V 電源を ZCU102 の 6 ピン Molex コネクタに接続します。

5. スイッチ SW1 をオンにして、ZCU102 ボードに電源を投入します。

プロジェクトのビルド フロー

このセクションでは、Vivado 2019.1 を使用してリファレンス Vivado プロジェクトをビルドする方法について説明します。Vivado 環境の

セットアップ方法は、『Vivado Design Suite ユーザー ガイド: 入門』 (UG910: 英語版、日本語版) を参照してください。

ハードウェア デザインをビルドするには、次の手順を実行します。

Linux でハードウェア デザインをビルドする場合

1. Linux ターミナルを開きます。

2. $TRD_HOME/pl ディレクトリへ移動します。

3. Vivado IP インテグレーター プロジェクトを作成し、次のコマンドを実行して GUI を起動します。

% vivado -source scripts/trd_prj.tcl

Windows でハードウェア デザインをビルドする場合

1. [スタート] → [すべてのプログラム] → [Xilinx Design Tools] → [Vivado 2019.1] → [Vivado 2019.1] をクリックします。

2. [Quick Start] ページで、[Tcl Console] をクリックします。

3. Tcl コンソールで次のコマンドを入力します。

cd $TRD_HOME/pl

source scripts/trd_prj.tcl

上記のスクリプトを実行すると、Vivado IP インテグレーターのブロック デザインが次のように表示されます。

第 6 章: サンプル デザイン

DPU IP 製品ガイド japan.xilinx.com 46

PG338 (v3.0) 2019 年 8 月 13 日

図 35: TRD のブロック デザイン

4. この GUI で [Generate Bitstream] をクリックすると、次のように BIT ファイルが生成されます。

図 36: ビットストリームの生成

第 6 章: サンプル デザイン

DPU IP 製品ガイド japan.xilinx.com 47

PG338 (v3.0) 2019 年 8 月 13 日

DPU のコンフィギュレーション

TRD に統合されている DPU IP のバージョンは、DPU_v3.0 です。

図 37: DPU の設定ページ

DPU のパラメーターは、リソース要件に応じて設定を変更できます。DPU パラメーターの詳細は、「第 3 章: DPU コンフィギュレーション」

を参照してください。

ソフトウェア デザイン フロー

このセクションでは、PetaLinux ツールを使用して BOOT.BIN を生成する方法を説明します。

PetaLinux デザイン フロー

PetaLinux のインストール

PetaLinux のインストール方法は、『PetaLinux ツール資料: リファレンス ガイド』 (UG1144: 英語版、日本語版) を参照してください。

PetaLinux 変数の設定

PetaLinux 環境変数 $PETALINUX を次のように設定します。

% source <path/to/petalinux-installer>/Petalinux-v2019.1/petalinux-v2019.1-

final/settings.sh

% echo $PETALINUX

% export TRD_HOME=<path/to/downloaded/zipfile>/zcu102-dpu-trd-2019-1

第 6 章: サンプル デザイン

DPU IP 製品ガイド japan.xilinx.com 48

PG338 (v3.0) 2019 年 8 月 13 日

PetaLinux プロジェクトのビルド

次のコマンドを実行して、PetaLinux プロジェクトを作成します。

% cd $TRD_HOME/apu/dpu_petalinux_bsp

% petalinux-create -t project -s xilinx-dpu-trd-zcu102-v2019.1.bsp

% cd zcu102-dpu-trd-2019-1

% petalinux-config ––get-hw-description=$TRD_HOME/pl/pre-built --silentconfig % petalinux-build

構築済みのデザインを使用する場合は、上記のコマンドで示したように、––get-hw-description の値を使用します。

新しく生成/変更されたデザインが必要な場合は、$TRD_HOME/pl/pre-built を $TRD_HOME/pl/prj/zcu102.sdk に変更しま

す。

BOOT.BIN の作成

次のコマンドを実行して、BOOT.BIN ファイルを作成します。

% cd images/linux

% petalinux-package --boot --fsbl zynqmp_fsbl.elf --u-boot u-boot.elf --pmufw pmufw.elf -

-fpga system.bit

デモの構築

このセクションでは、resnet50 サンプルをソースから構築する方法を説明します。$TRD_HOME/images の下にある構築済みの resnet50

を使用すれば、この手順をスキップできます。次の例では、5 つのスレッドを使用して分類タスクを実行します。DPU ランタイムにより、

ハードウェア デザインに従ってコアが自動的にスケジューリングされます。

1. まず、SDK を抽出します。

% cd $TRD_HOME/apu/apps

% ./sdk.sh -d ./sdk -y

$TRD_HOME/apu/apps の下にある生成済みの sdk.sh を使用するか、petalinux-build -s を使用すれば新しい

sdk.sh を生成できます。sdk.sh の実行中に「permission is denied」というエラー メッセージが表示された場合は、chmod 777

sdk.sh を実行して解決します。SDK が抽出されたら、新しいシェル セッションでこのデモを構築するたびに環境セットアップ スクリ

プトを実行します。

2. resnet50 サンプルを構築します。

% cd $TRD_HOME/apu/apps/resnet50

% make

新しく生成された resnet50 は $TRD_HOME/apu/apps/resnet50 ディレクトリに置かれます。

デモの実行

このセクションでは、TRD によって生成された実行ファイルを動作させる方法について説明します。UART を使用して ZCU102 ボードに

接続します。ZCU102 ボードのログイン/パスワードは root/root です。

次の手順でデモを実行します。

1. BOOT.BIN ファイルを生成したら、BOOT.BIN と image/linux フォルダーにある image.ub を SD カードにコピーします。

2. $TRD_HOME/images の resnet50 ディレクトリを SD カードにコピーします。

3. $TRD_HOME/images/resnet50 にある構築済みの resnet50 を使用するか、$TRD_HOME/apu/apps/resnet50/build/

にある新しく生成された resnet50 を SD カードの resnet50 ディレクトリにコピーします。

4. SD カードを ZCU102 に挿入し、ボードを起動します。Linux ブート後、次を実行します。

% cd /media/card/resnet50/

% ./resnet50

第 6 章: サンプル デザイン

DPU IP 製品ガイド japan.xilinx.com 49

PG338 (v3.0) 2019 年 8 月 13 日

次の図に、スクリーンショットを示します。

「Load image」で始まる行に入力イメージ ファイル名が表示され、これらは入力イメージの予想結果でもあります。その下には DPU による

推論結果が表示されます。ここでは、最も確率の高い結果の上位 5 つが表示されます。ロードされたイメージ ファイル名が、ほとんどの

結果において確率の高い上位 5 つの推論結果のいずれかに近ければ、DPU は適切に動作しています。

図 38: 実行結果

DPU IP 製品ガイド japan.xilinx.com 50

PG338 (v3.0) 2019 年 8 月 13 日

付録 A: その他のリソースおよび法的通知

ザイリンクス リソース

アンサー、資料、ダウンロード、フォーラムなどのサポート リソースは、ザイリンクス サポート サイトを参照してください。

参考資料

次の資料は、この製品ガイドの補足資料として役立ちます。日本語版のバージョンは、英語版より古い場合があります。

1. 『DNNDK ユーザー ガイド』 (UG1327: 英語版、日本語版)

2. 『Zynq UltraScale+ MPSoC: エンベデッド デザイン チュートリアル』 (UG1209: 英語版、日本語版)

3. 『PetaLinux ツール資料: リファレンス ガイド』 (UG1144: 英語版、日本語版)

4. 『ZCU102 評価ボード ユーザー ガイド』 (UG1182)

お読みください: 重要な法的通知 本通知に基づいて貴殿または貴社 (本通知の被通知者が個人の場合には「貴殿」、法人その他の団体の場合には「貴社」。以下同じ) に開示される情報

(以下「本情報」といいます) は、ザイリンクスの製品を選択および使用することのためにのみ提供されます。適用される法律が許容する最大限の範囲で、

(1) 本情報は「現状有姿」、およびすべて受領者の責任で (with all faults) という状態で提供され、ザイリンクスは、本通知をもって、明示、黙示、法定を問

わず (商品性、非侵害、特定目的適合性の保証を含みますがこれらに限られません)、すべての保証および条件を負わない (否認する) ものとします。ま

た、(2) ザイリンクスは、本情報 (貴殿または貴社による本情報の使用を含む) に関係し、起因し、関連する、いかなる種類・性質の損失または損害につい

ても、責任を負わない (契約上、不法行為上 (過失の場合を含む)、その他のいかなる責任の法理によるかを問わない) ものとし、当該損失または損害に

は、直接、間接、特別、付随的、結果的な損失または損害 (第三者が起こした行為の結果被った、データ、利益、業務上の信用の損失、その他あらゆる

種類の損失や損害を含みます) が含まれるものとし、それは、たとえ当該損害や損失が合理的に予見可能であったり、ザイリンクスがそれらの可能性につ

いて助言を受けていた場合であったとしても同様です。ザイリンクスは、本情報に含まれるいかなる誤りも訂正する義務を負わず、本情報または製品仕様

のアップデートを貴殿または貴社に知らせる義務も負いません。事前の書面による同意のない限り、貴殿または貴社は本情報を再生産、変更、頒布、ま

たは公に展示してはなりません。一定の製品は、ザイリンクスの限定的保証の諸条件に従うこととなるので、https://japan.xilinx.com/legal.htm#tos で見られ

るザイリンクスの販売条件を参照してください。IP コアは、ザイリンクスが貴殿または貴社に付与したライセンスに含まれる保証と補助的条件に従うことにな

ります。ザイリンクスの製品は、フェイルセーフとして、または、フェイルセーフの動作を要求するアプリケーションに使用するために、設計されたり意図され

たりしていません。そのような重大なアプリケーションにザイリンクスの製品を使用する場合のリスクと責任は、貴殿または貴社が単独で負うものです。

https://japan.xilinx.com/legal.htm#tos で見られるザイリンクスの販売条件を参照してください。

自動車用のアプリケーションの免責条項

オートモーティブ製品 (製品番号に「XA」が含まれる) は、ISO 26262 自動車用機能安全規格に従った安全コンセプトまたは余剰性の機能 (「セーフティ

設計」) がない限り、エアバッグの展開における使用または車両の制御に影響するアプリケーション (「セーフティ アプリケーション」) における使用は保証

されていません。顧客は、製品を組み込むすべてのシステムについて、その使用前または提供前に安全を目的として十分なテストを行うものとします。

セーフティ設計なしにセーフティ アプリケーションで製品を使用するリスクはすべて顧客が負い、製品の責任の制限を規定する適用法令および規則にの

み従うものとします。

© Copyright 2019 Xilinx, Inc. Xilinx、Xilinx のロゴ、Alveo、Artix、Kintex、Spartan、Versal、Virtex、Zynq、およびこの文書に含まれるその他の指定され

たブランドは、米国およびその他各国のザイリンクス社の商標です。AMBA、AMBA Designer、Arm、ARM1176JZ-S、CoreSight、Cortex、PrimeCell、

Mali、MPCore は EU およびその他各国の Arm Limited の登録商標です。PCI、PCIe、および PCI Express は PCI-SIG の商標であり、ライセンスに基づ

いて使用されています。すべてのその他の商標は、それぞれの保有者に帰属します。

この資料に関するフィードバックおよびリンクなどの問題につきましては、[email protected] まで、または各ページの右下にある [フィード

バック送信] ボタンをクリックすると表示されるフォームからお知らせください。フィードバックは日本語で入力可能です。いただきましたご意見を参考に早

急に対応させていただきます。なお、このメール アドレスへのお問い合わせは受け付けておりません。あらかじめご了承ください。