UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド...

65
UltraFast 高生産性設計 手法ガ イ ド UG1197 (v2019.2) 2020 1 6 この資料は表記のバージョンの英語版を翻訳したもので、内容に相違が生じる場合には原文を優先します。資料に よっては英語版の更新に対応していないものがあります。日本語版は参考用としてご使用の上、最新情報につきまし ては、必ず最新英語版をご参照ください。

Transcript of UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド...

Page 1: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

UltraFast 高生産性設計手法ガイド

UG1197 (v2019.2) 2020 年 1 月 6 日

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

Page 2: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

UltraFast 高生産性設計手法ガイド 2UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

改訂履歴

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

セクシ ョ ン 改訂内容

2020 年 1 月 6 日 バージョ ン 2019.2

資料全体 図をア ッ プデー ト 。

2019 年 5 月 22 日 バージョ ン 2019.1

「Vivado HLS のデザイ ン フ ロー」 Vivado HLS のデザイ ン フ ロー図をア ッ プデー ト 。

Page 3: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

目次

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

第 1 章: 高生産性設計手法こ のガイ ド について . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

新しい設計手法の必要性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

設計プロセス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

資料および ト レーニングへのア ク セス . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

第 2 章: システム デザイン概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

システムの分割 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

システム開発 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

第 3 章: シェル開発概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

シェル デザイ ン . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

シェルの検証 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

第 4 章: C ベース IP の開発概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

高速 C 検証 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

合成の C 言語サポー ト . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

ハード ウ ェア最適化済み C ラ イブラ リ の使用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Vivado HLS の理解 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

最適化手法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

最適化ス ト ラ テジ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

RTL 検証 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

IP パッ ケージ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

デザイ ン解析および最適化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

第 5 章: システム統合概要 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

初期システム統合 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

システム統合の自動化 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

将来のための設計 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

付録 A: その他のリソースおよび法的通知ザイ リ ン ク ス リ ソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

ソ リ ューシ ョ ン セン ター . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

Documentation Navigator およびデザイ ン ハブ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63

参考資料 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

UltraFast 高生産性設計手法ガイド 3UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 4: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

ト レーニング リ ソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

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

UltraFast 高生産性設計手法ガイド 4UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 5: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 1 章

高生産性設計手法

このガイドについて

ザイ リ ン ク スのプロ グ ラ マブル デバイ スには、 数百万ものロ ジ ッ ク セル (LC) が含まれてお り 、 近年市場を伸ばし続

けている複雑な電子システムが統合されています。 高生産性設計手法は、 こ のよ う な複雑なシステムを短いデザイ ン

サイ クルで作成でき る よ う にするためのベス ト プラ ク テ ィ ス を提供し ます。

この設計手法には、 次の特徴があ り ます。

• 市場で製品を差別化する付加価値の高いカ ス タ ム ロジ ッ ク と、 カス タ ム ロ ジ ッ ク をエコ システムの残 り の部分

に統合するのに使用される シェルを同時に開発する並列開発フ ローを使用。

• カ ス タ ム ロ ジ ッ ク の開発に C ベースの IP 開発フ ローを使用し、 シ ミ ュ レーシ ョ ンを RTL シ ミ ュ レーシ ョ ン よ

り も数桁倍高速に実行可能、 正確にタ イ ミ ング制約され最適化された RTL を提供。

• 既存の検証済み、 ブロ ッ ク、 およびコ ンポーネン ト レベル IP を使用し て、 システムにカ ス タ ム ロ ジ ッ ク を組

み込むシェルを短期間で構築。

• デザイ ンの検証から FPGA のプロ グ ラ ム まで、 ス ク リ プ ト を使用し てフ ローを大幅に自動化。

このガイ ド に含まれる推奨事項は、 過去数年にわた り 多数の上級ユーザーから収集された ものです。 これらの推奨

事項に従 う こ と によ り 、 従来の RTL 設計手法 と比較し て、 次の向上が見られます。

• デザイ ンの開発期間を 1/4 に短縮。

• 派生デザイ ンの開発期間を 1/10 に短縮。

• QoR (結果の品質) を 0.7 ~ 1.2 倍向上。

こ のガ イ ド では大型の複雑なデザ イ ンに焦点を置いていますが、 説明 さ れてい る プ ラ ク テ ィ スは、 次を含むすべ

ての タ イ プのデザ イ ンに適し てお り 、 う ま く 適用 さ れています。

• DSP デジ タル信号処理:

° イ メ ージ処理

° ビデオ

° レーダー

• オー ト モーテ ィ ブ

• プロセ ッ サ ア ク セラ レーシ ョ ン

• ワ イヤレ ス

• ス ト レージ

• 制御システム

UltraFast 高生産性設計手法ガイド 5UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 6: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 1 章: 高生産性設計手法

新しい設計手法の必要性

近年複雑さ を増し続ける電子製品で使用される高度なデザイ ンによ り 、 集積度、 パフ ォーマン ス、 消費電力の限界

が押し上げられています。 そのため、 割 り 当て られた予算内で目標の時期に製品を リ リ ースするのは簡単な こ と で

はあ り ません。

これらのデザイ ンの課題に対処する高生産性設計手法は、 高速検証を実行可能な抽象度の高い段階で時間をかける

こ と によ り 、 生産性を最大限に向上し ます。

新しい設計手法の必要性を次の図に示し ます。 各領域のサイ ズは、 デザイ ン フ ローの各段階で費やす開発エフ ォー

ト の割合を表し ます。

• 従来の RTL 設計手法では、 開発エフ ォー ト のほ と んどがイ ンプ リ メ ンテーシ ョ ンの段階で費やされます。

• 高生産性設計手法では、 開発エフ ォー ト のほ と んどは正しいシステムを構築する ための設計および検証に費や

されます。

X-Ref Target - Figure 1-1

図 1-1: 従来の設計手法と高生産性設計手法の比較

RTL

UltraFast 高生産性設計手法ガイド 6UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 7: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 1 章: 高生産性設計手法

従来の設計手法

従来のデザイ ン開発では、 経験のあ る設計者がデザイ ンを新しいテ ク ノ ロ ジにどのよ う にイ ンプ リ メ ン ト するかを

見積も り 、 デザイ ンを レジス タ ト ラ ン ス フ ァー レベル (RTL) で記述し、 合成および配置配線を何回か試し て見積も

り を確認し た後、 デザイ ンの残 り の部分に進みます。 これには通常、 各ブロ ッ ク を順に合成し、 イ ンプ リ メ ンテー

シ ョ ンの詳細が許容でき る ものであ るかど う かを確認し ます。

デザイ ンが意図し た よ う に機能するかを確認する主な方法は、 RTL シ ミ ュ レーシ ョ ンです。 RTL 記述は詳細なビ ッ

ト 精度およびサイ クル精度であ り 、 精度は非常に高いですが、 そのためこのプロセスには時間がかか り 、 エラーが

発生しやす く な り ます。

デザイ ンのすべてのブロ ッ ク が RTL で記述されてからでない と システムの完全な検証は実行できず、 通常は RTL の

変更が必要 と な り ます。 システム内のすべてのブロ ッ ク が検証された後、 それら を共に配置配線し てからでない と、

初期のタ イ ミ ングおよびエ リ ア見積も り が正しいか正し く ないかはわか り ません。 RTL の変更が必要と な る こ と も

多 く 、 そのたびにシステムを再度検証およびイ ンプ リ メ ンテーシ ョ ンする必要があ り ます。

通常 1 つのプロ ジェ ク ト で数十万行の RTL のコード を イ ンプ リ メ ン ト する必要があ り 、 開発の多 く の時間はイ ンプ

リ メ ンテーシ ョ ンに費やされます。 図 1-1 に示すよ う に、 製品の競争力を維持するために必要な新しい革新的な ソ

リ ューシ ョ ンを設計する代わ り に、 デザイ ンのイ ンプ リ メ ンテーシ ョ ンに大部分の時間が使用されます。

新しいテ ク ノ ロ ジに移行し てパフ ォーマン ス を向上し た り 、 低速のテ ク ノ ロ ジに移行し て価格を下げた り するには、

RTL の大部分を記述し直すこ と になるのがほ と んどで、 レジス タ間のロ ジ ッ ク の多 く を再イ ンプ リ メ ン ト する こ と

にな り ます。

高生産性設計手法

高生産性設計手法でも、 図 1-1 に示すよ う に、 従来の RTL 設計手法 と基本的には同じ手順を使用し ますが、 付加価値

の高いソ リ ューシ ョ ンの設計に多 く の時間が費やされます。 高生産性設計手法には、 次の特徴があ り ます。

• シェル と い う 概念を使用し、 カ ス タ ム ロジ ッ ク と、 I/O ペ リ フ ェ ラルおよびイ ン ターフ ェ イ ス を、 別のデザイ

ン プロ ジェ ク ト と し て並列に開発および検証。

• C ベースの IP シ ミ ュ レーシ ョ ンを使用し、 従来の RTL シ ミ ュ レーシ ョ ン と比較し てシ ミ ュ レーシ ョ ン時間を数

桁短縮し、 理想的な ソ リ ューシ ョ ンを設計する こ と に時間をかける こ と が可能 。

• ザイ リ ン ク ス Vivado® Design Suite で、 C ベースの IP 開発、 IP 再利用、 および標準イ ン ターフ ェ イ ス を使用する

こ と によ り 、 タ イ ミ ング ク ロージ ャ を達成する ためのプロセス を大幅に自動化。

° 独自のブロ ッ クおよびコ ンポーネン ト レベルの IP を簡単に再利用した り 、 テ ク ノ ロジで効率的にイ ンプ リ

メ ン ト される こ と がわかっている検証済みのザイ リ ン ク ス IP にア ク セスするため Vivado IP カ タ ログを活用。

高生産性設計手法のすべての手順は、 イ ン タ ラ ク テ ィ ブに実行するか、 コマン ド ラ イ ン ス ク リ プ ト を使用し て実行

でき ます。 手動の操作はすべてス ク リ プ ト に保存可能で、 デザイ ンのシ ミ ュ レーシ ョ ンから FPGA のプロ グ ラ ム ま

で、 フ ロー全体を完全に自動化する こ と が可能です。 デザイ ンおよび RTL システム レベル シ ミ ュ レーシ ョ ンの実行

時間によ っては、 RTL デザイ ン シ ミ ュ レーシ ョ ンを実行し ている間に、 このフ ローで FPGA ビ ッ ト ス ト リ ームを生

成し てデザイ ンをボード上でテス ト する こ と も可能です。

派生デザイ ンを作成する場合は、 さ ら に生産性が高 く な り ます。 C ベースの IP は、 異な るデバイ ス、 テ ク ノ ロ ジ、

ク ロ ッ ク速度に、 ツール オプシ ョ ンを変更するの と 同じ く らい簡単に移行でき ます。 C 合成によ る自動タ イ ミ ング

ク ロージ ャ を含む完全にス ク リ プ ト 化されたフ ローを使用する と 、 派生デザイ ンをすばや く 検証し てアセンブルで

き ます。

UltraFast 高生産性設計手法ガイド 7UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 8: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 1 章: 高生産性設計手法

設計プロセス

次の図に、 設計プロセスの手順を示し ます。

このデザイ ン フ ローでは、 第 2 章 「システム デザイ ン」 に説明されている システムを分割する初期段階の後は、 複

数の手順が並行し て実行されます。

• シェル開発フ ロー : Vivado IP イ ンテグレーターおよび IP カ タ ロ グを使用する こ と によ り 、 Vivado Design Suite で

高速で効率的なブロ ッ ク レベルの統合が可能です。 詳細な指向性イ ン ターフ ェ イ スの作成、 検証、 ピン プラ ン

ニングを含むシステム パフ ォーマン スの重要な側面の多 く は、 並列開発されます。 こ のフ ローについては、

第 3 章 「シェル開発」 で説明し ています。

• C ベース IP の開発: RTL シ ミ ュ レーシ ョ ンを使用する と、 デザイ ン、 ホス ト マシンなどによ って、 ビデオのフ

ル フ レームをシ ミ ュ レーシ ョ ンするのに 1 ~ 2 日かか り ます。 C/C++ を使用する と、 同じ ビ ッ ト レベル精度シ

ミ ュ レーシ ョ ンを実行するのにかかる時間は約 10 秒です。 C ベース開発フ ローの生産性における利点は、 無視

でき ません。 このフ ローについては、 第 4 章 「C ベース IP の開発」 で説明し ています。

• システム作成: Vivado IP イ ンテグレーターおよび IP カ タ ロ グによ り 、 シェル デザイ ン、 レガシ RTL IP、 System

Generator IP、 およびザイ リ ン ク ス IP を使用するシステム ブロ ッ ク デザイ ンに、 C ベース IP をすばや く 結合でき

ます。 自動イ ン ターフ ェ イ ス接続やシステム作成のス ク リ プ ト 化によ り 、 IP 開発プロセス全体を通してシステム

をすばや く 生成および再生成でき ます。 このフ ローについては、 第 5 章 「システム統合」 で説明しています。

• システム イ ンプ リ メ ンテーシ ョ ン: 検証済みのシェル デザイ ン、 デバイ スおよびク ロ ッ ク周波数に自動的に最

適化された C ベース IP、 既存の検証済み IP を使用する こ と によ り (IP はすべて業界標準の Arm AMBA® AXI4

プロ ト コルに準拠し た イ ン ターフ ェ イ スで接続)、 デザイ ン ク ロージ ャにかかる時間を最小限に抑える こ と がで

き ます。 このフ ローは、 システム ブロ ッ ク デザイ ンから数回のク リ ッ ク で起動するか、 またはス ク リ プ ト 化さ

れたフ ローを使用し て起動でき ます。 このフ ローについては、 第 5 章 「システム統合」 で説明し ています。

• システム検証: ゲー ト レベル精度 RTL シ ミ ュ レーシ ョ ンを使用するか、 FPGA をプロ グ ラ ム し てデザイ ンを

ボード で検証する こ と によ り 実行し ます。 RTL シ ミ ュ レーシ ョ ンは、 システムを検証する ためのもので、 開発

中にデザイ ンを検証するための反復シ ミ ュ レーシ ョ ンではないので、 デザイ ン フ ローの最後に 1 回だけ実行し

ます。 このフ ローについては、 第 5 章 「システム統合」 で説明し ています。

X-Ref Target - Figure 1-2

図 1-2: 高生産性デザイン フロー

C IP

C IPSystem Generator IPRTL IP

IP

UltraFast 高生産性設計手法ガイド 8UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 9: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 1 章: 高生産性設計手法

資料およびト レーニングへのアクセス

デザイ ン ク ロージ ャの短時間での達成およびデザイ ンの総合的な成功のためには、 適切な情報にタ イ ム リ ーにア ク

セスでき る こ と が重要です。 Vivado Design Suite を使用し た設計方法を短期間で理解でき る よ う にするため、 リ フ ァ

レ ン ス ガイ ド、 ユーザー ガイ ド、 チュー ト リ アル、 ビデオが提供されています。 このセ ク シ ョ ンでは、 資料および

ト レーニングの入手先を示し ます。

Documentation Navigator の使用 注記: Documentation Navigator では、 現在の と こ ろ日本語版 リ ソースはサポー ト されていません。

Vivado Design Suite にはザイ リ ン ク ス Documentation Navigator (図 1-3) が含まれてお り 、ザイ リ ン ク ス ソ フ ト ウ ェアお

よびハード ウ ェ ア資料、 ト レーニング、 サポー ト 資料にア ク セス し、 管理する環境を提供し ています。

Documentation Navigator を使用する と、 最新および以前のバージ ョ ンのザイ リ ン ク ス資料を参照でき ます。 リ リ ー

ス、 資料タ イプ、 またはデザイ ン タ ス ク に基づいて資料をフ ィ ルター表示でき ます。 検索機能を使用する と、 必要

な情報をすばや く 見つける こ と ができ ます。 [Document Types] の下にフ ィ ルター オプシ ョ ンの 1 つと し て

[Methodology Guides] (設計手法ガイ ド ) が表示されてお り 、 設計手法ガ イ ド に即座にア ク セスでき ます。

Documentation Navigator で [Update Catalog] を ク リ ッ クする と、 最新の資料が表示されます。 カ タ ロ グがア ッ プデー

ト されている場合はそれが通知され、 関連する資料の詳細が示されます。 カ タ ロ グを最新にする よ う メ ッ セージが

表示された場合は、 カ タ ロ グをア ッ プデー ト し て資料を最新の状態にし てお く こ と をお勧めし ます。 また、 資料カ

タ ロ グを ローカルに作成し て特定の資料を管理する こ と もでき ます。

Documentation Navigator には、 [Design Hub View] と い う タブがあ り ます。 デザイ ン ハブには、 デザイ ン制約の適用、

合成、 イ ンプ リ メ ンテーシ ョ ン、 プロ グ ラ ムおよびデバッ グなど、 デザイ ンでの特定のタ ス クに関する資料が リ ス

ト されています。 資料およびビデオがそのタ ス ク を学びやすいよ う に並べられています。 各デザイ ン ハブには、

[Getting Started]、 [Support Resources] (そのフ ローに関し てよ く 寄せられる質問を リ ス ト )、 [Additional Learning

Materials] セ ク シ ョ ンがあ り ます。 新しいユーザーは、 まず [Getting Started] を参照する こ と をお勧めし ます。 既にフ

ローを理解し ている場合は、 [Key Concepts]、 [Frequently Asked Questions (FAQ)] などが Vivado Design Suite の理解を深

めるのに役立ちます。

UltraFast 高生産性設計手法ガイド 9UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 10: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 1 章: 高生産性設計手法

X-Ref Target - Figure 1-3

図 1-3: ザイリンクス Documentation Navigator

UltraFast 高生産性設計手法ガイド 10UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 11: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 2 章

システム デザイン

概要

プロ ジェ ク ト を開始する前に、 システムをどのよ う に設計し てアセンブルするかを明確に理解し てお く こ と が重要

です。 どのよ う な複雑なシステムでも、 ソ リ ューシ ョ ンには複数の道筋があ り ます。 これらの道筋は、 どの IP ブ

ロ ッ ク を最初から作成するか、 どの IP を再利用するか、 IP の検証、 IP のシステムへの統合、 およびシステムの検証

に使用する ツール と方法などのさ まざまな決定事項によ り 左右されます。

この章では、 システムの分割について説明し、 システム開発のプロセス を自動化するのに役立つ Vivado® Design

Suite の機能を示し ます。

• 「システムの分割」

• 「システム開発」

システムの分割

典型的なデザイ ンでは、 デザイ ンの周辺部にあ る ロ ジ ッ クは外部デバイ ス と のイ ン ターフ ェ イ ス専用であ り 、 通常

は標準イ ン ターフ ェ イ スが使用されます。 DDR、 ギガビ ッ ト イーサネ ッ ト 、 PCIe、 HDMI、 ADC/DAC、 および

Aurora イ ン ターフ ェ イ スなどがその例です。 これら を イ ンプ リ メ ン ト するのに使用される イ ン ターフ ェ イ スおよび

コ ンポーネン ト は、 同じ企業内の複数の FPGA デザイ ンに標準的な ものです。

高生産性設計手法では、 このロ ジ ッ ク をカ ス タ ム ロ ジ ッ ク から分離し、 シェル と考慮し ます。 次の図に、 シェル ブ

ロ ッ ク デザイ ンの例を示し ます。 こ の図の中央のグレーで示されるエ リ アは、 カス タ ム ロ ジ ッ ク またはシェル検証

IP を追加可能な部分を示し ます。

UltraFast 高生産性設計手法ガイド 11UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 12: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 2 章: システム デザイン

この設計手法の利点は次の とお り です。

• シェルは、 デザイ ンの残 り の部分から分離し て開発および検証されます。

• ボード レベルの統合およびデバイ ス ピン プラ ンニングは、 別の専門チームによ り 並列実行されます。

• シェルは保存および再利用され (再編集される場合も あ り )、 複数の派生デザイ ンをすばや く 構築でき ます。

• カ ス タ ム ロ ジ ッ クは、 シェル と は別に開発および検証されます。

• 検証済みのシェルおよびカ ス タ ム ロ ジ ッ クは、 システムにすばや く 統合されます。

システムを分割する際の最初のタ ス クは、 何をシェル と し て イ ンプ リ メ ン ト し、 何をカス タ ム ロ ジ ッ ク と し て イ ン

プ リ メ ン ト するかを決定する こ と です。

シェル デザイン

シェル デザイ ンには、 高生産性設計手法において、 次の 2 つの利点があ り ます。

• 標準イ ン ターフ ェ イ ス ロ ジ ッ ク をカス タ ム ロ ジ ッ ク から分離する こ と によ り 、 これら両方の開発および検証を

並列実行可能。

• 再利用可能なデザイ ン (シェル) を作成し、 派生デザイ ンの作成に使用可能。 シェルには、 理想的にはデザイ ン

イ ン ターフ ェ イ スやイ ン ターフ ェ イ ス IP など、 デザイ ンの標準部分のみを含めます。 ただし、 前処理または後

処理に使用可能なブロ ッ ク も含める こ と ができ ます。 処理機能がコ ア デザイ ン IP から独立し てお り 、 複数のデ

ザイ ンで使用でき る場合は、 これらのブロ ッ ク をシェルに含めるのが理想的です。 シェルの再利用によ り 、

シェルからブロ ッ ク を簡単に削除でき ます。

シェル デザイ ンに含める ロ ジ ッ ク にかかわらず、 シェル デザイ ンには内部デザイ ン IP に接続する内部イ ン ターフ ェ

イ ス を標準イ ン ターフ ェ イ ス を使用し て イ ンプ リ メ ン ト する必要があ り ます。 AXI などの標準内部イ ン ターフ ェ イ

ス を使用する と、 次を実行する こ と によ り シェルの再利用を さ らに向上でき ます。

X-Ref Target - Figure 2-1

図 2-1: シェル デザイン例

DifferentiatedLogic

DMA Engine

AXIInterconnect

Memory I/FGenerator

Tx Unit

AXIInterconnect HDMI

Tx

TimingController

AXI Streamto Video

Video ToAXI-

Stream

HDMIRx

Shell

RS232

DDR

Output

Input

X23582-120619

UltraFast 高生産性設計手法ガイド 12UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 13: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 2 章: システム デザイン

• シェルを まだ開発されていないデザイ ン IP に簡単に接続でき る よ う にする。

• シェルの検証によ り 内部イ ン ターフ ェ イ ス も検証される よ う にする。

• 「IP イ ンテグ レーターおよび標準イ ン ターフ ェ イ ス」 に説明されている高生産性統合機能を使用でき る よ う にする。

最初は 1 つのデザイ ンのみを考慮し ていた場合でも、 シェル ベースの設計手法によ り 、 初期デザイ ンがイ ンプ リ メ

ン ト された後に簡単に派生デザイ ンを作成でき ます。

シェルの開発および検証の詳細は、 第 3 章 「シェル開発」 を参照し て く ださい。

IP デザイン

IP 開発フ ローには、 製品をシェルから差別化する IP のみを含みます。

デザイ ン IP は標準的な ものではな く 、 開発し ます。 開発の多 く の労力は、 デザイ ンが正し く 機能する こ と を検証す

る シ ミ ュ レーシ ョ ンの実行に費やされます。 開発中の新機能に影響し ない標準ブロ ッ ク を含めないよ う にする こ と

によ り 、 この労力を最小限に抑えてシ ミ ュ レーシ ョ ン時間を短縮でき ます。 これらの標準ブロ ッ クは、 シェルに含

めます。

次の図に、 シェル デザイ ンにデザイ ン IP を追加し たシステムを示し ます。 完成し たシステムには、 次のよ う な さ ま

ざまな種類のソースから開発された IP が含まれる可能性があ り ます。

• Vivado HLS を使用し て C/C++ から生成された IP

• System Generator から生成された IP

• RTL からの IP

• ザイ リ ン ク ス IP

• サード パーテ ィ IP

X-Ref Target - Figure 2-2

図 2-2: システム デザイン例

Platform IP

RS232

DDR

Output

CBased

IP

U1

CBased

IP

U2

CBased

IP

U3

RTLIP

U4

XilinxIP

U8

CBased

IP

U6SysGenIP

U5

CBased

IP

U7

Input

U123

U67

Design IP

X23583-120619

UltraFast 高生産性設計手法ガイド 13UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 14: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 2 章: システム デザイン

高生産性設計手法の最大の利点は、 C シ ミ ュ レーシ ョ ンの検証速度にあ り ます。 デザイ ン作成の観点から見る と、

開発中に C ブロ ッ ク を一緒にシ ミ ュ レーシ ョ ンする こ と によ り 、 生産性が大幅に向上し ます。

• 高速 C シ ミ ュ レーシ ョ ンによ り 、 ソ リ ューシ ョ ンをすばや く 開発し て検証でき ます。

• 複数の C ブロ ッ ク を一緒にシ ミ ュ レーシ ョ ンする と、 各ブロ ッ ク でほかのブロ ッ ク の出力を検証するのに役立

ちます。

• C シ ミ ュ レーシ ョ ンで複数の C IP を結合する と、 生産性の利点が大き く な り ます。

図 2-2 では、 C IP を使用する場合に直面する可能性のあ る問題がハイ ラ イ ト されています。 ブロ ッ ク U1、 U2、 およ

び U3 はすべて C IP であ り 、 1 つの最上位 U123 にグループ化でき ます。 同様に、 ブロ ッ ク U6 および U7 も 1 つの IP

ブロ ッ ク U67 にグループ化でき ます。 次のいずれかを実行でき ます。

• U1、 U2、 U3、 U6、 U7 などの小型の C IP ブロ ッ ク を複数作成する。

• U123、 U67 などの大型の C IP ブロ ッ ク をい く つか作成する。

デザイ ン統合の観点から見る と、 これら 2 つの方法に違いはあ り ません。 IP ブロ ッ ク を AXI イ ン ターフ ェ イ スで生

成する と、 IP イ ンテグレーターを使用し て簡単に統合でき ます。 C ベース IP の開発に慣れていない場合は、 小型の

ブロ ッ ク で作業し、 各ブロ ッ ク を個別に最適化する方法を学んでから、 複数の小型 IP を統合する方が理にかなって

いるかも しれません。 C IP の開発に精通し ている場合は、 大型の C IP ブロ ッ ク をい く つか生成する方がよいかも し

れません。

重要: でき るだけ多 く の C IP ブロ ッ ク を 1 つのシ ミ ュ レーシ ョ ン と し てシ ミ ュ レーシ ョ ンする こ と によ り 、 生産性が

高 く な り ます。

上記の場合には、 U1、 U2、 および U3 を検証するの と同じ C テス ト ベンチを U123 を検証するのに使用し ます。 IP

生成における違いは、 Vivado HLS で C 合成の最上位をフ ァ ン ク シ ョ ン U123 と し て設定するか、 フ ァ ン ク シ ョ ン U1、

その後 U2、 最後に U3 と し て設定するかです。

IP ブロ ッ ク の作成にどち らの方法を使用し て も、 各 IP ブロ ッ ク を次のよ う に個別に検証する必要があ り ます。

• C/C++ で開発された IP は、 Vivado HLS の C/RTL 協調シ ミ ュ レーシ ョ ン機能を使用し て検証し、 C ベースの IP

を検証するのに使用されたの と同じ C テス ト ベンチを使用し て RTL を検証でき ます。

• System Generator で開発された IP は、 System Generator に含まれる MathWorks Simulink デザイ ン環境を使用し て

検証し ます。 Simulink 環境では、 複雑な入力ステ ィ ミ ュ ラ ス を簡単に生成でき、 定義済みのシ ミ ュ レーシ ョ ン

エレ メ ン ト を使用し て複雑な結果を解析でき ます。 C/C++ および従来の RTL から生成された IP は、 System

Generator 環境にイ ンポー ト し て こ の検証を活用でき ます。

• RTL から生成された IP は、 RTL テス ト ベンチを作成し て検証する必要があ り ます。

• ザイ リ ン ク スおよびサード パーテ ィ によ り 提供される IP は検証済みですが、 選択し たコ ンフ ィ ギュ レーシ ョ ン

パラ メ ーターに基づ く 動作を確認するためテス ト ベンチを作成する こ と をお勧めし ます。

IP に標準 AXI イ ン ターフ ェ イ ス を使用する こ と によ り 、 IP をほかの IP およびシェル デザイ ンにすばや く 統合でき

ます。

UltraFast 高生産性設計手法ガイド 14UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 15: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 2 章: システム デザイン

システム開発

シェルおよび複数の IP ブロ ッ ク を使用する こ と は FGPA 設計者に と って新しい概念ではあ り ませんが、 この設計手

法では通常多数の RTL を開発し てシ ミ ュ レーシ ョ ン し、 次の接続を確立するために何百もの RTL 信号を接続する必

要があ り ます。

• シェルから検証 IP

• シェルから コ ア デザイ ン IP

• シェルから派生コ ア デザイ ン IP

この方法を従来の RTL デザイ ン フ ローで使用し て設計および検証 (テキス ト エデ ィ ターで実行する と間違いを起こ

しやすい) にさ らに時間を費やす代わ り に、 通常デザイ ン チームがすべてを設計し て統合し ます。

Vivado IP イ ンテグレーターを使用する と、 従来のよ う に RTL フ ァ イルを手動で編集する こ と な く 、 この設計手法を

使用し て IP をすばや く 統合でき ます。

この設計手法で使用する主な機能は次の とお り です。

• Vivado IP カ タ ロ グ

• IP イ ンテグレーターおよび標準イ ン ターフ ェ イ ス

Vivado IP カタログ

Vivado IP カ タ ロ グは、 IP を使用および再利用する際の主要なツールです。 図 2-3 に、 高生産性設計手法のデザイ ン

プロセスで IP カ タ ロ グをいつど こ で使用するかを示し ます。

重要: IP カ タ ロ グを使用する こ と は、 高生産性設計手法を可能にする ために必須です。

X-Ref Target - Figure 2-3

図 2-3: IP カタログと設計プロセス

UltraFast 高生産性設計手法ガイド 15UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 16: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 2 章: システム デザイン

IP カ タ ロ グの機能は次の とお り です。

• ザイ リ ン ク スか ら の約 200 個の IP が含まれます。 詳細は、 ザイ リ ン ク スの IP ページ [参照 12] を参照し て く だ

さ い。

• C ベースの IP 開発からの出力を保存し ます。

• System Generator、 レガシ RTL、 およびザイ リ ン ク ス パー ト ナー IP を追加でき ます。

• 多数のイ ン ターフ ェ イ ス IP が含まれ、 レガシ RTL IP の使用がサポー ト されてお り 、 シェルを作成する際に使用

されます。

• システム統合におけるすべての IP ブロ ッ クのソース と な り ます。

• システムの統合および検証中に使用される RTL イ ンプ リ メ ンテーシ ョ ンを供給し ます。

シェル開発中、 シェルは IP カ タ ロ グからの IP を使用し て IP イ ンテグレーターでアセンブルされます。 これには、

ザイ リ ン ク スが提供する イ ン ターフ ェ イ ス IP (イーサネ ッ ト 、 VGA、 CPRI、 シ リ アル ト ラ ンシーバーなど)、 ザイ リ

ン ク ス パー ト ナーからの IP、 IP カ タ ロ グの IP と し て提供される レガシ RTL パッ ケージ、 または Vivado HLS および

System Generator で作成された IP が含まれます。

レガシ RTL を IP と し てパッ ケージする方法は、 『Vivado Design Suite チュー ト リ アル: カ ス タ ム IP の作成 と パッ ケー

ジ』 (UG1119) [参照 5] を参照し て く ださい。

System Generator から AXI イ ン ターフ ェ イ ス を使用する IP を作成する方法は、 『Vivado Design Suite ユーザー ガイ ド :

System Generator を使用し たモデル ベースの DSP デザイ ン』 (UG897) [参照 6] を参照し て く ださい。

Vivado HLS からのデフ ォル ト 出力は、 IP カ タ ロ グ用にパッ ケージ された IP です。 これについては、 「IP パッ ケージ」

を参照し て く ださい。

UltraFast 高生産性設計手法ガイド 16UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 17: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 2 章: システム デザイン

IP インテグレーターおよび標準インターフェイス

Vivado IP イ ンテグレーターを使用する と、 キ ャ ンバスに IP ブロ ッ ク をすばや く 追加し て接続でき、 高生産性設計手

法が可能 と な り ます。

重要: Vivado IP イ ンテグレーターを使用し て高生産性を達成するには、 標準イ ン ターフ ェ イ ス を使用する こ と が重要

です。

図 2-4 に、 IP イ ンテグレーターに表示されたサンプル ブロ ッ ク デザイ ンを示し ます。

次の接続タ イプがあ り ます。

• ク ロ ッ ク信号や リ セ ッ ト 信号などのピン レベルの接続。

• AXI、 AXI4-Lite、 および AXI4-Stream バスなどのバス レベル接続。

• DDR などのボード レベルの接続。

IP イ ンテグレーターでは、 各 IP のピンをマウ ス を使用し てグ ラ フ ィ カルに接続し ます。 ビ ッ ト レベルの基本的な接

続だけでな く 、 バス レベルの接続もサポー ト され、 設計アシス タ ン スが提供されます。

X-Ref Target - Figure 2-4

図 2-4: IP インテグレーター ブロック デザイン

UltraFast 高生産性設計手法ガイド 17UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 18: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 2 章: システム デザイン

次の図に、 バス レベル接続の利点を示し ます。 こ の例では、 2 つの AXI マス ター イ ン ターフ ェ イ スが接続されてい

ます。 最初のポー ト を接続する と、 すべての有効な接続が緑色のチェ ッ ク マーク で示されます。

重要: IP イ ンテグレーターでは、 無効な接続を確立する こ と はでき ません。 これによ り 、 手動の編集によ り 発生する

可能性のあ る接続エラーを回避でき ます。

標準 AXI イ ン ターフ ェ イ スおよび IP イ ンテグレーターを使用する と、 AXI Interconnect IP が自動的に生成され、 生産

性がさ らに向上し ます。 図 2-6 に、 次を接続し た結果を示し ます。

• 1 つのブロ ッ ク上の 1 つの AXI 出力

• 別のブロ ッ ク上の 1 つの AXI4-Stream 入力

IP イ ンテグレーターで、 マス ター タ イプのイ ン ターフ ェ イ ス を Stream タ イプのイ ン ターフ ェ イ スに接続するため、

AXI Interconnect IP が自動的に追加されます。

X-Ref Target - Figure 2-5

図 2-5: コネクシ ョ ン オート メーシ ョ ン

UltraFast 高生産性設計手法ガイド 18UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 19: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 2 章: システム デザイン

この AXI Interconnect IP は IP カ タ ロ グに含まれてお り 、 手動で追加でき ますが、 IP イ ンテグレーターではこ のタ ス

ク が自動化されています。 最終的なブロ ッ ク デザイ ンを ス ク リ プ ト と し て保存する と、 Tcl コマン ド で単にどのピン

を接続するかが記述されるだけです。

ヒン ト : Vivado Design Suite およびザイ リ ン ク ス IP の新しい リ リ ースにア ッ プグレードする際は、 ス ク リ プ ト を再実

行し て最新のイ ン ターコネ ク ト ロ ジ ッ ク が使用される よ う にし て く ださい。

デザイ ンで標準イ ン ターフ ェ イ ス を使用する と、 ボード レベル接続に設計アシス タ ン スが提供されます。 Vivado

Design Suite では、 ターゲ ッ ト デバイ スだけでな く 、 ターゲ ッ ト ボード を選択でき ます。 IP イ ンテグレーターでは

ボード が認識され、 ボード レベル接続を自動化でき ます。

設計者が確認する と、 IP イ ンテグレーターによ り IP と FPGA ピンが自動的に接続されます (ボード接続)。

X-Ref Target - Figure 2-6

図 2-6: AXI Interconnect IP の自動追加

UltraFast 高生産性設計手法ガイド 19UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 20: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 2 章: システム デザイン

IP イ ンテグレーターでは、 IP が自動的にブロ ッ ク図に統合されます。 ほかにも、 [Validate Design] 機能を使用し たデ

ザイ ン ルール チェ ッ ク、 AXI Interconnect IP の ク ロ ッ クおよび リ セ ッ ト ロ ジ ッ ク の自動追加などの機能があ り ます。

この自動化を活用し、 生産性の高いシェル設計手法を使用するには、 オンチッ プの通信に標準イ ン ターフ ェ イ スお

よび AXI イ ン ターフ ェ イ ス を使用する こ と が重要です。

X-Ref Target - Figure 2-7

図 2-7: ブロック オート メーシ ョ ン

UltraFast 高生産性設計手法ガイド 20UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 21: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 3 章

シェル開発

概要

シェルの使用は、 高生産性設計手法の利点を活かすために重要です。 シェル デザイ ンには、 コ ア デザイ ン IP と シス

テムの残 り の部分を接続する標準イ ン ターフ ェ イ ス と処理ブロ ッ クすべてが含まれ、 コ ア デザイ ン IP と並列開発さ

れます。

シェル デザイ ンを利用する設計手法では、 次のよ う な生産性の向上が可能です。

• デザイ ン イ ン ターフ ェ イ スおよび I/O プラ ンニングを、 コ ア デザイ ン と は別に開発でき ます。

• コ ア デザイ ン IP が準備でき る前に、 デザイ ン イ ン ターフ ェ イ ス を検証でき ます。

• プラ ッ ト フ ォーム デザイ ンにはシステムのロ ジ ッ ク の大部分を占める コ ア デザイ ン IP が含まれないので、 デ

ザイ ンが小型であ り 、 イ ン ターフ ェ イ スの検証時間を短縮でき ます。

• 生産性の高いデザイ ン再利用設計手法が促進され、 派生デザイ ンを簡単に作成でき ます。

図 3-1 に、 シェル設計手法の概要を示し ます。 この設計手法の主な特徴は、 シェル デザイ ンの再利用にあ り ます。

シェル開発は、 シェルの設計およびシェルの検証の 2 つのプロセスで構成されます。

X-Ref Target - Figure 3-1

図 3-1: シェル設計手法

UltraFast 高生産性設計手法ガイド 21UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 22: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 3 章: シェル開発

シェル デザイン

シェル デザイ ンには、 デザイ ンの周辺部のみが含まれ、 上図に示すよ う に、 デザイ ンを簡単に再利用でき る よ う な

形にする必要があ り ます。 シェルを保存し、 開き直し て複数のプロ ジェ ク ト の基盤と し て使用し ます。

上図に示すフ ローを可能にするために必要なレベルのデザイ ン再利用を達成するには、 シェル デザイ ンを IP イ ンテ

グレーターのブロ ッ ク デザイ ン と し て作成し、 ほかのデザイ ン プロ ジェ ク ト の基盤 と し て簡単に保存および開き直

すこ と ができ る よ う にし ます。

既存の IP のアセンブル

シェル デザイ ンは、 IP カ タ ロ グからの IP を使用し て、 IP イ ンテグレーターでブロ ッ ク デザイ ン と し てアセンブル

されます。

重要: シェル作成の準備 と し て、シェル デザイ ンで使用する既存の RTL または企業特定の IP を IP カ タ ロ グから使用

でき る よ う に IP と し てパッ ケージ し て く ださい。 パッ ケージ し た IP は、 シェル ブロ ッ ク デザイ ンに追加でき ます。

IP カ タ ロ グから使用でき る よ う にブロ ッ ク をパッ ケージする方法は、 『Vivado® Design Suite チュー ト リ アル: カス タ

ム IP の作成 と パッ ケージ』 (UG1119) [参照 5] を参照し て く ださい。

シェル デザイン プロジェク ト

IP をアセンブルし た ら、 Vivado RTL プロ ジェ ク ト を作成し ます。

ト レーニング: Vivado RTL プロ ジェ ク ト 作成の詳細は、 Vivado Design Suite QuickTake ビデオ: さ まざまなタ イプのプ

ロ ジェ ク ト を作成を参照し て く ださい。

Vivado プロ ジェ ク ト を作成する際は、 次のよ う にし ます。

• プロ ジェ ク ト を RTL プロ ジェ ク ト と し て指定し、 [Do not specify any sources at this time] をオンにし ます。 シェル

デザイ ンのソースは、 IP カ タ ロ グ用にパッ ケージ し た IP です。

• 可能な場合は、 ザイ リ ン ク ス ボード を ターゲ ッ ト と し て選択し ます。 ザイ リ ン ク ス ボード で使用されるデバイ

スの I/O は、 自動的に設定されます。 これによ り 、 カ ス タ ム ボード を開発し ている間に最短時間でプラ ッ ト

フ ォーム デザイ ンを開始でき、 IP イ ンテグレーターの設計アシス タ ン ス を使用し て I/O を接続でき ます。

ザイ リ ン ク ス ボード を ターゲ ッ ト と し て指定し ない場合は、 ターゲ ッ ト デバイ スの I/O 接続をユーザーが指定する

必要があ り ます。詳細は、『UltraFast 設計手法ガイ ド (Vivado Design Suite 用)』 (UG949) [参照 7] のこのセ ク シ ョ ンを参

照し て く ださい。

開発プロセス中にカ ス タ ム ボード を使用する場合は、 ボード接続を詳細に記述するボード フ ァ イルを作成し、 IP イ

ンテグレーターの設計アシス タ ン ス を使用でき る よ う にし、 ボード レベルの接続を簡略化する こ と をお勧めし ます。

ボード フ ァ イルの詳細は、 『Vivado Design Suite ユーザー ガイ ド : システム レベル デザイ ン入力』 (UG895) [参照 9] の

このセ ク シ ョ ンを参照し て く ださい。

プロ ジェ ク ト を作成し た ら、 Flow Navigator の [Create Block Design] ボタ ンを ク リ ッ ク し、 IP イ ンテグレーターを開

いて新しいブロ ッ ク デザイ ンを作成し ます。 IP イ ンテグレーター ウ ィ ン ド ウで、 IP リ ポジ ト リ のソース を指定し、

[Add IP] ボタ ンを ク リ ッ ク し てシェル デザイ ンを開始し ます。

UltraFast 高生産性設計手法ガイド 22UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 23: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 3 章: シェル開発

シェルが完成し た ら、 write_bd_tcl コマン ド を使用し てブロ ッ ク デザイ ン全体を Tcl ス ク リ プ ト と し て保存し ま

す。 このス ク リ プ ト には、 ブロ ッ ク デザイ ンを一から再生成するのに必要なコマン ド がすべて含まれます。 ブロ ッ

ク デザイ ンおよび Vivado プロ ジェ ク ト を保存し た ら、 次の段階の検証およびシステム開発に進むこ と ができ ます。

ピ ン プ ラ ンニング、 IP イ ンテグ レーター、 および Vivado Design Suite のその他の機能の詳細は、 Documentation

Navigator の [Design Hub View] タブから取得でき ます。 詳細は、 「Documentation Navigator の使用」 を参照し て く だ

さ い。

シェルの検証

シェル デザイ ンを作成し た ら、 シェルを検証し ます。 検証プロセスでは、 シェル デザイ ンを開き、 検証 IP を追加し

て、 イ ン ターフ ェ イ スが正し く 機能する こ と を確認し ます。

シェル検証プロジェク ト

シェル デザイ ンを検証するには、 まず次のいずれかのオプシ ョ ンを使用し て新しい検証プロ ジェ ク ト を作成し ます。

• シェル デザイ ンの Vivado プロ ジェ ク ト を開き、 [File] → [Save Project As] を ク リ ッ ク し て新規プロ ジェ ク ト と し

て保存する。

• 新規 Vivado RTL プロ ジェ ク ト を RTL ソースな しで同じ ターゲ ッ ト デバイ ス またはボード を選択し て作成し、

[Create Block Design] を ク リ ッ ク し て、 write_bd_tcl コマン ド を使用し て保存し た Tcl ス ク リ プ ト を [Tcl

Console] ウ ィ ン ド ウで実行し て新規プロ ジェ ク ト にシェル ブロ ッ ク デザイ ンを再生成し ます。

検証デザイ ンの複雑さ を管理するため、 複数の検証プロ ジェ ク ト が必要な場合も あ り ます。 次の図に、 シェル検証

デザイ ンの例を示し ます。 この例では、 1 つのイ ン ターフ ェ イ スのみがテス ト されます。

X-Ref Target - Figure 3-2

図 3-2: シェル検証の例

DMA Engine

AXIInterconnect

Memory I/FGenerator

Tx Unit

AXIInterconnect HDMI

Tx

TimingController

AXI Streamto Video

AXI Switch

Test PatternGenerator

Video ToAXI-

Stream

HDMIRx

Verification IP Platform IP

RS232

DDR

Output

Input

X23585-120619

UltraFast 高生産性設計手法ガイド 23UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 24: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 3 章: シェル開発

検証 IPデザイ ンを検証するには、 シェル デザイ ンに Vivado IP カ タ ロ グから検証 IP を追加し ます。

検証 IP は、 このガイ ド に説明されているいずれかの方法 (RTL、 System Generator、 または C ベース IP) を使用し て開

発でき ます。 次の例は、 標準 AXI イ ン ターフ ェ イ ス IP を使用し、 小型の C フ ァ イルを使用し て、 AXI4-Stream イ ン

ターフ ェ イ ス上に N 個のサンプルの HANN ウ ィ ン ド ウ を作成する方法を示し ています。 イ ン ターフ ェ イ ス指示子を

axis から m_axi に変更する と、 AXI メ モ リ マ ッ プ ド イ ン ターフ ェ イ ス を イ ンプ リ メ ン ト でき ます。

void verify_IP_Hann(float outdata[WIN_LEN]) {// Specify AXI4-Stream output#pragma HLS INTERFACE axis port=outdata// Alternative output AXI4M (commented out)//#pragma HLS INTERFACE m_axi port=outdata

float coeff[WIN_LEN]; coeff_loop:for (int i = 0; i < WIN_LEN; i++) { coeff[i] = 0.5 * (1.0 - cos(2.0 * M_PI * i / WIN_LEN));

}

winfn_loop:for (unsigned i = 0; i < WIN_LEN; i++) { outdata[i] = coeff[i];

}}

Vivado HLS を使用し てほかの IP 間のイ ン ターフ ェ イ ス ブロ ッ ク を作成する方法は、 『Vivado IP イ ンテグレーターを

使用し た AXI4 ベースの IP の統合方法』 (XAPP1204) [参照 10] を参照し て く ださい。

シェルの検証

最上位テス ト ベンチをシ ミ ュ レーシ ョ ン ソースに追加する と、 FPGA をプロ グ ラ ムする前に、 シ ミ ュ レーシ ョ ンに

よ り シェル デザイ ンを検証でき ます。

RTL シ ミ ュ レーシ ョ ンを使用し てシェルを検証するには、 RTL テス ト ベンチを作成する必要があ り ます。 この同じ

テス ト ベンチは、 完全に統合されたデザイ ンを検証するのにも使用されます。 シェルを検証するのに複数の検証プ

ロ ジェ ク ト を使用する場合は、 すべてのイ ン ターフ ェ イ ス を検証する ために同じ テス ト ベンチを拡張する必要があ

り ます。

FPGA 上のイ ン ターフ ェ イ ス を詳細に検証するには、 デザイ ンに信号レベルのデバッ グ プローブを追加でき ます。

ブロ ッ ク デザイ ンで作業する際、 右ク リ ッ ク メ ニューから ネ ッ ト をデバッ グ用にマーク でき ます。 デバッ グ用に

マーク された信号は、 ハード ウ ェ ア操作中に解析でき ます。 デザイ ンに ILA コ アを追加する と、 解析用に信号を

キ ャプチャ し、 FPGA デバイ スから読み出すこ と ができ ます。 詳細は、 『Vivado Design Suite ユーザー ガイ ド : IP イ ン

テグレーターを使用し た IP サブシステムの設計』 (UG994) [参照 8] のこ のセ ク シ ョ ンを参照し て く ださ い。

その後、 最終的なデザイ ンに対し て Vivado デザイ ン フ ローを実行し てビ ッ ト ス ト リ ームを生成し ます。 シェルを完

全に検証し た ら、 検証 IP の変更以外のシェル デザイ ンへの変更は、 元のソース シェル デザイ ン プロ ジェ ク ト に反

映させる必要があ り ます。 これで、 シェル デザイ ンを コ ア デザイ ン IP に統合する準備ができ ま し た。

UltraFast 高生産性設計手法ガイド 24UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 25: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章

C ベース IP の開発

概要

高生産性デザイ ン フ ローでコ ア デザイ ン IP を生成するには、 C ベース IP を使用し、 高位合成 (HLS) で C コード を

RTL に変換するのが主な方法です。 C ベース IP の開発フ ローには、 次のよ う な利点があ り ます。

• C 検証によ り シ ミ ュ レーシ ョ ンが高速

• タ イ ミ ング制約が正し く 設定され、 最適化された RTL を自動生成

• ラ イブラ リ から既存の C IP を使用可能

• IP イ ンテグレーターを使用し て結果の RTL IP をシステムに簡単に統合可能

この章では、 C ベース IP を作成、 検証、 合成、 解析、 最適化し、 IP カ タ ロ グで使用でき る よ う IP にパッ ケージする

方法を説明し ます。 これには、 Vivado® Design Suite に含まれる Vivado HLS (高位合成) ツールを使用し ます。

次の図は、 Vivado HLS のデザイ ン フ ローを示し ています。 デザイ ン フ ローの手順は、 次の とお り です。

1. C アルゴ リ ズムを コ ンパイル、 実行 (シ ミ ュ レーシ ョ ン)、 およびデバッ グ。

注記: 高位合成では、 コ ンパイル済み C プロ グ ラ ムの実行を 「C シ ミ ュ レーシ ョ ン」 と呼びます。 C プロ グ ラ ム

を実行する と関数がシ ミ ュ レーシ ョ ン され、 アルゴ リ ズムが正し く 機能するかど う かが検証されます。

2. C プロ グ ラ ムを RTL イ ンプ リ メ ンテーシ ョ ンに合成 (オプシ ョ ンでユーザーの最適化指示子を使用可能)。

3. 包括的なレポー ト を生成し てデザイ ンを解析。

4. プ ッ シュボタ ン フ ローを使用し て RTL イ ンプ リ メ ンテーシ ョ ンを検証。

5. RTL イ ンプ リ メ ンテーシ ョ ンを選択し た IP フ ォーマ ッ ト にパッ ケージ。

UltraFast 高生産性設計手法ガイド 25UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 26: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

Vivado HLS の使用に関する詳細は、 『Vivado Design Suite ユーザー ガイ ド : 高位合成』 (UG902) [参照 2] を参照し て く

ださい。 この章では、 生産性の高い方法で Vivado HLS を使用する設計手法を説明し ます。

高速 C 検証

C で記述されたアルゴ リ ズムのシ ミ ュ レーシ ョ ンは、 同じ アルゴ リ ズムの RTL をシ ミ ュ レーシ ョ ンする よ り もかな

り 高速に実行でき ます。

た と えば、 標準的なビデオ アルゴ リ ズムを考えてみます。 C の典型的なビデオ アルゴ リ ズムでは完全なビデオ デー

タのフ レームが処理され、 出力画像が基準画像 と比較され、 結果が正しいかど う かが確認されます。 この C シ ミ ュ

レーシ ョ ンには、 通常 10 ~ 20 秒かか り ます。 RTL イ ンプ リ メ ンテーシ ョ ンのシ ミ ュ レーシ ョ ンの場合、 フ レーム

数およびデザイ ンの複雑性によ って、 通常 2、 3 時間から数日かか り ます。

ソ フ ト ウ ェアのシ ミ ュ レーシ ョ ン速度を使用し、 よ り 多 く の部分を C レベルで開発する と、 生産性を さ らに高める

こ と ができ ます。 アルゴ リ ズム、 データ型、 ビ ッ ト 幅を変更し てデザイ ンが正し く 動作するかど う かを検証し て確

認するのはこの段階なので、 設計者が実際に設計をするのはこの段階 と言えます。

フ ローの残 り は、 ツール チェーンを使用し て正しいデザイ ンを FPGA にイ ンプ リ メ ン ト する開発段階です。 Vivado

Design Suite と高生産性設計手法を使用する と、 開発フ ローを大幅に自動化でき ます。

X-Ref Target - Figure 4-1

図 4-1: Vivado HLS のデザイン フロー

TestBench

Constraints/Directives

Vivado HLS

C Simulation C Synthesis

RTLAdapter

VHDLVerilog

RTL Simulation Packaged IP

VivadoDesign Suite

System Generator

X14309

C, C++,SystemC,

OpenCL API C

UltraFast 高生産性設計手法ガイド 26UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 27: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

初期 FPGA デザイ ンを イ ンプ リ メ ン ト し た ら、 第 5 章 「システム統合」 に示すス ク リ プ ト フ ローを使用し て、 シス

テム全体の RTL シ ミ ュ レーシ ョ ンを実行する よ り も短い時間で、 FPGA をプロ グ ラ ムする新しいビ ッ ト ス ト リ ーム

を作成する こ と も不可能ではあ り ません。

C ベース IP フ ローで最大の生産性を達成するには、 次を理解し てお く 必要があ り ます。

• 「C テス ト ベンチ」

• 「セルフチェ ッ ク テス ト ベンチ」

• 「ビ ッ ト 精度データ型」

C テストベンチ

すべての C プロ グ ラ ムの最上位は main() 関数です。 Vivado HLS では、 main() の下位にあ る任意の関数 1 つが合

成されます。 Vivado HLS で合成される関数は 「デザイ ン関数」 (Design Function) と呼ばれます。 図 4-2 はこれを示し

ています。

• デザイ ン関数よ り も下位の関数がすべて Vivado HLS で合成されます。

• デザイ ン関数の階層外のものはすべて C テス ト ベンチ と呼ばれます。

C テス ト ベンチには、 デザイ ン関数に入力データ を供給し、 デザイ ン関数からの出力データ を受信し てそれが正確

かど う かを確認する、 main() よ り 下位の C コードすべてが含まれます。

X-Ref Target - Figure 4-2

図 4-2: C テストベンチ

UltraFast 高生産性設計手法ガイド 27UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 28: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

Vivado HLS デザイ ン フ ローに慣れていない場合、 C テス ト ベンチを使用し て C シ ミ ュ レーシ ョ ンを実行せずに C

コード の合成に進んでし ま う と い う 間違いを犯しがちです。 これを次のコード に示し ます。 この入れ子のループの

例の問題点を見つけてみて く ださい。

#include "Nested_Loops.h"

void Nested_Loops(din_t A[N], dout_t B[N]) {

int i,j;dint_t acc;

LOOP_I:for(i=0; i < 20; i++){LOOP_J: for(j=0; j < 20; j++){if(j=0) acc = 0;acc += A[i] * j;

if(j=19) B[i] = acc / 20;}

}}

このコード が予測どお り に合成されないのは、 条件文が FALSE と評価され、 LOOP_J の最初の反復の最後に J が 19

に設定されるからです。 この条件文は、 j==0 および j==19 (= ではな く == を使用) にする必要があ り ます。 上記の

コード例はコ ンパイルおよび実行され、 問題な く 合成でき ますが、 予測どお り には動作し ません。 コード を さ ら っ

と確認するだけでは、 問題を検出するのは困難です。

現在は開発者は日常的に C/C++、 Perl、 Tcl、 Python、 Verilog、 および VHDL を 1 つまたは複数使用する時代なので、

このよ う な小さ な間違いを見つけるのは困難で、 機能的な問題を見つけるのはさ らに難し く 、 合成後に見つける こ

と も非常に困難で時間がかか り ます。

C テス ト ベンチは、 合成される C 関数を呼び出し、 テス ト データ を供給し、 出力が正しいかど う かをテス ト するだ

けプロ グ ラ ムであ り 、 合成前にコ ンパイルし て実行でき るので、 合成前に結果を確認でき ます。

直接合成を実行する方が時間を節約でき る よ う に感じ るかも しれませんが、 C テス ト ベンチを使用する こ と は、 作

成するのに時間を割 く こ と になって も、 それをはるかに上回る大き な価値があ り ます。

UltraFast 高生産性設計手法ガイド 28UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 29: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

セルフチェ ック テストベンチ

Vivado HLS では、 C アルゴ リ ズムを検証する合成前の C シ ミ ュ レーシ ョ ン と、 RTL イ ンプ リ メ ンテーシ ョ ンを検証

する合成後の C/RTL 協調シ ミ ュ レーシ ョ ンがサポー ト されています。 どち らの場合も、 main() 関数の return 値

を使用し て結果が正しいかど う かを確認し ます。 理想的なテス ト ベンチには、 次のコード 例のよ う に結果をチェ ッ

クする属性が含まれます。 関数の合成結果は results.dat フ ァ イルに保存され、 正しい予測結果 (この例では

「golden」 と呼ばれる結果) と比較されます。

int main () {...int retval=0;fp=fopen("result.dat","w");...// Call the function for synthesisloop_perfect(A,B);

// Save the output resultsfor(i=0; i<N;++i) {fprintf(fp, "%d \n", B[i]);

}...

// Compare the results file with the golden resultsretval = system("diff --brief -w result.dat result.golden.dat");if (retval != 0) {printf("Test failed !!!\n"); retval=1;

else {printf("Test passed !\n");

}

// Return 0 ONLY if the results are correct return retval;}

Vivado HLS デザイ ン フ ローでは、 main() 関数への return 値はそれぞれ次を示し ます。

• 0: 結果が正しいこ と を示し ます。

• 0 以外: 結果が正し く ないこ と を示し ます。

推奨: main() 関数の戻 り 値はシステム環境 (Linux、 Windows、 Tcl など) で解釈されるので、 戻 り 値は 8 ビ ッ ト の範

囲に制約し てお く と、 移植性 と安全性が向上し ます。

セルフチェ ッ ク テス ト ベンチを使用する場合、 RTL テス ト ベンチを作成し て Vivado HLS からの出力が正しいかど う

か確認する必要はあ り ません。 C/RTL 協調シ ミ ュ レーシ ョ ン中は C シ ミ ュ レーシ ョ ンに使用されるの と同じ テス ト

ベンチが自動的に使用され、 合成後の結果がテス ト ベンチで検証されます。

C には、 結果が有効かど う かを確認する方法が多 く あ り ます。 上記の例の場合、 関数からの合成結果が

result.dat フ ァ イルに保存され、 予測結果を含むフ ァ イル と比較されます。 結果は、 合成には指定されていない

同一の関数 (テス ト ベンチが実行される と きにソ フ ト ウ ェ アで実行) と比較し た り 、 テス ト ベンチで算出された値 と

比較し た り する こ と も可能です。

UltraFast 高生産性設計手法ガイド 29UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 30: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

重要: テス ト ベンチの main() 関数に return 文がない場合、 C 規格によ り return 値は 0 と な り ます。 このため、

C および C/RTL 協調シ ミ ュ レーシ ョ ンでは、 結果が正し く ない場合でも、 問題はレポー ト されません。 結果を確認

し、 それらが正しい場合にのみ 0 を戻すよ う にし て く ださい。

セルフチェ ッ ク テス ト ベンチを作成する こ と で、 C コード に明らかなエラーはな く な り 、 合成からの出力が正しい

かど う かを検証するために RTL テス ト ベンチを作成する必要はな く な り ます。

ビッ ト精度データ型

Vivado HLS には任意精度型が含まれてお り 、 変数をどの幅にでも指定でき る よ う になっています。 た と えば、 変数

を 12、 22、 または 34 ビ ッ ト 幅と し て定義でき ます。 標準 C データ型を使用する場合は、 これらの変数はそれぞれ

16、 32、 64 ビ ッ ト にする必要があ り ます。 標準 C データ型を使用する と、 た と えば 34 ビ ッ ト のみが必要な場合に

64 ビ ッ ト のハード ウ ェ アがイ ンプ リ メ ン ト される など、 不必要なハード ウ ェ アがイ ンプ リ メ ン ト されて し ま う こ と

がよ く あ り ます。

任意精度型を使用する と、 これらの新しいビ ッ ト 幅 と解析されたビ ッ ト 精度の出力を使用し て C アルゴ リ ズムをシ

ミ ュ レーシ ョ ンでき る と い う さ らに大き な利点も あ り ます。 た と えば、 10 ビ ッ ト 入力と 14 ビ ッ ト 出力のフ ィ ルター

を設計し、 デザイ ンで 24 ビ ッ ト アキ ュ ムレータ を使用でき る よ う にする と し ます。 C シ ミ ュ レーシ ョ ンを実行する

と (数万個のサンプルを使用し て数分でフ ィ ルターをシ ミ ュ レーシ ョ ン可能)、 出力の信号対ノ イ ズ比が許容でき る

ものであ るかど う かをすばや く 確認でき ます。 アキ ュ ムレータが小さすぎ るかど う か、 よ り 小型で効率的なアキ ュ

ムレータ を使用し て必要な精度を提供でき るかど う かをすばや く 判断でき ます。

重要: ビ ッ ト 精度 C のシ ミ ュ レーシ ョ ンは、 デザイ ンを検証する最速の方法です。

高生産性設計手法では、 まず標準 C データ型を使用し てデザイ ンを開始し、 アルゴ リ ズムが設計どお り に実行され

るかど う かを確認し てから、 C コード を任意精度型に移行し ます。 こ のハード ウ ェ ア効率の高いデータ型への移行

は、 結果を確認する C テス ト ベンチがあ り 、 よ り 小型で効率的なデータ型が適切であ るかど う かをすばや く 検証で

き る場合にのみ、 安全に生産的に実行でき ます。 任意精度型について精通し ている場合は、 通常新しい C プロ ジェ

ク ト の最初から任意精度型を使用し ます。

C テス ト ベンチを使用する利点と、 設計手法の 1 つと し てテス ト ベンチを使用し ない場合の生産性のロ スについて

は、 誇張し て も しすぎ る こ と はあ り ません。

『Vivado Design Suite ユーザー ガイ ド : 高位合成』 (UG902) [参照 2] のこのセ ク シ ョ ンの Vivado HLS の例には、 C、

C++、 または SystemC テス ト ベンチが含まれています。 これらの例を コ ピーし て変更する こ と によ り 、 C テス ト ベン

チを作成でき ます。 これらの例には、 任意精度型を使用し た C 関数が含まれます。

UltraFast 高生産性設計手法ガイド 30UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 31: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

合成の C 言語サポート

合成で何がサポー ト されるかを理解する こ と は、 Vivado HLS UltraFast 設計手法の重要部分です。 Vivado HLS では、

C、 C++、 SystemC が包括的にサポー ト されます。 C シ ミ ュ レーシ ョ ンではすべてサポー ト されますが、 すべての記

述を同等の RTL イ ンプ リ メ ンテーシ ョ ンに合成する こ と はでき ません。

FPGA へのイ ンプ リ メ ンテーシ ョ ンのためにコード を確認する際は、 次の主な原則を考慮する必要があ り ます。

• FPGA は固定サイ ズの リ ソースで、 その機能はコ ンパイル時に固定される必要があ り ます。 ハード ウ ェアのオブ

ジェ ク ト は、 ダ イナ ミ ッ ク に作成し た り 破棄し た り でき ません。

• FPGA と のすべての通信は、 入力および出力ポー ト を介し て実行する必要があ り ます。 FPGA には、 基盤と なる

オペレーテ ィ ング システム (OS) または OS リ ソースはあ り ません。

サポート されないコンスト ラク ト

システム コール

システム コールは合成でサポー ト されません。 これらのコールは、 C プロ グ ラ ムが実行される OS と の通信に使用さ

れます。 FPGA には、 通信する基盤の OS はあ り ません。 time() および printf() がシステム コールの例です。

よ く 使用される関数の中には、 Vivado HLS で自動的に無視される ものも あ るので、 コード から それら を削除する必

要はあ り ません。 無視される関数は、 次の とお り です。

• abort()

• atexit()

• exit()

• fprintf()

• printf()

• perror()

• putchar()

• puts()

サポー ト されないコード を削除する代わ り に、 コード が合成されないよ う にする こ と もでき ます。 合成が実行され

る と、 Vivado HLS で __SYNTHESIS__ マ ク ロが自動的に定義されます。

このマ ク ロは、 コード を C シ ミ ュ レーシ ョ ンの実行時には含め、 合成時には除外するために使用でき ます。

#ifndef __SYNTHESIS__// The following code is ignored for synthesisFILE *fp1;char filename[255];sprintf(filename,Out_apb_%03d.dat,apb);fp1=fopen(filename,w);fprintf(fp1, %d \n, apb);fclose(fp1);

#endif

UltraFast 高生産性設計手法ガイド 31UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 32: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

注記: __SYNTHESIS__ マ ク ロは、 合成される コード にのみ使用し ます。 このマ ク ロは C シ ミ ュ レーシ ョ ン または C

RTL 協調シ ミ ュ レーシ ョ ンには従っていないので、 テス ト ベンチには使用し ないで く ださい。

情報が OS から必要と される場合は、 データ を合成用に引数と し て最上位関数に渡す必要があ り ます。 その後こ の情

報は、 残 り のシステムのタ ス ク によ り 、 合成済み IP ブロ ッ クに供給されます。 これは通常、 データ ポー ト を CPU

に接続された AXI4-Lite イ ン ターフ ェ イ ス と し て イ ンプ リ メ ン ト する こ と によ り 実行でき ます。

ダイナミ ック オブジェク ト

ダ イナ ミ ッ ク オブジェ ク ト は合成でき ません。 関数呼び出しの malloc()、 alloc()、 プ リ プロセ ッ サ free()、

C++ の new および delete では、 OS メ モ リ マ ッ プに存在する メ モ リ リ ソース をダ イナ ミ ッ ク に作成または破棄で

き ます。 FPGA 内で使用可能な メ モ リ リ ソースは、 ブロ ッ ク RAM と レジス タのみです。 ブロ ッ ク RAM は配列が合

成された と きに作成されます。 配列の値は、 1 ク ロ ッ ク サイ クル間以上保持される必要があ り ます。 レジス タは、

変数で格納された値を 1 ク ロ ッ ク サイ クル間以上保持する必要があ る場合に作成されます。 ダイナ ミ ッ ク メ モ リ 割

り 当ての代わ り に、 固定サイ ズの配列または変数を使用する必要があ り ます。

ダ イナ ミ ッ ク メ モ リ の使用に関する制限と同様、 Vivado HLS の合成では、 ダ イナ ミ ッ ク に作成または破棄される

C++ オブジェ ク ト もサポー ト されません。 これには、 ポ リ モーフ ィ ズム関数およびダ イナ ミ ッ ク仮想関数の呼び出

しが含まれます。 新しいハード ウ ェ ア と なる新しい関数は、 ラ ン タ イ ム時にダ イナ ミ ッ クに作成する こ と はでき ま

せん。

同様の理由から、 再帰は合成でサポー ト されません。 すべてのオブジェ ク ト は、 コ ンパイル時に既知のサイ ズであ

る必要があ り ます。 テンプレー ト を使用する場合、 再帰は制限付きでサポー ト されます。

合成では、 std::complex などの標準データ型を除き、 C++ Standard Template Libraries (STL) はサポー ト されませ

ん。 これらのラ イブラ リ には、 ダ イナ ミ ッ ク メ モ リ 割 り 当て と再帰を多用する関数が含まれます。

SystemC コンス ト ラク ト

SC_MODULE は、 別の SC_MODULE 内に入れ子にし た り 、 別の SC_MODULE から派生させた り する こ と はでき ません。

SC_THREAD コ ン ス ト ラ ク ト はサポー ト されませんが、 SC_CTHREAD はサポー ト されます。

コンスト ラク トの制限付きサポート

最上位関数

テンプレー ト は、 合成ではサポー ト されますが、 最上位関数での使用はサポー ト されません。

C++ ク ラ ス オブジェ ク ト は、 合成では最上位にでき ません。 ク ラ スは最上位関数にイ ン ス タ ンシエー ト する必要が

あ り ます。

ポイ ン ター ト ゥ ポイ ン ターは合成ではサポー ト されますが、 最上位関数への引数 と し ては使用でき ません。

ポインターのサポート

Vivado HLS では、 ネイ テ ィ ブ C 型間のポイ ン ター キ ャ ステ ィ ング (型変換) はサポー ト されますが、 一般的なポイ ン

ター キ ャ ステ ィ ング (た と えば、 ポイ ン ターの別の構造型へのキ ャ ステ ィ ング) はサポー ト されません。

ポイ ン ターの配列は、 各ポイ ン ターがスカ ラーまたはス カ ラーの配列を指定する場合にサポー ト されます。 ポイ ン

ター配列では、 別のポイ ン ターを指定する こ と はでき ません。

UltraFast 高生産性設計手法ガイド 32UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 33: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

再帰

FPGA の再帰は、 テンプレー ト を使用し た場合にのみサポー ト されます。 合成で再帰を実行するには、 終端ク ラ ス を

サイ ズ 1 で使用し て、 再帰文で最終的な呼び出し を イ ンプ リ メ ン ト し ます。

メモリ関数

memcpy() および memset() は、 const 値が使用されていればサポー ト されます。

• memcpy(): バース ト 操作または const 値での配列初期化に使用されます。 memcpy 関数は値を引数にコ ピーし

た り 、 引数から最上位関数にコ ピーし た り する場合にのみ使用でき ます。

• memset(): 定数設定値での集約初期化に使用されます。

合成でサポー ト されないコード、 または制限付きでしかサポー ト されないコード は、 変更し ない と合成でき ません。

言語サポー ト の詳細は、『Vivado Design Suite ユーザー ガイ ド : 高位合成』 (UG902) [参照 2] のこのセ ク シ ョ ンを参照し

て く ださい。

ハードウェア最適化済み C ライブラリの使用

Vivado HLS には、 よ く 使用される C 関数用の C ラ イブラ リ が多 く 含まれます。 C ラ イブラ リ に含まれる関数は、 合

成し た と きに高パフ ォーマン スで効率の良いイ ンプ リ メ ンテーシ ョ ンになる よ う に、 通常あ らかじめ最適化されて

います。

Vivado HLS に含まれる C ラ イブラ リ すべての詳細は、 『Vivado Design Suite ユーザー ガイ ド : 高位合成』 (UG902) [参

照 2] のこのセ ク シ ョ ンに記述されていますが、 C ラ イブラ リ にどの C 関数が含まれているかを理解し てお く こ と を

お勧めし ます。

Vivado HLS には、 次の C ラ イブラ リ が含まれます。

• 任意精度データ型

• HLS ス ト リ ーム ラ イブラ リ

• 数学関数

• 線形代数関数

• DSP (デジタル信号処理) 関数

• ビデオ関数

• IP ラ イブラ リ

UltraFast 高生産性設計手法ガイド 33UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 34: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

Vivado HLS の理解

C ベース IP の最適化について説明する こ の章の後のセ ク シ ョ ンを参照する前に、 HLS の主要な概念を理解し てお く

こ と が重要です。 このセ ク シ ョ ンでは、 これらの概念の概要を示し ます。

パフォーマンスの測定

Vivado HLS では、 デフ ォル ト の合成ビヘイ ビアー と制約に基づいて、 最適な イ ンプ リ メ ンテーシ ョ ンが短時間で作

成されます。 ク ロ ッ ク周期が主な制約で、 Vivado HLS ではこれ と ターゲ ッ ト デバイ ス仕様を使用し て、 1 ク ロ ッ ク

サイ クルでい く つの演算を実行可能かか判断されます。

ク ロ ッ ク周波数制約を満た し た ら、 Vivado HLS で使用されるパフ ォーマン ス測定基準は最適化の重要度で並べる と

次のよ う にな り ます。

• 開始間隔 (II): 新しい入力間のク ロ ッ ク サイ クル数。 スループ ッ ト と、 デザイ ンが次の入力を読み出し て処理す

る速度を示し ます。

• レ イ テンシ: 出力を生成するのに必要な ク ロ ッ ク サイ クル数。 最小間隔が達成された後、 または内部ターゲ ッ ト

が指定されていない場合に、 レ イ テンシが最小になる よ う 処理されます。

• エ リ ア: 最小レ イ テンシが達成された ら、 エ リ アが最小にし なる よ う 処理されます。

パフ ォーマン スの測定は、 関数全体に対し てレポー ト されます。 た と えば、 関数にス カ ラー入力があ る場合、 II=3

は 3 ク ロ ッ ク サイ クルご と に 1 サンプル処理される こ と を意味し ますが、 関数に N 個のエレ メ ン ト の入力配列があ

る場合は、 II=N は N ク ロ ッ ク ご と に N 個のエレ メ ン ト が処理される こ と (ク ロ ッ ク ご と に 1 サンプルのレー ト ) を意

味し ます。

最適化指示子を使用する と、 上記の測定基準の優先順位を指定し て (スループ ッ ト よ り もエ リ アまたはレ イ テンシを

削減する こ と を優先する など)、 デザイ ンを作成でき ます。 最適化指示子を指定し ない場合、 Vivado HLS はこれらの

目標 と次に示すデフ ォル ト の合成ビヘイ ビアーを使用し て、 初期デザイ ンを作成し ます。

インターフェイス合成 最上位関数への引数は、 データ ポー ト (オプシ ョ ンで I/O プロ ト コルを指定) に合成されます。 I/O プロ ト コル と は、

データ ポー ト と システムのほかのハード ウ ェ ア ブロ ッ ク と のデータ通信を自動的に同期するため、 データ ポー ト に

関連付け られた 1 つまたは複数の信号です。

た と えばハン ド シェ イ ク プロ ト コルでは、 データ ポー ト に、 データが読み出し または書き込みに有効であ る こ と を

示す Valid ポー ト と、 データが正し く 読み出し または書き込みされた こ と を示す ACK (肯定応答) ポー ト が付き ます。

I/O プロ ト コルの詳細は、 『Vivado Design Suite ユーザー ガイ ド : 高位合成』 (UG902) [参照 2] のこのセ ク シ ョ ンを参照

し て く ださい。 これらのイ ン ターフ ェ イ スには AXI、 AXI4-Stream、 および AXI4-Lite イ ン ターフ ェ イ スが含まれて

お り 、 IP イ ンテグレーターを使用し てシステムに簡単に統合でき ます。

I/O プロ ト コルは、 最上位関数に対し てデフ ォル ト でイ ンプ リ メ ン ト されます。 このプロ ト コルは、 IP が演算を開始

でき る タ イ ミ ングを制御し、 演算を完了し たか新しい入力データの受信準備ができ た こ と を示し ます。 このオプ

シ ョ ンの I/O プロ ト コルは AXI4-Lite イ ン ターフ ェ イ ス と し て イ ンプ リ メ ン ト でき、 デザイ ンをマイ ク ロプロセ ッ サ

で制御でき る よ う にし ます。

UltraFast 高生産性設計手法ガイド 34UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 35: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

関数合成

最終的な RTL デザイ ンでは、 関数は階層ブロ ッ ク に合成されます。 C コード の各関数は、 最終的な RTL に固有のブ

ロ ッ ク と し て記述されます。 通常、 最適化は関数の境界で停止し ます。 最適化指示子には、 再帰オプシ ョ ンがあっ

た り 、 関数の境界を超えて適用される ものも あ り ます。

関数は、 最適化指示子を使用し て イ ン ラ イ ン化でき ます。 これによ り 関数の階層が削除され、 ロ ジ ッ クの最適化を

改善でき ます。 関数をパイプラ イ ン処理し て も、 スループ ッ ト パフ ォーマン ス を改善でき ます。

関数は、 でき るだけ早 く 実行される よ う にスケジュー リ ング されます。 次の例は、 foo_1 および foo_2 と い う 2 つ

の関数を示し ています。

void foo_1 (a,b,c,d,*x,*y) { ... func_A(a,b,&x); func_B(c,d,&y);}

foo_1 関数には、 func_A および func_B 間にデータ依存はあ り ません。 C コード ではこれらの関数が順番に実行

される よ う に見えますが、 Vivado HLS では最初のク ロ ッ ク サイ クルで両方の関数が同時にデータ処理を開始する

アーキテ クチャがイ ンプ リ メ ン ト されます。

void foo_2 (a,b,c,*x,*y) {int *inter1;

... func_A(a,b,&inter1,&x); func_B(c,d,&inter1,&y) }

foo_2 関数には、 関数間にデータ依存があ り ます。 inter1 内部変数は func_A から func_B に渡されます。 この

場合、 Vivado HLS では func_B 関数が func_A 関数が完了し た後にのみ開始する よ う スケジュー リ ング されます。

UltraFast 高生産性設計手法ガイド 35UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 36: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

ループ合成

ループはデフ ォル ト では非展開のま まです。 つま り 、 Vivado HLS ではループ本体内のロ ジ ッ ク が一回合成され、

ループの終了値に達する までこのロ ジ ッ ク が順に実行されます。 ループを展開し てすべての演算を並列実行でき る

よ う にする こ と も可能ですが、 ループ ハード ウ ェ アのコ ピーが複数作成されます。 または、 ループをパイプラ イ ン

処理し てパフ ォーマン ス を改善でき ます。

ループは常に順番に実行される よ う にスケジュー リ ング されます。 次の例では、 ループ SUM_X と SUM_Y 間に依存

性はあ り ませんが、 常にコード に記述される順番でスケジュー リ ング されます。

#include "loop_sequential.h"

void loop_sequential(din_t A[N], din_t B[N], dout_t X[N], dout_t Y[N], dsel_t xlimit, dsel_t ylimit) {

dout_t X_accum=0;dout_t Y_accum=0;int i,j;

SUM_X:for (i=0;i<xlimit; i++) {X_accum += A[i];X[i] = X_accum;

}

SUM_Y:for (i=0;i<ylimit; i++) {Y_accum += B[i];Y[i] = Y_accum;

}}

例 4-1 : シーケンシャル ループ

ロジック合成 デフ ォル ト では、 関数およびループ内のロ ジ ッ クは常にでき るだけ早 く 実行される よ う に合成されます。 Vivado

HLS は、 常にレ イ テンシを最小限に抑えながら、 デザイ ンを達成し よ う と し ます。 +、 *、 および / などの C コード

の演算子はハード ウ ェ ア コ アに合成されます。 Vivado HLS では、 合成目標を達成するのに最適なコ アが自動的に選

択されます。 最適化指示子の RESOURCE を使用する と、 どのハード ウ ェ ア コ アを使用し て演算を イ ンプ リ メ ン ト

するかを明確に指定でき ます。

配列合成

Vivado HLS では、 配列はデフ ォル ト でブロ ッ ク RAM に合成されます。

FPGA では、 ブロ ッ ク RAM は 18K ビ ッ ト のプ リ ミ テ ィ ブ エレ メ ン ト のブロ ッ ク と し て提供されます。 各ブロ ッ ク

RAM で、 配列を イ ンプ リ メ ン ト するのに必要なの数の 18K プ リ ミ テ ィ ブ エレ メ ン ト が使用されます。 た と えば、

1024 個の int 型の配列には 1024 * 32 ビ ッ ト = 32768 ビ ッ ト のブロ ッ ク RAM が必要なので、 32768/18000 = 1.8 個の

18K ブロ ッ ク RAM プ リ ミ テ ィ ブが必要です。 Vivado HLS では各配列が 1 つのブロ ッ ク RAM に合成される と レポー

ト されますが、ブロ ッ ク RAM には複数の 18K プ リ ミ テ ィ ブ ブロ ッ ク RAM エレ メ ン ト が含まれている可能性があ り

ます。

デフ ォル ト では、 Vivado HLS で小型のブロ ッ ク RAM が 1 つの大型ブロ ッ ク RAM にま と められた り 、 大型ブロ ッ ク RAM が小型のブロ ッ ク RAM に分割された り する こ と はあ り ませんが、 最適化指示子を使用すれば可能です。Vivado HLS では、 小型の配列が個別のレジス タに自動的に分割され、 結果の質が改善される こ と があ り ます。

UltraFast 高生産性設計手法ガイド 36UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 37: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

Vivado HLS では、 合成目標に基づいてシングルまたはデュ アル ポー ト ブロ ッ ク RAM のどち ら を使用するのかが自動的に判断されます。 た と えば、 間隔またはレ イ テンシを最小限に抑え る ためには、 デュ アル ポー ト のブロ ッ ク RAM が使用されます。 シングル ポー ト またはデュ アル ポー ト のどち らのブロ ッ ク RAM を使用するかを明示的に指定するには、 最適化指示子 RESOURCE を使用でき ます。

関数、 ループ、 タスクのパイプライン処理 高パフ ォーマン ス デザイ ンを達成するには、 PIPELINE および DATAFLOW 最適化指示子を使用し て、 関数、 ルー

プ、 およびタ ス ク をパイプラ イ ン処理する こ と が重要です。

次の図は、 パイプラ イ ン処理の概念を示し ています。 パイプラ イ ン処理し ない場合、 関数が完了する まで演算が順

に実行された後、 関数の次の実行または次の ト ラ ンザク シ ョ ンが実行されます。 パイプラ イ ン処理する と、 次の ト

ラ ンザク シ ョ ンはハード ウ ェ ア リ ソースが使用可能になる と開始し ます。

PIPELINE 指示子を関数またはループに使用する と、 最小のエ リ ア オーバーヘッ ド でスループ ッ ト を改善でき ます。

関数およびループはタ ス ク と考え られます。 DATAFLOW 指示子を使用する と タ ス ク をパイプラ イ ン処理でき、 デー

タ依存性で許容されていれば、 タ ス ク を同時に実行でき ます。

図 4-4 は、 タ ス ク のパイプラ イ ン処理の概念を示し ています。 合成後、 デフ ォル ト では func_A、 func_B、 func_C

の順に実行されますが、 DATAFLOW 最適化指示子を使用する と、 各関数がデータが使用可能になった ら実行される

よ う スケジュー リ ングでき ます。

X-Ref Target - Figure 4-3

図 4-3: パイプライン処理

void func(…) { op_Read; op_Compute; op_Write;

}

RDCMPWR

3 cycles

RD CMP WR RD CMP WR

1 cycle

RD CMP WR

2 cyclesRD CMP WR

2 cycles

(A) Without Function Pipelining (B) With Function Pipelining

UltraFast 高生産性設計手法ガイド 37UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 38: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

この例の場合、 元の関数のレ イ テンシ と間隔は 8 ク ロ ッ ク サイ クルです。 DATAFLOW 最適化を使用する と、 間隔は

3 ク ロ ッ ク サイ クルに削減されます。 この例に示すタ ス クは関数ですが、 DATAFLOW 最適化は関数間、 関数と ルー

プ間、 ループ間で実行でき ます。

Vivado HLS のリソース

Documentation Navigator の Vivado HLS デザイ ン ハブを使用する と、 Vivado HLS に関する次の リ ソースに簡単にア ク

セスでき ます。

• 動作に関するチュー ト リ アル ビデオ

• デザイ ン フ ローのあ ら ゆる点に関するチュー ト リ アル

• Vivado HLS ユーザー ガイ ド

• 複数のアプ リ ケーシ ョ ン ノ ー ト

デザイ ン ハブに関する詳細は、 「Documentation Navigator の使用」 を参照し て く ださい。

X-Ref Target - Figure 4-4

図 4-4: DATAFLOW 最適化

void top (a,b,c,d) { ... func_A(a,b,i1); func_B(c,i1,i2); func_C(i2,d)

return d;}

func_Afunc_Bfunc_C

8 cycles

func_A func_B func_C

8 cycles

3 cycles

func_Afunc_B

func_C

func_Afunc_B

func_C

5 cycles

(A) Without Dataflow Pipelining (B) With Dataflow Pipelining

X14266

UltraFast 高生産性設計手法ガイド 38UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 39: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

最適化手法

前のセ ク シ ョ ンで説明し たデフ ォル ト の合成ビヘイ ビアーに加えて、 Vivado HLS には多 く の最適化指示子 と コ ン

フ ィ ギュ レーシ ョ ンが含まれてお り 、 必要な結果になる よ う に合成を設定でき ます。 このセ ク シ ョ ンでは、 高パ

フ ォーマン ス を達成する よ う デザイ ンを最適化するための一般的な手法を示し ます。

Vivado HLS を使用し てデザイ ンを最適化する際には、 さ まざまな目標が考え られます。 この設計手法では、 ク ロ ッ

ク サイ クルご と に新しい入力データ 1 サンプルを処理するパフ ォーマン スができ るだけ高いデザイ ンを作成する こ

と を目標 と し ている と想定されるので、 そのための最適化がレ イ テンシまたは リ ソース を削減する最適化の前に実

行されます。

次の 「HLS 最適化手法」 セ ク シ ョ ンでは、 さ まざまな C コード アーキテ クチャに対し て こ こ で説明し た手法を適用

する方法を説明し ます。

こ こ で説明する最適化の詳細は、『Vivado Design Suite ユーザー ガイ ド : 高位合成』 (UG902) [参照 2] の次のセ ク シ ョ ン

を参照し て く ださい。

• イ ン ターフ ェ イ スの管理

• デザイ ン最適化

特定の最適化の詳細を確認する前に、 設計手法を確認し、 高位合成の最適化をグ ローバルな観点で理解し てお く こ

と をお勧めし ます。

UltraFast 高生産性設計手法ガイド 39UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 40: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

HLS 最適化手法

図 4-5 に、 Vivado HLS の最適化手法を示し ます。 まず、 C コード が正し く 機能するかど う かを検証する こ と の重要

性は、 どれだけ誇張し て も し過ぎ る こ と はあ り ません。 残 り の手順 (イ ン ターフ ェ イ スの決定、 デザイ ンのパイプラ

イ ン処理、 データ構造を最適化する こ と によ り 最適なパイプラ イ ン処理の妨げ と なる問題の解決、 レ イ テンシおよ

びエ リ アの問題の解決) については、 次に説明し ます。

次は、 最適化指示子すべてを リ ス ト し ています。 この リ ス ト には、 左側に Tcl コマン ド を、 右側にそれに該当するプ

ラ グマ指示子 (C コード に直接配置可能) を示し ています。

set_directive_allocation - ALLOCATION 指示子 set_directive_array_map - ARRAY_MAP 指示子 set_directive_array_partition - ARRAY_PARTITION 指示子 set_directive_array_reshape - ARRAY_RESHAPE 指示子 set_directive_data_pack - DATA_PACK 指示子 set_directive_dataflow - DATAFLOW 指示子 set_directive_dependence - DEPENDENCE 指示子 set_directive_expression_balance - EXPRESSION_BALANCE 指示子 set_directive_function_instantiate - FUNCTION_INSTANTIATE 指示子 set_directive_inline - INLINE 指示子 set_directive_interface - INTERFACE 指示子 set_directive_latency - LATENCY 指示子 set_directive_loop_flatten - LOOP_FLATTEN 指示子 set_directive_loop_merge - LOOP_MERGE 指示子 set_directive_loop_tripcount - LOOP_TRIPCOUNT 指示子 set_directive_occurrence - OCCURRENCE 指示子 set_directive_pipeline - PIPELINE 指示子 set_directive_protocol - PROTOCOL 指示子 set_directive_reset - RESET 指示子 set_directive_resource - RESOURCE 指示子 set_directive_stream - STREAM 指示子 set_directive_top - TOP 指示子

X-Ref Target - Figure 4-5

図 4-5: HLS 最適化手法

UltraFast 高生産性設計手法ガイド 40UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 41: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

set_directive_unroll - UNROLL 指示子

コ ンフ ィ ギュ レーシ ョ ンはデフ ォル ト の合成ビヘイ ビアーを変更し ます。 コ ンフ ィ ギュ レーシ ョ ンに該当するプラ

グマはあ り ません。 GUI では、 コ ンフ ィ ギュ レーシ ョ ンは [Solution] → [Solution Settings] → [General] から設定でき ま

す。 次に使用可能なコ ンフ ィ ギュ レーシ ョ ンすべての リ ス ト を示し ます。

config_array_partition - 配列の分割を コ ンフ ィ ギュ レーシ ョ ン config_bind - バイ ン ド のオプシ ョ ンを コ ンフ ィ ギュ レーシ ョ ン config_compile - 最適化を コ ンフ ィ ギュ レーシ ョ ン config_dataflow - データ フ ロー パイプラ イ ンを コ ンフ ィ ギュ レーシ ョ ン config_interface - I/O モード のコマン ド を コ ンフ ィ ギ ュ レーシ ョ ン config_rtl - RTL 生成のオプシ ョ ンを コ ンフ ィ ギ ュ レーシ ョ ン config_schedule - スケジューラー オプシ ョ ンを コ ンフ ィ ギュ レーシ ョ ン

すべての最適化指示子および合成コ ンフ ィ ギュ レーシ ョ ンの リ ス ト を取得し てお く だけでな く 、 それら を使用する

手法を理解し てお く こ と をお勧めし ます。

手順 1: 初期最適化

次の表に、 デザイ ンに追加するかど う かを最初に考慮する必要のあ る指示子を リ ス ト し ます。

デザイ ン イ ン ターフ ェ イ スは通常システムのその他のブロ ッ ク で定義されます。 I/O プロ ト コルのタ イプを指定する

と合成で何が達成でき るのかを判断しやす く なるので、 デザイ ンの最適化に進む前に INTERFACE 指示子を使用し

て これを指定し てお く こ と をお勧めし ます。

アルゴ リ ズムがス ト リ ー ミ ング方法でデータにア ク セスする場合は、 ス ト リ ー ミ ング プロ ト コルの 1 つを使用し て、

高パフ ォーマン スが達成される よ う にする こ と を考慮し ます。

ヒン ト : I/O プロ ト コルが外部ブロ ッ ク で完全に固定され、 変更されない場合は、 INTERFACE 指示子を直接 C コード

にプラ グマ と し て挿入し てみる こ と を考慮し て く ださい。

構造体が最上位引数 リ ス ト で使用される場合、 個別の要素に分解され、 構造体の各要素が個別のポー ト と してイ ンプ

リ メ ン ト されます。 DATA_PACK 最適化を使用して構造体全体を 1 つのデータ ワード と してイ ンプ リ メ ン ト し、 1 つ

の RTL ポー ト になる よ う にする と有益な場合があ り ます。 構造体に大きな配列が含まれる場合は、 注意が必要です。

配列の各要素がデータ ワード にイ ンプ リ メ ン ト される と、 かな り 幅の広いデータ ポー ト になる こ と があ り ます。

デザイ ンを最初に合成し た と きによ く 発生する問題は、 レポー ト フ ァ イルにレ イ テンシ と間隔が数値ではな く ク エ

スチ ョ ン マーク (?) と し て表示される こ と です。 デザイ ンに範囲が可変のループがあ る場合は、 Vivado HLS でレ イ

テンシを判断できず、 この状況を示すためにク エスチ ョ ン マーク (?) が使用されます。

表 4-1: 最適化スト ラテジの手順 1: 初期最適化

指示子およびコンフ ィギュレーシ ョ ン 説明

INTERFACE 関数記述から RTL ポー ト をどのよ う に作成するかを指定し ます。

DATA_PACK 構造体 (struct) のデータ フ ィ ール ド を ワード幅が広い 1 つのス カ ラー

にパッ ク し ます。

LOOP_TRIPCOUNT 範囲が可変のループに使用されます。 ループの反復回数の見積も り

を指定し ます。 これは合成には影響がな く 、 レポー ト にのみ影響し

ます。

Config Interface 最上位関数の引数に関連付け られていない I/O ポー ト を制御し、 最終

的な RTL から未使用のポー ト を削除し ます。

UltraFast 高生産性設計手法ガイド 41UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 42: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

この状況を解消するには、 [Analysis] パースペク テ ィ ブまたは合成レポー ト を使用し、 合成で数値がレポー ト されな

かった最下位ループを見つけて、 LOOP_TRIPCOUNT 指示子を使用し て見積も られた tripcount を適用し ます。 これ

によ り 、 レ イ テンシ と間隔の値がレポー ト される よ う にな り 、 さ まざまな最適化のソ リ ューシ ョ ンを比較でき る よ

う にな り ます。

注記: 範囲が可変のループは完全には展開でき ないため、 階層のそれよ り 上位の関数およびループはパイプラ イ ン処

理でき ません。 これについては、 次のセ ク シ ョ ンで説明し ます。

最後に、 グ ローバル変数は通常合成では関数のス コープ内で書き込みおよび読み出し されるので、 最終的な RTL デ

ザイ ンで I/O ポー ト であ る必要はあ り ません。 グ ローバル変数が C 関数からの情報の読み出しに使用される場合は、

イ ン ターフ ェ イ ス コ ンフ ィ ギュ レーシ ョ ンを使用し てそれら を I/O ポー ト にする こ と をお勧めし ます。

手順 2: パフォーマンスのためのパイプライン処理 高パフ ォーマン ス デザイ ンを作成する次の段階では、 関数、 ループ、 およびタ ス ク をパイプラ イ ン処理し ます。 次

の表に、 パイプラ イ ン処理のために使用する指示子を示し ます。

最適化プロセスのこの段階では、 でき るだけ多 く の同時処理演算が作成されます。 PIPELINE 指示子は関数および

ループに適用でき ます。 DATAFLOW 指示子を関数およびループを含むレベルで使用する と、 それら を並列実行でき

ます。

推奨されるのはボ ト ムア ッ プ方式で、 次の点に注意する必要があ り ます。

• 関数およびループの中には、 サブ関数が含まれる ものがあ り ます。 サブ関数がパイプラ イ ン処理されていない

と、 それよ り 上位の関数がパイプラ イ ン処理された と きにあま り 改善が見られないこ と があ り ます。 これは、

サブ関数がパイプラ イ ン処理されていないこ と が原因です。

• 関数およびループの中には、 下位ループが含まれる ものがあ り ます。 PIPELINE 指示子を使用する と、 それよ り

下の階層のループすべてが自動的に展開され、 かな り 多 く のロ ジ ッ クが作成される可能性があ り ます。 このた

め、 下位階層のループをパイプラ イ ン処理する こ と を推奨し ます。

• 範囲が可変のループは展開でき ないので、 それよ り 上の階層のループおよび関数はパイプラ イ ン処理でき ませ

ん。 この問題を回避するには、 これらのループをパイプラ イ ン処理し て、 DATAFLOW 最適化を使用し て、 ルー

プを含む関数のパフ ォーマン スが最大になる よ う にし ます。 または、 可変範囲を削除する よ う ループを記述し

直し ます。

最適化プロセスのこの段階での基本的なス ト ラ テジは、 タ ス ク (関数およびループ) をでき るだけパイプラ イ ン処理

する こ と です。 どの関数およびループをパイプラ イ ン処理するかや DATAFLOW 指示子をど こに適用する などの詳

細は、 「最適化ス ト ラ テジ」 を参照し て く ださい。

表 4-2: 最適化スト ラテジの手順 2: パフォーマンスのためのパイプライン処理

指示子およびコンフ ィギュレーシ ョ ン 説明

PIPELINE ループまたは関数内の演算を同時に実行でき る よ う にし て開始間隔を削

減し ます。

DATAFLOW タ ス ク レベルのパイプラ イ ン処理を有効にし、 関数およびループが同時

に実行される よ う にし ます。 開始間隔を最小にするために使用し ます。

RESOURCE RTL で変数 (配列、 算術演算、 関数の引数) を イ ンプ リ メ ン ト するのに使

用する リ ソース (コ ア) を指定し ます。

Config Compile 反復カ ウ ン ト に基づいてループが自動的にパイプラ イ ン処理される よ う

にし ます。

UltraFast 高生産性設計手法ガイド 42UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 43: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

ループまたは入れ子のループを多 く 含むデザイ ンに対し ては、 ループ反復カ ウ ン ト に基づいてデザイ ンのすべての

ループを自動的にパイプラ イ ン処理する コ ンパイル設定があ り ます。 詳細は、 『Vivado Design Suite ユーザー ガイ ド :

高位合成』 (UG902) [参照 2] のこ のセ ク シ ョ ンを参照し て く ださい。

あま り 一般的ではあ り ませんが、 演算子レベルでパイプラ イ ン処理を適用する こ と も でき ます。 た と えば、 FPGA の

ワ イヤ配線によ り 予期し ない大き な遅延が発生し、 デザイ ンを必要な ク ロ ッ ク周波数でイ ンプ リ メ ン ト する こ と が

困難な場合があ り ます。 このよ う な場合、 RESOURCE 指示子を使用し て乗算器、 加算器、 およびブロ ッ ク RAM な

どの特定の演算をパイプラ イ ン処理でき ます。

RESOURCE 指示子は、 C コード で演算を イ ンプ リ メ ン ト するのにどのハード ウ ェ ア コ アを使用するかを指定し ま

す。 1 よ り 大きいレ イ テンシ値で リ ソース を イ ンプ リ メ ン ト する よ う に指定する と、 Vivado HLS でその演算用に追

加のパイプラ イ ン段が使用されます。 RTL 合成では、 これらの追加のパイプラ イ ン段を使用し て全体的な タ イ ミ ン

グを改善でき ます。

次の演算では、 パイプラ イ ン処理された イ ンプ リ メ ンテーシ ョ ンがサポー ト されます。

• 使用可能なマルチステージ (*nS) コ アがあ る標準的な算術演算

• 浮動小数点演算

• ブロ ッ ク RAM でイ ンプ リ メ ン ト される配列

手順 3: パフォーマンスのための構造最適化

C コード に、 必要なパフ ォーマン ス を達成する ための関数またはループのパイプラ イ ン処理を妨げる よ う な記述が

含まれている こ と があ り ます。 この場合、 コード を変更する必要のあ る こ と も あ り ますが、 ほ と んどの場合はほか

の最適化指示子を使用する こ と によ り これらの問題を解決でき ます。

次に、 最適化指示子を使用し てパイプラ イ ン処理のパフ ォーマン ス を改善する例を示し ます。 最初の例では、 ルー

プに PIPELINE 指示子を追加し て、 ループのパフ ォーマン ス を改善し ています。

#include "bottleneck.h"

dout_t bottleneck(din_t mem[N]) {

dout_t sum=0;int i;

SUM_LOOP: for(i=3;i<N;i=i+4)#pragma HLS PIPELINEsum += mem[i] + mem[i-1] + mem[i-2] + mem[i-3];

return sum;}

上記のコード が合成される と、 次の メ ッ セージが表示されます。

INFO: [SCHED 61] Pipelining loop 'SUM_LOOP'.WARNING: [SCHED 69] Unable to schedule 'load' operation ('mem_load_2', bottleneck.c:62) on array 'mem' due to limited memory ports.INFO: [SCHED 61] Pipelining result: Target II: 1, Final II: 2, Depth: 3.I

UltraFast 高生産性設計手法ガイド 43UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 44: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

パイプラ イ ンで必要なパフ ォーマン スが満た されない場合は、 [Analysis] パースペク テ ィ ブでデザイ ンを確認し ま

す。 [Analysis] パースペク テ ィ ブについては、 『Vivado Design Suite ユーザー ガイ ド : 高位合成』 (UG902) [参照 2] のこ

のセ ク シ ョ ンを参照し て く ださい。 次の図に、 このデザイ ン例の [Analysis] パースペク テ ィ ブの表示を示し ます。

• この図では、 メ モ リ (ブロ ッ ク RAM) ア ク セスがハイ ラ イ ト されています。 これらは、 上記のコード の mem 配

列に該当し ます。

• 各ア ク セスには、 ア ド レ スの生成に 1 サイ クル、 データの読み出しに 1 サイ クルの合計 2 ク ロ ッ ク サイ クルか

か り ます。

• ブロ ッ ク RAM には最大 2 つのデータ ポー ト しかないので、 サイ クル C1 で開始でき る メ モ リ 読み出しは 2 つだ

けです。

• 3 つ目と 4 つ目の メ モ リ 読み出しは C2 でのみ開始でき ます。

• 次の メ モ リ 読み出しのセ ッ ト を開始でき るのは、 早 く て もサイ クル C3 です。 これは、 ループが II=2 であ る こ

と を意味し、 ループへの次の入力セ ッ ト は 2 サイ クルご と にのみ読み出し可能です。

メ モ リ ポー ト の制限によ る問題は、 配列 mem に ARRAY_PARTITION 指示子を使用する と解決でき ます。 この指示

子を使用する と、 配列がよ り 小さい配列に分割され、 データ ポー ト 数が増加し、 データ構造が改善されて、 高パ

フ ォーマン スのパイプラ イ ン処理が可能にな り ます。

X-Ref Target - Figure 4-6

図 4-6: ポートが少なすぎるために発生するパイプライン エラー

UltraFast 高生産性設計手法ガイド 44UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 45: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

次に示すよ う に指示子を追加する と、 配列 mem が 2 つのデュ アル ポー ト メ モ リ に分割され、 4 つの読み出しすべて

を 1 ク ロ ッ ク サイ クルで実行でき る よ う にな り ます。 配列を分割するには、 複数のオプシ ョ ンがあ り ます。 こ の例

では、 係数 2 でのサイ ク リ ッ ク分割によ り 、 最初のパーテ ィ シ ョ ンに元の配列からの要素 0、 2、 4 などが含まれ、 2

つ目のパーテ ィ シ ョ ンに要素 1、 3、 5 などが含まれます。 デュ アル ポー ト ブロ ッ ク RAM を使用する と、 要素 0、 1、

2、 および 3 を 1 つのク ロ ッ ク サイ クルで読み出すこ と ができ ます。

#include "bottleneck.h" dout_t bottleneck(din_t mem[N]) {#pragma HLS ARRAY_PARTITION variable=mem cyclic factor=2 dim=1

dout_t sum=0;int i;

SUM_LOOP: for(i=3;i<N;i=i+4)#pragma HLS PIPELINEsum += mem[i] + mem[i-1] + mem[i-2] + mem[i-3];

return sum;}

ループおよび関数をパイプラ イ ン処理する際には、 ほかにも問題が発生する可能性があ り ます。 次の表に、 これら

の問題に対処するのに有益な、 データ構造のボ ト ルネ ッ ク を削減する指示子を リ ス ト し ます。

配列の自動分割には、 ARRAY_PARTITION 指示子だけでな く 、 配列分割のコ ンフ ィ ギ ュ レーシ ョ ン (Config Array

Partition) も使用でき ます。

表 4-3: 最適化スト ラテジの手順 3: パフォーマンスのための構造最適化

指示子およびコンフ ィギュレーシ ョ ン

説明

ARRAY_PARTITION 大型の配列を複数の配列または個別のレジス タに分割し、 データへのア ク セス を

改善し、 ブロ ッ ク RAM のボ ト ルネ ッ ク を削除し ます。

DEPENDENCE ループ キ ャ リ ー依存性を克服し、 ループをパイプラ イ ン処理でき る よ う にする (ま

たはよ り 短い間隔でパイプラ イ ンでき る よ う にする ) 追加情報を提供し ます。

INLINE 関数を イ ン ラ イ ン化し、 関数の階層をすべて削除し ます。 関数の境界を超えた ロ

ジ ッ ク最適化を イ ネーブルにし、 関数呼び出しのオーバーヘッ ド を削減する こ と

によ り 、 レ イ テンシ/間隔を改善し ます。

UNROLL for ループを展開し、 複数の演算を 1 つにま と めた ものではな く 、 複数の個別の演

算を作成し ます。

Config Array Partition グ ローバル配列を含めた配列の分割方法と、 分割が配列ポー ト に影響するかど う

かを指定し ます。

Config Compile 自動ループ パイプラ イ ンおよび浮動小数点の math 最適化など、 合成特有の最適化

を制御し ます。

Config Schedule 合成のスケジュー リ ング段階で使用するエフ ォー ト レベル、 出力 メ ッ セージの詳

細度、 およびタ イ ミ ングを満たすためにパイプラ イ ン処理された タ ス ク の II を緩

和するかど う かを指定し ます。

CONFIG_UNROLL 指定し たループ繰 り 返し数以下のすべてのループを展開し ます。

UltraFast 高生産性設計手法ガイド 45UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 46: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

コ ンパイルのコ ンフ ィ ギュ レーシ ョ ン (Config Compile) を使用する と、 ループ階層が自動的にパイプラ イ ン処理され

ます。 ループをパイプラ イ ン処理する際に暗示される依存性を削除するため、 DEPENDENCE 指示子が必要な場合が

あ り ます。 このよ う な依存性は、 次のよ う に SCHED-68 メ ッ セージでレポー ト されます。

@W [SCHED-68] Target II not met due to carried dependence(s)

INLINE 指示子を使用する と、 関数の境界が削除されます。 これは、 ロ ジ ッ ク またはループを 1 レベル上の階層に移

動するために使用でき ます。 ロ ジ ッ ク をその上の関数に含める と関数内のロ ジ ッ ク を よ り 効率的にパイプラ イ ン処

理でき る よ う にな り 、 一連のループを上の階層に含める と ほかのループ と共にデータ フ ローしやす く なる こ と があ

り ます。

ループを必要な開始間隔 (II) でパイプラ イ ン処理でき ない場合は、 UNROLL 指示子が必要であ る可能性があ り ます。

ループをパイプラ イ ン処理し て も II=4 しか達成でき ない場合、 システム内のその他のループおよび関数も II=4 に制

約されます。 ループを展開する と さ らにロ ジ ッ ク が作成されますが、 ボ ト ルネ ッ クは削除されるので、 場合によ っ

てはループを展開する と有益です。

スケジュー リ ング設定 (Config Schedule) を使用する と、 ス ケジュー リ ング メ ッ セージの詳細度を増加し、 スケ

ジュー リ ングのエフ ォー ト レベルを制御でき ます。 詳細オプシ ョ ンを指定する と、 ス ケジュー リ ングで制約を満た

すこ と ができ ない場合に、 Vivado HLS でク リ テ ィ カル パスが リ ス ト されます。

通常は、 スケジュー リ ング エフ ォー ト を増加し て も ス ケジュー リ ングが改善される こ と は少ないですが、 オプシ ョ

ンは提供されています。 開始間隔 (II) を改善する ために最適化指示子および設定を使用できない場合、 コード の変更

が必要 と なる可能性があ り ます。 この例については、 『Vivado Design Suite ユーザー ガイ ド : 高位合成』 (UG902) [参

照 2] のこのセ ク シ ョ ンを参照し て く ださい。

手順 4: レイテンシの削減

Vivado HLS で開始間隔 (II) を最小限に抑え る処理が終了する と、 レ イ テンシを最小限に抑え る ための処理が実行さ

れます。 次の表に リ ス ト される最適化指示子を使用する と、 特定のレ イ テンシを削減または指定でき ます。

ほ と んどのアプ リ ケーシ ョ ンでは、 重要なのはスループ ッ ト であ り 、 レ イ テンシは重要ではないので、 ループおよ

び関数をパイプラ イ ン処理する場合はこれらの指示子は通常必要あ り ません。 ループおよび関数がパイプラ イ ン処

理されない場合は、 前のタ ス ク が完了する まで次の入力セ ッ ト を読み出すこ と はでき ないので、 スループ ッ ト がレ

イ テンシによ り 制限されます。

必要なレ イ テンシを指定するには、 LATENCY 指示子を使用し ます。 ループ最適化指示子は、 ループ階層をフ ラ ッ ト

にし た り 、 連続するループを結合するために使用でき ます。 レ イ テンシを向上でき るのは、 通常ループに入って出

る までに 1 ク ロ ッ ク サイ クル費やされるからです。 ループ間の遷移数が少ないほど、 デザイ ンが完了する までにか

かる ク ロ ッ ク数も少な く な り ます。

表 4-4: 最適化スト ラテジの手順 4: レイテンシの削減

指示子 説明

LATENCY 最小および最大レ イ テンシ制約を指定し ます。

LOOP_FLATTEN 入れ子のループを 1 つのループに展開し、 レ イ テンシを改善し ます。

LOOP_MERGE 連続するループを結合し て全体的なレ イ テンシを削減し、 共有を増やし て

最適化を向上し ます。

UltraFast 高生産性設計手法ガイド 46UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 47: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

手順 5: エリアの削減

必要なパフ ォーマン ス ターゲ ッ ト (または開始間隔 (II)) が満た された ら、 次は同じパフ ォーマン ス を維持し ながら

エ リ アを削減し ます。

DATAFLOW 最適化を使用し てお り 、 デザイ ンのタ ス クがス ト リ ー ミ ング データであ るかど う かを Vivado HLS で判

断でき ない場合は、 ピンポン バッ フ ァーを使用し てデータ フ ロー タ ス ク間に メ モ リ チャネルがイ ンプ リ メ ン ト され

ます。 デザイ ンがパイプラ イ ン処理されてお り 、 データが 1 つのタ ス ク から次のタ ス ク にス ト リ ー ミ ング される場

合、 データ フ ロー コ ンフ ィ ギュ レーシ ョ ン config_dataflow を使用し てデフ ォル ト の メ モ リ チャネルで使用さ

れる ピンポン バッ フ ァーを FIFO バッ フ ァーに変換する こ と によ り 、 エ リ アを大幅に削減でき ます。 FIFO の深さは

必要最小限のサイ ズに設定でき ます。

データ フ ロー コ ンフ ィ ギュ レーシ ョ ン config_dataflow は、 すべての メ モ リ チャネルのデフ ォル ト イ ンプ リ メ

ンテーシ ョ ンを指定し ます。 STREAM 指示子を使用する と、 個別の配列をブロ ッ ク RAM と し て イ ンプ リ メ ン ト す

るか、 FIFO と し て イ ンプ リ メ ン ト するかを指定でき ます。

デザイ ンが hls::stream I/O プロ ト コルを使用し て イ ンプ リ メ ン ト されている場合、 メ モ リ チャネルはデフ ォル ト

で深さ 1 の FIFO にな り 、 データ コ ンフ ィ ギ ュ レーシ ョ ンは必要あ り ませんが、 入力データ よ り も多 く のデータが出

力される補間などのタ ス ク では、 STREAM 指示子を使用し て FIFO のサイ ズを増加でき ます。

次の表に、 デザイ ンを イ ンプ リ メ ン ト するために使用される リ ソース を最小限に抑え る場合に考慮すべきその他の

指示子を示し ます。

表 4-5: 最適化スト ラテジの手順 5: エリアの削減

指示子 説明

ALLOCATION 使用される演算、 コ ア、 または関数の数を制限し ます。 これ

によ り ハード ウ ェ ア リ ソースが強制的に共有されるので、 レ

イ テンシが増加する可能性があ り ます。

ARRAY_MAP 複数の小型の配列を 1 つの大型の配列にま と め、 ブロ ッ ク

RAM リ ソース を削減し ます。

ARRAY_RESHAPE 配列を多数の要素を含むものから ワード幅の広いものに変更

し ます。 多数のブロ ッ ク RAM を使用せずにブロ ッ ク RAM ア

ク セス を向上するのに有益です。

LOOP_MERGE 連続するループを結合し て全体的なレ イ テンシを削減し、 共

有を増やし て最適化を向上し ます。

OCCURRENCE 関数またはループをパイプラ イ ン処理する際に、 あ る ロ ケー

シ ョ ンのコード がそれを含む関数またはループのコード よ り

も低速で実行される こ と を指定し ます。

RESOURCE 変数 (配列、 算術演算、 関数引数) を RTL にイ ンプ リ メ ン ト す

るのに使用する ラ イブラ リ リ ソース (コ ア) を指定し ます。

STREAM DATAFLOW 最適化中に特定の メ モ リ チャネルを FIFO または

RAM と し て イ ンプ リ メ ン ト する よ う 指定し ます。

Config Bind 合成のバイ ン ド段階で使用するエフ ォー ト レベルを指定し ま

す。 使用される演算数をグ ローバルに最小限に抑え る ために

使用し ます。

Config Dataflow DATAFLOW 最適化でのデフ ォル ト の メ モ リ チャネル と FIFO

の深さ を指定し ます。

UltraFast 高生産性設計手法ガイド 47UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 48: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

演算数を制限し、 演算を イ ンプ リ メ ン ト するのに使用する コ アを選択するには、 ALLOCATION と RESOURCE 指示

子を使用し ます。 た と えば、 関数またはループに乗算器が 1 つだけ使用される よ う に制限し、 パイプラ イ ン乗算器

を使用し て イ ンプ リ メ ン ト される よ う 指定でき ます。 バイ ン ド コ ンフ ィ ギュ レーシ ョ ン (Config Bind) を使用する と、

特定の演算の使用をグ ローバルに制限でき ます。

重要: 最適化指示子は、 指定し たス コープ内にのみ適用されます。

開始間隔を向上するために ARRAY_PARITION 指示子を使用する場合は、 その代わ り に ARRAY_RESHAPE 指示子を

使用する こ と も考慮し てみて く ださい。 ARRAY_RESHAPE 最適化では、 配列の分割と同様のタ ス ク が実行されます

が、 分割によ り 作成された要素がよ り 幅の広いデータ ポー ト を持つ 1 つのブロ ッ ク RAM に再結合されます。

C コード に類似のイ ンデッ ク ス を持つ一連のループが含まれる場合、 LOOP_MERGE 指示子を使用し てループを結合

する こ と によ り 実行でき る よ う になる最適化も あ り ます。

最後に、 パイプラ イ ン領域のコード の一部が、 領域の残 り の部分よ り も小さい開始間隔で動作する場合は、

OCCURENCE 指示子を使用し て、 こ のロ ジ ッ ク が低いレー ト で実行される よ う 最適化でき ます。

最適化スト ラテジ

最適化は、 通常すべてのタ イプの C コード に適用でき ます。 高パフ ォーマン スのデザイ ンを得るのに重要な最適化

指示子は、 PIPELINE および DATAFLOW 指示子です。 このセ ク シ ョ ンでは、 C コード のさ まざまなアーキテ クチャ

にこれらの指示子を適用する方法を説明し ます。

C 関数には、 基本的にはフ レーム ベース と サンプル ベースの 2 種類あ り ます。

どち らのス タ イルを使用し て も、 ほぼ同一の RTL IP を生成でき ますが、 最適化指示子の適用方法は異な り ます。 ど

ち らのス タ イルを使用するかは、 ユーザーしだいです。 記述しやすい方のス タ イルを使用し て く ださ い。

フレーム ベースの C コード

次にフ レーム ベースの C コード の例を示し ます。 こ のコーデ ィ ング ス タ イルの主な特徴は、 各 ト ラ ンザク シ ョ ンで

関数が複数のデータ サンプル (1 つのデータ フ レーム) を処理する こ と です。 ト ラ ンザク シ ョ ンは、 C 関数の 1 つの

完結し た実行 と考え られます。

void foo(data_t in1[HEIGHT][WIDTH],data_t in2[HEIGHT][WIDTH],data_t out[HEIGHT][WIDTH] {

Loop1: for(int i = 0; i < HEIGHT; i++) {Loop2: for(int j = 0; j < WIDTH; j++) {out[i][j] = in1[i][j] * in2[i][j];Loop3: for(int k = 0; k < NUM_BITS; k++) {

}}}

データは通常配列 と し て供給されますが、 ポイ ン ターまたは hls::stream と し て供給する こ と も可能です。 ポイ

ン ターにはポイ ン ター演算を使用し て複数回ア ク セスでき、 hls::stream には関数内で複数回ア ク セスでき ます。

UltraFast 高生産性設計手法ガイド 48UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 49: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

フ レーム ベースのコーデ ィ ング ス タ イルのも う 1 つの特徴は、 データが通常ループを使用し てア ク セスおよび処理

される こ と です。 上記のコード は、 この典型的な例です。

C コード をパイプラ イ ン処理する場合は、 PIPELINE 指示子をデータの 1 サンプルが処理される箇所に配置し ます。

PIPELINE 指示子の適用箇所について、 上記の例のレベルを使用し て説明し ます。

関数レベル: 関数は、 入力 と し てデータのフ レーム (in1 および in2) を受信し ます。 関数が II=1 (各ク ロ ッ ク サイ クル

ご と に新しい入力セ ッ ト を読み出し ) でパイプラ イ ン処理される と、 in1 と in2 のすべての HEIGHT*WIDTH 値を 1 つ

のク ロ ッ ク サイ クルで読み出すよ う にツールに命令されます。

これが意図するデザイ ンであ る と い う 可能性は低いはずです。

PIPELINE 指示子を適用する場合、 こ のレベルよ り も下の階層のループすべて (この場合、 foo の下のすべて) が展開

される必要があ り ます。 これは、 パイプラ イ ン内に順序ロ ジ ッ ク を存在させる こ と はでき ない と い う パイプラ イ ン

処理の要件です。 このため、 ロ ジ ッ ク のコ ピーが HEIGHT*WIDTH*NUM_ELEMENT 個作成され、 デザイ ンが大き

く な り ます。

配列は、 次のタ イプのイ ン ターフ ェ イ ス と し て イ ンプ リ メ ン ト でき ます。

• ブロ ッ ク RAM イ ン ターフ ェ イ ス (デフ ォル ト )

• AXI4-Lite イ ン ターフ ェ イ ス

• AXI4-Stream イ ン ターフ ェ イ ス

• FIFO イ ン ターフ ェ イ ス

デフ ォル ト のブロ ッ ク RAM イ ン ターフ ェ イ スは、 シングルポー ト またはデュ アルポー ト のイ ン ターフ ェ イ ス と し て

イ ンプ リ メ ン ト でき、 ポー ト を介し て ク ロ ッ ク ご と に 2 サンプルまでを読み出し または書き込みでき ます。 ス ト

リ ー ミ ング イ ン ターフ ェ イ ス (AXI4-Stream、 双方向ハン ド シェ イ ク、 または FIFO イ ン ターフ ェ イ ス) では、 データ

がス ト リ ー ミ ングでア ク セス されている場合のみ使用可能で、 ク ロ ッ ク ご と に 1 サンプルしか読み出すこ と ができ

ません。 AXI4-Lite イ ン ターフ ェ イ スは、 低速のア ド レ ス指定可能な イ ン ターフ ェ イ スです。

HLS 最適化手法の手順 3 を使用する と、 このボ ト ルネ ッ ク を回避でき ます。 同じ ク ロ ッ ク サイ クルですべてのデー

タ値にア ク セスするには、 配列を個別の要素に分割し、 HEIGHT*WIDTH 個のポー ト (各ポー ト がデュ アル ポー ト ブ

ロ ッ ク RAM イ ン ターフ ェ イ スの場合はその半分の数のポー ト ) を作成する必要があ り ます。 これによ り 、 すべての

ポー ト を同じ ク ロ ッ ク サイ クルで読み出せる よ う にな り ます。 出力ポー ト の場合も同様です。

注記: 最適化手法の詳細は、 「最適化手法」 を参照し て く ださい。

この結果、 並列処理の多いデザイ ンにはな り ますが、 デザイ ン自体は大き く な り ます。

Loop1 レベル: Loop1 内のロ ジ ッ ク では、 2 次元行列の行全体が処理されます。 こ こ に PIPELINE 指示子を配置する

と、 ク ロ ッ ク サイ クルご と に 1 行を処理するデザイ ンが作成されます。 これによ り 、 これよ り 下のループは展開さ

れるので、 追加のロ ジ ッ ク が作成されます。

大型の並列デザイ ンは、 最初のオプシ ョ ンほど大型ではな く 、 高速でも あ り ません。

Loop2 レベル: ループ内のロ ジ ッ クは、 配列から 1 サンプルを処理し よ う と し ます。 デザイ ンで ク ロ ッ ク サイ クルご

と に 1 サンプル処理される場合は、 これがパイプラ イ ン処理を実行する レベルです。

これによ り Loop3 が完全に展開されますが、 Loop2 が各ク ロ ッ ク で 1 サンプル処理するので、 これは要件であ り 、 通

常必要です。 典型的なデザイ ンでは、 Loop3 のロ ジ ッ クはシフ ト レジス タであ るか、 1 ワード内のビ ッ ト を処理し ま

す。 ク ロ ッ ク ご と に 1 サンプル処理される よ う にするには、 ループを展開し て これらの処理が並列実行される よ う

にし て く ださい。

UltraFast 高生産性設計手法ガイド 49UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 50: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

このデザイ ンでは、 各ク ロ ッ ク で 1 データ サンプルが処理され、 必要な場合にのみ配列ロ ジ ッ ク を作成し て、 こ の

レベルのデータ スループ ッ ト が達成されます。

Loop3 レベル: 前述のよ う に、 Loop3 のロ ジ ッ クは通常ビ ッ ト レベルまたはデータ シフ ト タ ス ク を実行し ます (これ

よ り 上のレベルでは各データ サンプルで動作)。 た と えば、 Loop3 にシフ ト レジス タ演算が含まれて、 Loop3 がパイ

プラ イ ン処理される場合、 ク ロ ッ ク サイ クルご と に 1 つのデータ値をシフ ト する よ う にツールに伝え られます。 デ

ザイ ンは Loop2 でのみロ ジ ッ ク に戻 り 、 すべてのサンプルがシフ ト された後に次の入力を読み出し ます。

この例の場合、 パイプラ イ ン処理する理想的な箇所は Loop2 です。

フ レーム ベースのコード の場合、 ループ レベルでパイプラ イ ン処理、 通常はサンプルのレベルで動作するループを

パイプラ イ ン処理する こ と をお勧めし ます。 確信がない場合は、 C コード に print コマン ド を記述し、 C シ ミ ュ レー

シ ョ ンを使用し て これが各ク ロ ッ ク サイ クルで実行するべき レベルであ るかど う かを確認し て く ださ い。

前述のよ う に、 フレーム ベースのデザイ ンでは、 ARRAY_PARTITION 指示子を使用して配列を小さ なブロ ッ ク (また

はイ ン ターフ ェ イ スの配列の複数のポー ト ) に分割し て、 パフ ォーマンスのボ ト ルネ ッ ク を解消するのが一般的です。

サンプル ベースの C コード

次にサンプル ベースの C コード の例を示し ます。 こ のコーデ ィ ング ス タ イルの主な特徴は、 ト ラ ンザク シ ョ ンご と

に関数で 1 つのデータ サンプルが処理される こ と です。

void foo (data_t *in, data_t *out) {

static data_t acc;

Loop1: for (int i=N-1;i>=0;i--) {acc+= ..some calculation..; }

*out=acc>>N;}

サンプル ベースの関数では、 データはス カ ラー、 ポイ ン ター、 または hls::stream 変数 と し て供給されます。

ポイ ン ターまたは hls::stream は関数内では何度でも ア ク セスでき ますが、 サンプル ベースの関数では一度しか

ア ク セスでき ません。

サンプル ベースのコーデ ィ ング ス タ イルでは、 関数にス タ テ ィ ッ ク変数が含まれる こ と がよ く あ り ます。 ス タ

テ ィ ッ ク変数の値は、 アキ ュ ムレータやサンプル カ ウ ン ターなど、 関数呼び出し間で保持される必要があ り ます。

II = 1 (各ク ロ ッ ク サイ クルで 1 つのデータ値の読み出し ) を達成するには、 関数をパイプラ イ ン処理する必要があ り

ます。 これによ り ループが展開され、 追加ロ ジ ッ ク が作成されて し まいますが、 これを回避する方法はあ り ません。

Loop1 がパイプラ イ ン処理される と、 完了するのに N ク ロ ッ ク サイ クル以上かか り ます。 こ の後にのみ、 関数は次

の x 入力値を読み出すこ と ができ ます。

サンプル レベルで動作する C コード を使用する際は、 常に関数をパイプラ イ ン処理する よ う にし ます。 サンプル

ベースのデザイ ンのループは、 通常シフ ト レジス タ関数を実行する配列に対し て動作するので、 これらの配列を個

別の要素に分割し、 すべてのサンプルが 1 つのク ロ ッ ク サイ クルでシフ ト される よ う にする こ と も珍し く あ り ませ

ん。 そ う し ない場合、 シフ ト 演算はデュ アル ポー ト ブロ ッ ク RAM へのサンプルの読み出しおよび書き込みに制限

されます。

この例でのソ リ ューシ ョ ンは、 関数 foo をパイプラ イ ン処理する こ と です。 これによ り 、 ク ロ ッ ク ご と に 1 サンプ

ル処理するデザイ ンが得られます。

UltraFast 高生産性設計手法ガイド 50UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 51: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

RTL 検証

Vivado HLS での RTL 検証は、 完全に自動化されています。 RTL/C 協調シ ミ ュ レーシ ョ ン中は、 C シ ミ ュ レーシ ョ ン

で使用されたの と同じ C テス ト ベンチが再利用され、 合成された関数が RTL デザイ ンに置き換え られます。 Vivado

HLS では、正しいイ ン ターフ ェ イ ス プロ ト コルを使用し た RTL デザイ ン と のデータ シーケン スの送受信が自動的に

実行されます。

C テス ト ベンチが再利用されるので、 RTL テス ト ベンチを作成する必要はあ り ません。

デザイ ンでの選択によ り 、 RTL/C 協調シ ミ ュ レーシ ョ ンを使用でき ない場合があ り ます。 RTL/C 協調シ ミ ュ レー

シ ョ ンを実行するには、 次の条件が満た されている必要があ り ます。

• 最上位関数が ap_ctrl_hs または ap_ctrl_chain ブロ ッ ク レベル イ ン ターフ ェ イ ス を使用し て合成されて

いる。

• デザイ ンが純粋に組み合わせであ る。

• 最上位関数の開始間隔 (II) が 1 であ る。

• イ ン ターフ ェ イ スは、 ス ト リ ー ミ ングであ り ap_fifo、 ap_hs、 または axis イ ン ターフ ェ イ ス モード を使用

し て イ ンプ リ メ ン ト されるすべての配列であ る。

これら の条件のいずれかが満た されない場合、 次の メ ッ セージが表示されて C/RTL 協調シ ミ ュ レーシ ョ ンが停止し

ます。

@E [SIM-345] Cosim only supports the following 'ap_ctrl_none' designs:(1) combinational designs; (2) pipelined design with task interval of 1; (3) designs with array streaming or hls_stream ports.@E [SIM-4] *** C/RTL co-simulation finished:FAIL ***

IP パッケージ

デザイ ンが終了し た ら、 Vivado HLS の [Export RTL] 機能を使用し て、 IP カ タ ロ グに適し た IP パッ ケージを作成し ま

す。 AXI4-Lite イ ン ターフ ェ イ ス を含むデザイ ンの場合、 IP パッ ケージにイ ン ターフ ェ イ ス をプロ グ ラ ムするのに必

要な ソ フ ト ウ ェ ア ド ラ イバー フ ァ イルが含まれます。

Vivado HLS には、 複数のパッ ケージ オプシ ョ ンがあ り ます。 生産性の高い IP イ ンテグレーター手法を使用するに

は、 IP カ タ ロ グ フ ォーマ ッ ト を使用し、 AXI イ ン ターフ ェ イ ス を使用する必要があ り ます。

UltraFast 高生産性設計手法ガイド 51UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 52: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

デザイン解析および最適化

どの設計手法でも、 デザイ ン解析と改善に生産的なプロセス を使用する こ と が必要です。 C シ ミ ュ レーシ ョ ン、 C デ

バッ グ、 合成、 解析、 RTL 検証、 および IP パッ ケージなどに Vivado HLS を使用する方法は、 『Vivado Design Suite

ユーザー ガイ ド : 高位合成』 (UG902) [参照 2] のこのセ ク シ ョ ンを参照し て く ださい。

デザイ ンを作成し てパフ ォーマン ス を向上するプロセスは、 次のよ う にま と める こ と ができ ます。

• C コード をシ ミ ュ レーシ ョ ン し て、 デザイ ンが正しいかど う かを検証。

• 初期デザイ ンを合成。

• デザイ ン パフ ォーマン ス を解析。

• 新しいソ リ ューシ ョ ンを作成し て最適化指示子を追加。

• 新しいソ リ ューシ ョ ンのパフ ォーマン ス を解析。

• 要件が満た される まで新しいソ リ ューシ ョ ンおよび最適化指示子の作成を続行。

• RTL が正しいかど う かを検証。

• デザイ ンを IP と し てパッ ケージ し てシステムに統合。

C シ ミ ュ レーシ ョ ンを使用し て、 デザイ ンの検証と合成前の結果の確認の両方を実行する と、 生産性が最も高 く な

り ます。 C シ ミ ュ レーシ ョ ンの速度は、 高位合成デザイ ン フ ローの主な利点です。 C デザイ ンが正しいかど う かを

確認するのに時間を費やす方が、 間違った仕様によ るパフ ォーマン ス問題をデバッ グするのに時間を費やすよ り も

生産的です。

便利なレポート

初期合成結果が得られた ら、 まずその結果を確認し ます。 合成レポー ト に不明な値 (? マーク で表示) が含まれる場合

は、 それら を解決する必要があ り ます。 最適化指示子によ り デザイ ン パフ ォーマン スが改善されるかど う かを判断

するには、 ソ リ ューシ ョ ンを比較でき る よ う にする こ と が重要であ り 、 比較する ためにはレ イ テンシが既知の値で

あ る必要があ り ます。

ループの範囲が可変であ る場合、 Vivado HLS でループが完了する までの反復回数を判断でき ません。 ループの 1 反

復のレ イ テンシがわかっている場合でも、 範囲が可変であ る と、 ループのすべての反復を完了するのにかかる レ イ

テンシは決定でき ません。

デザイ ンのループを見直し て く ださい。合成レポー ト の [Latency] → [Details] → [Loops] セ ク シ ョ ンでループを確認し

ます。 不明の値は階層の上方向に伝搬されてい く ので、 レ イ テンシが不明であ る と レポー ト されているループ階層

の最下位ループから開始し ます。 ループは、 階層の下位にあ る可能性があ り ます。 レポー ト の [Latency] → [Details]

→ [Instance] セ ク シ ョ ンで下位関数に不明の値が示されていないかど う かを確認し ます。 レ イ テンシ値が不明 と示さ

れる関数のレポー ト を開いて、 ループが特定される までプロセス を繰 り 返し ます。

合成レポー ト の代わ り に、 [Analysis] パースペク テ ィ ブを使用する こ と もでき ます。

範囲が可変のループを特定し た ら、 LOOP_TRIPCOUNT 指示子を追加し てループの反復回数を指定するか、 C コード

にアサー ト を使用し て範囲を指定し ます。 詳細は、 『Vivado Design Suite ユーザー ガイ ド : 高位合成』 (UG902) [参照 2]

のこのセ ク シ ョ ンを参照し て く ださい。

LOOP_TRIPCOUNT 指示子はすべてのソ リ ューシ ョ ンで必要 と されるので、 この指示子を使用する場合は、 ソース

コード に pragma と し て追加する こ と を考慮し て く ださい。

UltraFast 高生産性設計手法ガイド 52UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 53: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

範囲が可変であ るループがほかにも あ る と わかっている場合は、 それらのループに対し て反復制限を指定し て く だ

さい。 指定し ない場合は、 最上位のレポー ト に実数が含まれる まで、 合成を繰 り 返し て、 同じボ ト ムア ッ プ プロセ

ス を使用し ます。

デザイン解析

デザイ ン解析は、 次の 3 つの手法で実行でき ます。

• 合成レポー ト 。

• [Analysis] パースペク テ ィ ブ。

• RTL シ ミ ュ レーシ ョ ンの波形。

ヒン ト : 結果を解析する前に、 コ ン ソール ウ ィ ン ド ウかロ グ フ ァ イルでどの最適化が実行されたか (または飛ばされ

たか、 エラーになったか) を確認し ます。

合成レポー ト および [Analysis] パースペク テ ィ ブを使用する と、 レ イ テンシ、 間隔、 および リ ソースの見積も り を解

析でき ます。 ソ リ ューシ ョ ンが複数あ る場合は、 GUI の [Compare Reports] ボタ ンを使用し て、 ソ リ ューシ ョ ンを並

べて比較し ます。 この機能は、 [Analysis] パースペク テ ィ ブ と同様 GUI から しか使用でき ませんが、 バッチ モード を

使用し て作成し たプロ ジェ ク ト も vivado_hls -p project_name を使用し て GUI で開いて解析でき ます。

この場合も、 階層ご と に改善し てい く 方法が効果的です。 最上位から開始し て、 レ イ テンシ、 間隔、 エ リ アそれぞ

れにどのタ ス ク が最も影響し ているかを判断し、 それらのタ ス ク の詳細を確認し ます。 目標を達成する ためにパ

フ ォーマン ス を改善する余地があ る と思われるループまたは関数が見つかる まで、 階層を順に下位方向に確認し て

いき ます。 これらの関数またはループを改善する と、 上位の階層にも改善が波及し ていき ます。

[Analysis] パースペク テ ィ ブを使用する と、 合成レポー ト よ り も階層の上下移動が簡単です。 また、 こ のモード で

は、 スケジュー リ ング された演算および リ ソース使用量が詳細に表示され、 C コード の該当部分を表示でき る よ う

になっています。

まず、 [Analysis] パースペク テ ィ ブの詳細なス ケジュー リ ング表示を使用し て、 マ ク ロ レベルのビヘイ ビアーを詳細

に確認する と、 有益な場合があ り ます。 演算は、 通常コード が実行される順番に リ ス ト されます。 Vivado HLS では、

すべてを ク ロ ッ ク サイ クル 1 でスケジュー リ ング し、 可能であれば 1 ク ロ ッ ク サイ クルで終了し よ う と し ます。

• 演算が全般的に左上から右下にずれている場合は、 データの依存性またはコード に含まれる タ ス クの実行が原

因であ る と考え られます。 前の演算が終了し ない と、 次の演算は開始でき ません。

• 演算が順にスケジュー リ ング されていたのに突然多数の演算が同時実行された り 、 その逆の状況が発生する場

合は、 ボ ト ルネ ッ ク (I/O ポー ト や RAM ポー ト など) があ り 、 長い間待機し た後すべてが並列で実行されている

可能性があ り ます。

デザイ ンの解析には、 合成レポー ト と [Analysis] パースペク テ ィ ブのほかに、 RTL シ ミ ュ レーシ ョ ンの波形も使用で

き ます。 RTL 検証中には、 ト レース フ ァ イルを保存し て、 適切なビ ューアーを使用し て表示でき ます。 詳細は、

『Vivado Design Suite チュー ト リ アル: 高位合成』 (UG871) [参照 3] の RTL 検証のチュー ト リ アルを参照し て く ださい。

または、 IP パッ ケージをエ ク スポー ト し て、 project_name/solution_name/impl/ip/verilog or vhdl

フ ォルダーの Vivado RTL プロ ジェ ク ト を開き ます。 C/RTL 協調シ ミ ュ レーシ ョ ンを実行し た場合は、 こ のプロ ジェ

ク ト に RTL テス ト ベンチが含まれています。

RTL を使用し たデザイ ン解析には、 あま り 時間をかけないよ う にし て く ださい。 C コード を変更するか最適化指示

子を追加する と、 合成を再実行し た と きに、 異なる名前の RTL デザイ ンが生成されるのが通常です。 RTL の詳細を

理解するために時間を費やし て も、 新しいデザイ ンが生成されて、 別の名前 と構造が使用される たびに、 繰 り 返し

時間を費やすこ と になって し まいます。

UltraFast 高生産性設計手法ガイド 53UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 54: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 4 章: C ベース IP の開発

要約する と、 階層を上から順に確認し、 さ らに最適化できそ う な タ ス ク を見つける こ と が推奨されます。

デザイン最適化

最適化を実行する前に、 プロ ジェ ク ト 内に新しいソ リ ューシ ョ ンを作成する こ と をお勧めし ます。 ソ リ ューシ ョ ン

を使用する と、 結果のセ ッ ト を異なる結果のセ ッ ト と比較でき ます。 結果だけでな く 、 ロ グ フ ァ イルおよび出力

RTL フ ァ イルも比較でき ます。

高パフ ォーマン ス デザイ ンを得る ための基本的な最適化ス ト ラ テジは、 次の とお り です。

• 初期またはベース ラ イ ン デザイ ンを作成し ます。

• ループおよび関数をパイプラ イ ン処理し ます。

• 配列のボ ト ルネ ッ クやループの依存性など、 パイプラ イ ンを制限する問題を解決し ます (ARRAY_PARTITION

および DEPENDENCE 指示子を使用)。

• DATAFLOW 最適化を適用し てループおよび関数が同時に実行される よ う にし ます。

• パフ ォーマン ス を満たすため、 必要に応じ てコード を変更し ます。

• データ フ ロー メ モ リ チャネルのサイ ズを削減し、 ALLOCATION および RESOUCES 指示子を使用し て さ らにエ

リ アを削減し ます。

エ リ アを削減する よ り も前に、 まずパフ ォーマン ス を満たすよ う にし ます。 よ り 少ない リ ソースでデザイ ンを作成

する こ と がス ト ラ テジであ る場合は、 パフ ォーマン ス を改善する手順を飛ばし ます。

最適化プロセス中は、 合成後にコ ン ソールへの出力 (またはロ グ フ ァ イル) を確認する こ と をお勧めし ます。 Vivado

HLS では、 最適化で指定し たパフ ォーマン ス目標に達成でき ない場合、 目標が自動的に緩和され (ク ロ ッ ク周波数は

例外)、 デザイ ンが達成でき る目標で作成されます。 このため、 合成からの出力を確認し て、 どのよ う な最適化が実

行されたのか理解し てお く こ と が重要です。

最適化の適用に関する詳細は、 『Vivado Design Suite ユーザー ガイ ド : 高位合成』 (UG902) [参照 2] を参照して く ださい。

UltraFast 高生産性設計手法ガイド 54UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 55: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 5 章

システム統合

概要

生産的なシステム統合の設計手法では、 シェル デザイ ンの開発と同様、 Vivado® IP カ タ ロ グ と IP イ ンテグレーター

を活用し ます。 高生産性設計手法の初期手順に従っている場合、 デザイ ン プロセスのこ の段階には次が含まれます。

• 検証済みシェル (ボード レベルのイ ン ターフ ェ イ スが開発され、 検証されている )

• デザイ ンのコ アの機能を表す検証済みで Vivado IP カ タ ロ グ用にパッ ケージ された IP ブロ ッ ク

• IP レベル イ ン ターフ ェ イ スに使用される AXI イ ン ターフ ェ イ ス (IP イ ンテグレーターの設計アシス タ ン スによ

り デザイ ン作成を自動化可能)

• シェルを検証するために作成されたシステム レベルのテス ト ベンチ

システム コ ンポーネン ト は、 並列に開発および検証されてお り 、 システムに統合する準備ができています。

初期システム統合を実行し た ら、 このフ ロー全体を自動化し、 追加の新しいデザイ ンを簡単に生成でき ます。

初期システム統合

デザイ ン統合プロセス を ま と める と、 次のよ う にな り ます。

1. シェル デザイ ンに基づ く 新しい Vivado プロ ジェ ク ト を作成し ます。

2. IP イ ンテグレーターを使用し て IP ブロ ッ ク をすべて追加し、 IP を接続し ます。

3. システムを検証し、 デザイ ンを イ ンプ リ メ ン ト し て FPGA ビ ッ ト ス ト リ ームを生成し ます。

システム統合プロジェク ト

新規システム デザイ ン統合プロ ジェ ク ト を作成するには、 次のよ う に リ フ ァ レン ス シェル デザイ ンのいずれかを使

用し ます。

1. シェル デザイ ンの Vivado プロ ジェ ク ト を開き、 [File] → [Save Project As] を ク リ ッ ク し て新規プロ ジェ ク ト と し

て保存し ます。

2. 新規 Vivado RTL プロ ジェ ク ト を RTL ソースな しで同じ ターゲ ッ ト デバイ ス またはボード を選択し て作成し、

[Create Block Design] を ク リ ッ ク し て、 write_bd_tcl コマン ド を使用し て保存し た Tcl ス ク リ プ ト を [Tcl

Console] ウ ィ ン ド ウで実行し て新規プロ ジェ ク ト にシェル ブロ ッ ク デザイ ンを再生成し ます。

3. すべてのコ ア デザイ ン IP ブロ ッ ク をプロ ジェ ク ト IP リ ポジ ト リ に追加し ます。

UltraFast 高生産性設計手法ガイド 55UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 56: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 5 章: システム統合

システム統合の自動化

IP イ ンテグレーターでは、 システムを統合するのに役立つ設計アシス タ ン スが提供されます。 推奨される ス ト ラ テ

ジは、 シェル デザイ ンを開き、 キ ャ ンバスにすべての IP ブロ ッ ク を追加し ます。 すべての IP およびシェル イ ン

ターフ ェ イ スに AXI イ ン ターフ ェ イ ス を使用し ている場合は、 設計アシス タ ン スがア ク テ ィ ブにな り 、 推奨される

接続が示されます。

設計アシス タ ン スでは、 有効な接続が認識されます。 単に接続を自動化するのに加え、 AXI4-Stream イ ン ターフ ェ イ

ス を AXI メ モ リ マ ッ プ ド ポー ト に接続する など、 必要な AXI イ ン ターコネ ク ト ロ ジ ッ ク も自動的に追加されます。

設計アシス タ ン スの詳細は、 『Vivado Design Suite ユーザー ガイ ド : IP イ ンテグレーターを使用し た IP サブシステム

の設計』 (UG994) [参照 8] のこ のセ ク シ ョ ンを参照し て く ださい。

ト レーニング: デザイ ンに複数のク ロ ッ ク ド メ イ ンが含まれる場合は、 Vivado Design Suite QuickTake ビデオ: Vivado

IP イ ンテグレーターでの複数ク ロ ッ ク ド メ イ ンの使用を参照し て く ださい。

スカ ラー信号や AXI 以外のバス イ ン ターフ ェ イ スなど、 設計アシス タ ン スでサポー ト されない接続を実行し てブ

ロ ッ ク デザイ ンを完成させます。

最後に、 [Validate Design] 機能を使用し て、 デザイ ンにデザイ ン ルール違反がないこ と を確認し ます。 メ モ リ マ ッ プ

ド イ ン ターフ ェ イ ス またはプロセ ッサを使用するデザイ ンの場合は、 『Vivado Design Suite ユーザー ガイ ド : IP イ ン

テグレーターを使用し た IP サブシステムの設計』 (UG994) [参照 8] のこ のセ ク シ ョ ンを参照し て く ださ い。

デザイ ンが完成し、 正し く 検証された ら、 write_bd_tcl コマン ド を使用する こ と をお勧めし ます。

write_bd_tcl コマン ド を使用する と、 完全なシステムを再生成するのに必要なコマン ド が Tcl フ ァ イルに記述さ

れます。

システムの検証とインプリ メンテーシ ョ ン

IP イ ンテグレーターでシステム ブロ ッ ク デザイ ンを完成させた ら、 完全なシステムを検証およびイ ンプ リ メ ンテー

シ ョ ンするために出力フ ァ イルを生成し、 デザイ ンの最上位 HDL ラ ッパーを作成し ます。 IP イ ンテグレーターを こ

のよ う に使用する フ ローの詳細は、 『Vivado Design Suite チュー ト リ アル: 高位合成』 (UG871) [参照 3] の次のセ ク シ ョ

ンを参照し て く ださい。

• 第 9 章 「IP イ ンテグレーターでの HLS IP の使用」

• 第 10 章 「Zynq SoC デザイ ンでの HLS IP の使用」

シェルの検証用に作成し た RTL テス ト ベンチを使用し て、 システム レベルの検証を実行し ます。 個々の部分 (IP ブ

ロ ッ クおよびシェル デザイ ン) は、 個別に検証済みです。 こ こ でのタ ス クは、 完全なシステムを検証する こ と です。

次を実行する こ と によ り 、 システム レベルの接続を確認する こ と に焦点を置いて く ださ い。

1. シェルからプロセ ッ シング パイプラ イ ンの最初のブロ ッ ク にデータが正し く 供給されている こ と を確認し ます。

2. 最初のブロ ッ ク が次のブロ ッ ク に正し く 出力を供給し ているかを確認し ます。

注記: 最小限の量のデータ を使用し て、 システム レベル シ ミ ュ レーシ ョ ンができ るだけ高速に実行される よ う にし

ます。 最初は、 最上位の接続を確認する こ と に焦点を置き ます。

最上位の接続を確認し た ら、 完全で詳細なシステム シ ミ ュ レーシ ョ ンを実行でき ます。

重要: こ のア ド バン ス設計手法では、 「システム統合の自動化」 で説明し ている よ う に、 システム レベル検証で問題

が検出された IP を再設計し、 システム全体を再生成する作業を、 ス ク リ プ ト を使用し てすばや く 実行でき ます。

UltraFast 高生産性設計手法ガイド 56UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 57: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 5 章: システム統合

システムが完全に検証された ら、 デザイ ンを イ ンプ リ メ ン ト し てビ ッ ト ス ト リ ームを生成でき ます。 デザイ ン IP の

ほ と んどが Vivado HLS を使用し て C/C++ から作成されている場合は、 RTL に自動的に正しいタ イ ミ ング制約が設定

され、 RTL 合成でタ イ ミ ングが満た されます。

注記: RTL 合成後、 IP ブロ ッ ク間にタ イ ミ ングが満た されないタ イ ミ ング パスがあ る場合は、 HLS で INTERFACE 指

示子を使用し て イ ン ターフ ェ イ ス ポー ト にレジス タ を付ける こ と を考慮し て く ださい。

実行時間を短縮するため、 出力フ ァ イルを生成する際、 [Out of context per IP] をオンにする こ と を考慮し て く ださい。

このオプシ ョ ンをオンにする と、 合成済み出力フ ァ イルが生成されてキ ャ ッ シュ され、 IP ブロ ッ ク が変更された場

合にのみ合成が再実行されるので、 システム イ ンプ リ メ ンテーシ ョ ンの時間が短縮されます。

システム統合の自動化

完全なシステム レベルの検証が実行でき るのがシステム統合段階に達し てからであ る こ と を懸念されるかも しれま

せんが、 これは実際にはこの設計手法の利点の 1 つです。 RTL での完全なシステム レベル シ ミ ュ レーシ ョ ンには時

間がかか り 、 プロ ジェ ク ト の開発中に RTL シ ミ ュ レーシ ョ ンを何回も実行する こ と が設計時間が長 く なる大き な原

因です。

この設計手法では、 次が重視されます。

• 並列開発

• C/C++ シ ミ ュ レーシ ョ ンを使用し てデザイ ン IP を検証し、 検証速度を数桁向上

• ブロ ッ ク レベル IP の作成および検証

• 既存および検証済みの IP の再利用

Vivado Design Suite で高水準の自動化が提供されるため、 この手法は非常に効果的です。 このセ ク シ ョ ンでは、 シス

テムを統合し た と きに問題が検出された場合でも、 システム全体を Tcl ス ク リ プ ト を使用し て簡単にすばや く 再作成

でき る こ と を示し ます。

Vivado プロジェク トの自動化

Vivado IDE で実行するすべての操作は、 プロ ジェ ク ト ジャーナル フ ァ イルに Tcl コマン ド と し て記録されます。 こ

れらのコマン ド を使用する と、 すべての操作をバッチ モード で再実行でき、 タ ス ク を実行する時間を大幅に短縮で

き ます。 この Tcl コマン ド の自動生成によ り 、 この設計手法の次のタ ス クが自動化されます。

• プロ ジェ ク ト の作成

• プロ ジェ ク ト への IP の追加

• システムのシ ミ ュ レーシ ョ ン

• システムのイ ンプ リ メ ンテーシ ョ ン

UltraFast 高生産性設計手法ガイド 57UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 58: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 5 章: システム統合

次に、 プロ ジェ ク ト の作成、 プロ ジェ ク ト への IP リ ポジ ト リ の追加、 ブロ ッ ク デザイ ンの作成、 プロ ジェ ク ト の

ビ ッ ト ス ト リ ーム生成までの処理を完全に自動化し た コード例を示し ます。

# Set project parametersset my_part xc7z020clg484-1set my_board_part xilinx.com:zc702:part0:1.0

# Set the paths to auto-adjust to the local directory# Define project and IP repository locationsset my_files [pwd]set projdir $my_files/project_1set repo_dir $my_files/../my_ip/ipputs "Using project directory $projdir"puts "Using repository directory $repo_dir"

# Create the Projectset projname project_1create_project -force $projname $projdir -part $my_partset_property board_part $my_board_part [current_project]

# Create IP repositoryset_property ip_repo_paths $repo_dir [current_fileset]update_ip_catalog -rebuild

# Create the block designsource ./design_IPI.tcl

# Create output products and HDL wrappergenerate_target all [get_files $projdir/$projname.srcs/sources_1/bd/$design_name/$design_name.bd]make_wrapper -files [get_files $projdir/$projname.srcs/sources_1/bd/$design_name/$design_name.bd] -topadd_files -norecurse $projdir/$projname.srcs/sources_1/bd/$design_name/hdl/${design_name}_wrapper.vupdate_compile_order -fileset sources_1update_compile_order -fileset sim_1

# Implement the bitstreamlaunch_runs impl_1 -to_step write_bitstreamwait_on_run impl_1

上記の操作を実行する Tcl コマン ド は、 プロ ジェ ク ト のジャーナル フ ァ イルから コ ピーし た ものです。 または、

[Save] → [Write Project Tcl] を ク リ ッ ク し て、 Vivado 内のフ ローを簡単にス ク リ プ ト 化し、 シェルの作成および検証、

システムの統合を自動化でき ます。

UltraFast 高生産性設計手法ガイド 58UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 59: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 5 章: システム統合

Vivado HLS の自動化

Vivado HLS では、 IDE を使用し て作成し た各プロ ジェ ク ト に対し て Tcl フ ァ イルが作成されます。 次に、 C デザイ ン

フ ローのすべての手順 (C コード のシ ミ ュ レーシ ョ ン、 最適化指示子を使用し た C コード の合成、 RTL の検証、 IP

パッ ケージの作成および RTL 合成がタ イ ミ ングを満たすかの確認) を実行する Tcl コマン ド を示し ます。

# Create a project and add filesopen_project proj_matrixmulset_top DESIGN_TOPadd_files matrixmul.cppadd_files -tb matrixmul_tb.cpp

# Create a solutionopen_solution "fast"set_part {xc7z020clg484-1}create_clock -period 4 -name default

# Add optimization directivesset_directive_pipeline "cholesky/"set_directive_array_reshape -type complete -dim 2 "matrixmul" aset_directive_array_reshape -type complete -dim 1 "matrixmul" b

# Simulate, Synthesize, Verify and package outputscsim_designcsynth_designcosim_designexport_design -format ip_catalog -evaluate verilog

この自動生成された Tcl フ ァ イルを編集し て、 C IP 開発フ ローの任意の部分を自動化でき ます。 た と えば、 C シ ミ ュ

レーシ ョ ンのみを実行する ス ク リ プ ト を作成でき ます。 デザイ ンを検証し た ら、 上記のよ う な完全なス ク リ プ ト を

使用し てデザイ ンを合成し てパッ ケージ IP を作成でき ます。

IP インテグレーターの自動化

IP イ ンテグレーターの write_bd_tcl コマン ド を使用する と、 操作を再実行する Tcl ス ク リ プ ト を保存でき るだけ

でな く 、 最終的なブロ ッ ク デザイ ンのみを作成する よ う ス ク リ プ ト を最適化でき ます。 こ のス ク リ プ ト を実行する

だけで、 ブロ ッ ク デザイ ンを再作成でき ます。 ブロ ッ ク デザイ ンは IP リ ポジ ト リ の IP を使用し て再作成されるの

で、 IP がア ッ プデー ト されている場合は、 最新の IP が使用されます。 このレベルでの自動化によ り 、 ブロ ッ ク デザ

イ ンをすばや く 再作成でき ます。

• シェル デザイ ンを新しいデザイ ン プロ ジェ ク ト に再生成し、 変更し て、 新しいシェルを簡単に作成でき ます。

• シェル デザイ ンを新しい検証プロ ジェ ク ト に再生成し、 検証 IP を簡単にデザイ ンに追加でき ます。

• シェル デザイ ンをシス テム統合プロ ジェ ク ト に再生成し、 コ ア デザイ ン IP をシステムに統合でき ます。

設計手法の各手順を、 効率的で生産性の高い方法で再実行でき ます。

UltraFast 高生産性設計手法ガイド 59UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 60: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 5 章: システム統合

完全なシステムの自動化

さ らに生産性を向上するには、 makefile を使用し てス ク リ プ ト を実行し ます。 makefile は依存性を指定し ます。 た と

えば、 次のタ ス クは順番に実行する必要があ り ます。

• タ ス ク A: IP を C でシ ミ ュ レーシ ョ ン。

• タ ス ク B: IP を合成し て IP カ タ ロ グに追加。

• タ ス ク C: IP をシステム レベルに統合。

makefile を使用し て タ ス ク C を実行する と、 タ ス ク B からの出力が存在するかど う かが自動的にチェ ッ ク されます。

タ ス ク B からの出力が存在し ない場合は、 タ ス ク B を実行するためにタ ス ク A からの出力が存在するかど う かが

チェ ッ ク されます。

上記のよ う に makefile を使用し て Tcl ス ク リ プ ト を実行する と、 IP またはシェル デザイ ンをア ッ プデー ト し た後、

1 つのコマン ド を実行するだけでシステム全体を再作成でき、 次の任意の段階で停止する こ と も可能です。

• C シ ミ ュ レーシ ョ ンの結果を確認

• 検証 IP を追加するためシェル デザイ ンを再作成

• IP を再合成し、 RTL シ ミ ュ レーシ ョ ンによ り IP を検証し て、 システムを再構築

• FPGA のプロ グ ラ ム後

このレベルでの自動化によ り 設計手法のすべての部分が高生産性フ ローに リ ン ク されるので、 設計手法の部分を並

列実行し、 システムを統合し てから システム レベルのシ ミ ュ レーシ ョ ンを実行でき ます。 システムの最初のバー

ジ ョ ンを作成し た後は、 システム全体の生成は完全に自動化されます。

将来のための設計

高生産性設計手法を使用する最後の利点は、 初期デザイ ンから派生デザイ ンを簡単に作成でき る こ と です。 高生産

性設計手法では、 次の 2 つの特徴によ り 高い生産性が可能にな り ます。

• C からの IP の開発

• イ ンプ リ メ ンテーシ ョ ン フ ローの自動化

C からの IP の開発

C を使用し た IP 開発では、 こ のガ イ ド で既に説明し た主な利点に加え、 デザイ ンを簡単に リ ターゲ ッ ト し て、 同じ

ソースから派生デザイ ンを作成でき る こ と も利点です。

上記の Vivado HLS ス ク リ プ ト 例では、 次の Tcl コマン ド を使用し て、 250 MHz ク ロ ッ ク を使用する Zynq®-7000 SoC

デバイ ス を ターゲ ッ ト と し ています。

set_part {xc7z020clg484-1}create_clock -period 4 -name default

UltraFast 高生産性設計手法ガイド 60UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 61: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 5 章: システム統合

た と えば 300 MHz で動作する Kintex® UltraScale™ デバイ ス を ターゲ ッ ト と し て イ ンプ リ メ ンテーシ ョ ン用に正し く

タ イ ミ ング制約が設定された IP ブロ ッ ク を作成するには、 最適化制約をア ッ プデー ト するだけです。

set_part {xcku025-ffva1156-2-i}create_clock -period 300MHz -name default

これ以外の変更は不要です。 Vivado HLS で、 ターゲ ッ ト テ ク ノ ロ ジで選択し た周波数でイ ンプ リ メ ン ト されたデザ

イ ンが作成されます。 デザイ ンを完了するのにかかる ク ロ ッ ク サイ クル数は、 高速テ ク ノ ロ ジでは少な く な り 、 低

速テ ク ノ ロ ジでは多 く な り ますが、 コード を記述し直し た り 最適化し直し た り する必要はあ り ません。

C コード から作成された部分が大きいほど、 新しいテ ク ノ ロ ジまたはク ロ ッ ク周波数にデザイ ンを リ ターゲ ッ ト す

るのが簡単にな り ます。 レガシ RTL ブロ ッ クは、 異なる タ イ ミ ング パラ メ ーターに対応する ため、 再イ ンプ リ メ ン

ト が必要な場合があ り ます。

インプリ メンテーシ ョ ン フローの自動化

完全にス ク リ プ ト 化されたフ ローで FPGA を イ ンプ リ メ ン ト する と、 ス ク リ プ ト のパラ メ ーターを変更し て派生デ

ザイ ンを作成する際に、 さ らにデザイ ンの再利用を向上し、 生産性を増加でき ます。

上記のス ク リ プ ト 例では、 次のコード が使用されています。 Vivado ス ク リ プ ト が使用されています。 同じ変更を、

Vivado HLS および IP イ ンテグレーター ス ク リ プ ト にも適用でき ます。

# Set project parametersset my_part xc7z020clg484-1set my_board_part xilinx.com:zc702:part0:1.0

1 つの最上位プロ ジェ ク ト パラ メ ーター ス ク リ プ ト によ り プロ ジェ ク ト のすべてを設定するには、 次のよ う に変更

し ます。

# source project-level parameterssource project_top.tcl# Set project parametersset my_part $target_deviceset my_board_part $target_board

この例では、 project_top.tcl の内容は次の とお り です。

set target_device xc7z020clg484-1set target_board xilinx.com:zc702:part0:1.0

このス ク リ プ ト を変更する と、 プロ ジェ ク ト が自動的に リ ターゲ ッ ト され、 再イ ンプ リ メ ン ト されます。

これに関し て、 次の点に注意し て く ださい。

• C テス ト ベンチの推奨事項に従 う と、 C シ ミ ュ レーシ ョ ンが自動的に確認されます。

• Vivado HLS で新しいパラ メ ーターに基づいて新しい IP が生成されます。

• Vivado HLS で作成された RTL は、 RTL シ ミ ュ レーシ ョ ンによ り 自動的に検証されます。

• Vivado プロ ジェ ク ト 生成ス ク リ プ ト では、 ア ッ プデー ト されたパラ メ ーターに基づいて新しいプロ ジェ ク ト が

作成されます。

• IP イ ンテグレーター ス ク リ プ ト では、 ブロ ッ クが以前と同様に接続され、 設計アシス タ ン スによ り 最適な接続

が使用されます。

• システム統合段階でフ ローを停止し、 デザイ ンを変更でき ます。

UltraFast 高生産性設計手法ガイド 61UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 62: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

第 5 章: システム統合

• 完成し たデザイ ンに対し て、 ア ッ プデー ト された ターゲ ッ ト デザイ ンおよびク ロ ッ ク周波数が使用されて イ ン

プ リ メ ンテーシ ョ ンが実行され、 ビ ッ ト ス ト リ ームが生成されます。

パラ メ ーターの変更の程度に対応する よ う Tcl ス ク リ プ ト を拡張する こ と によ り 、 派生デザイ ンを即座に作成でき

ます。

UltraFast 高生産性設計手法ガイド 62UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 63: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

付録 A

その他のリソースおよび法的通知

ザイリンクス リソース

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

く ださい。

ソリューシ ョ ン センター

デバイ ス、 ツール、 IP のサポー ト については、 ザイ リ ン ク ス ソ リ ューシ ョ ン セン ターを参照し て く ださい。 デザイ

ン アシス タ ン ト 、 デザイ ン ア ド バイザ リ 、 ト ラブルシューテ ィ ングの ヒ ン ト などが含まれます。

Documentation Navigator およびデザイン ハブ

ザイ リ ン ク ス Documentation Navigator (DocNav) では、 ザイ リ ン ク スの資料、 ビデオ、 サポー ト リ ソースにア ク セス

でき、 特定の情報を取得するためにフ ィ ルター機能や検索機能を利用でき ます。 DocNav を開 く には、 次のいずれか

を実行し ます。

• Vivado IDE で [Help] → [Documentation and Tutorials] を ク リ ッ ク し ます。

• Windows で [ス ター ト ] → [すべてのプロ グ ラ ム] → [Xilinx Design Tools] → [DocNav] を ク リ ッ ク し ます。

• Linux コマン ド プロ ンプ ト に 「docnav」 と入力し ます。

ザイ リ ン ク ス デザイ ン ハブには、 資料やビデオへの リ ン ク がデザイ ン タ ス クおよび ト ピ ッ ク ご と にま と められてお

り 、 これら を参照する こ と でキー コ ンセプ ト を学び、 よ く あ る質問 (FAQ) を参考に問題を解決でき ます。 デザイ ン

ハブにア ク セスするには、 次のいずれかを実行し ます。

• DocNav で [Design Hubs View] タブを ク リ ッ ク し ます。

• ザイ リ ン ク ス ウ ェブサイ ト のデザイ ン ハブ ページを参照し ます。

注意: DocNav からは、 日本語版は参照でき ません。 ウ ェブサイ ト のデザイ ン ハブ ページをご利用 く ださい。

UltraFast 高生産性設計手法ガイド 63UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 64: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

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

参考資料

注記: 日本語版のバージ ョ ンは、 英語版よ り 古い場合があ り ます。

1. 『Vivado® 高位合成を使用し た FPGA デザイ ンの概要』 (UG998)

2. 『Vivado Design Suite ユーザー ガイ ド : 高位合成』 (UG902)

3. 『Vivado Design Suite チュー ト リ アル: 高位合成』 (UG871)

4. 『Vivado Design Suite ユーザー ガイ ド : リ リ ース ノ ー ト 、 イ ン ス ト ールおよびラ イセン ス』 (UG973)

5. 『Vivado Design Suite チュー ト リ アル: カス タ ム IP の作成と パッ ケージ』 (UG1119)

6. 『Vivado Design Suite ユーザー ガイ ド : System Generator を使用し たモデル ベースの DSP デザイ ン』 (UG897)

7. 『UltraFast 設計手法ガイ ド (Vivado Design Suite 用)』 (UG949)

8. 『Vivado Design Suite ユーザー ガイ ド : IP イ ンテグレーターを使用し た IP サブシステムの設計』 (UG994)

9. 『Vivado Design Suite ユーザー ガイ ド : システム レベル デザイ ン入力』 (UG895)

10. 『Vivado IP イ ンテグレーターを使用し た AXI4 ベースの IP の統合方法』 (XAPP1204: 英語版、 日本語版)

11. Vivado Design Suite の資料

12. ザイ リ ン ク ス IP ページ

ト レーニング リソース

ザイ リ ン ク スでは、 この資料に含まれる コ ンセプ ト を説明する さ まざまな ト レーニング コースおよび QuickTake ビデ

オを提供し ています。 次の リ ン ク から関連する ト レーニング リ ソース を参照し て く ださい。

1. ト レーニング コース : C コード ベースの設計: Vivado HLS を使用し た高位合成

2. ト レーニング コース : ハード ウ ェア設計者用 C ベースの HLS コーデ ィ ング

3. ト レーニング コース : ソ フ ト ウ ェア設計者用 C ベースの HLS コーデ ィ ング

4. Vivado Design Suite QuickTake ビデオ チュー ト リ アル

5. Vivado Design Suite QuickTake ビデオ: Vivado 高位合成

6. Vivado Design Suite QuickTake ビデオ: Vivado HLS 入門

7. Vivado Design Suite QuickTake ビデオ: Vivado HLS デザイ ンの検証

8. Vivado Design Suite QuickTake ビデオ: さ まざまな タ イプのプロ ジェ ク ト を作成

UltraFast 高生産性設計手法ガイド 64UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com

Page 65: UltraFast 高生産性設計 手法ガイド - Xilinx...UltraFast 高生産性設計手法ガイド 7 UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com 第 1 章: 高生産性設計手法

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

お読みください: 重要な法的通知本通知に基づいて貴殿または貴社 (本通知の被通知者が個人の場合には 「貴殿」、 法人その他の団体の場合には 「貴社」。 以下同じ ) に開示される情報 (以下 「本情報」 と いいます) は、 ザイ リ ン ク スの製品を選択および使用する こ と のためにのみ提供されます。 適

用される法律が許容する最大限の範囲で、 (1) 本情報は 「現状有姿」、 およびすべて受領者の責任で (with all faults) と い う 状態で提供

され、 ザイ リ ン ク スは、 本通知を も って、 明示、 黙示、 法定を問わず (商品性、 非侵害、 特定目的適合性の保証を含みますが これ

らに限られません)、 すべての保証および条件を負わない (否認する ) もの と し ます。 また、 (2) ザイ リ ン ク スは、 本情報 (貴殿または

貴社によ る本情報の使用を含む) に関係し、 起因し、 関連する、 いかな る種類 ・ 性質の損失または損害について も、 責任を負わな

い (契約上、 不法行為上 (過失の場合を含む)、 その他のいかなる責任の法理によ るかを問わない) もの と し、 当該損失または損害に

は、 直接、 間接、 特別、 付随的、 結果的な損失または損害 (第三者が起こ し た行為の結果被った、 データ、 利益、 業務上の信用の

損失、 その他あ らゆる種類の損失や損害を含みます) が含まれる もの と し、 それは、 た と え当該損害や損失が合理的に予見可能で

あった り 、 ザイ リ ン ク スがそれらの可能性について助言を受けていた場合であった と し て も同様です。 ザイ リ ン ク スは、 本情報に

含まれるいかな る誤 り も訂正する義務を負わず、 本情報または製品仕様のア ッ プデー ト を貴殿または貴社に知らせる義務も負いま

せん。 事前の書面によ る同意のない限 り 、 貴殿または貴社は本情報を再生産、 変更、 頒布、 または公に展示し てはな り ません。 一

定の製品は、 ザイ リ ン ク スの限定的保証の諸条件に従 う こ と と な るので、 https://japan.xilinx.com/legal.htm#tos で見られるザイ リ ン ク

スの販売条件を参照し て く だ さい。 IP コ アは、 ザイ リ ン ク スが貴殿または貴社に付与し た ラ イセン スに含まれる保証と補助的条件

に従 う こ と にな り ます。 ザイ リ ン ク スの製品は、 フ ェ イルセーフ と し て、 または、 フ ェ イルセーフの動作を要求する アプ リ ケー

シ ョ ンに使用する ために、 設計された り 意図された り し ていません。 そのよ う な重大なアプ リ ケーシ ョ ンにザイ リ ン ク スの製品を

使用する場合の リ ス ク と 責任は、 貴殿または貴社が単独で負 う ものです。 https://japan.xilinx.com/legal.htm#tos で見られるザイ リ ン ク

スの販売条件を参照し て く だ さい。

自動車用のアプリケーシ ョ ンの免責条項 オー ト モーテ ィ ブ製品 (製品番号に 「XA」 が含まれる ) は、 ISO 26262 自動車用機能安全規格に従った安全コ ンセプ ト または余剰性

の機能 ( 「セーフテ ィ 設計」 ) がない限 り 、 エアバッ グの展開におけ る使用または車両の制御に影響する アプ リ ケーシ ョ ン ( 「セー

フテ ィ アプ リ ケーシ ョ ン」 ) におけ る使用は保証されていません。 顧客は、 製品を組み込むすべてのシステムについて、 その使用

前または提供前に安全を目的と し て十分なテス ト を行 う もの と し ます。 セーフテ ィ 設計な しにセーフテ ィ アプ リ ケーシ ョ ンで製品

を使用する リ ス クはすべて顧客が負い、 製品の責任の制限を規定する適用法令および規則にのみ従 う もの と し ます。

© Copyright 2015-2020 Xilinx, Inc. Xilinx、 Xilinx のロ ゴ、 Alveo、 Artix、 Kintex、 Spartan、 Versal、 Virtex、 Vivado、 Zynq、 およびこの

文書に含まれるその他の指定されたブラ ン ド は、 米国およびその他各国のザイ リ ン ク ス社の商標です。 AMBA、 AMBA Designer、Arm、 ARM1176JZ-S、 CoreSight、 Cortex、 PrimeCell、 Mali、 および MPCore は、 EU およびその他各国の Arm 社の登録商標です。 す

べてのその他の商標は、 それぞれの保有者に帰属し ます。

こ の資料に関する フ ィ ード バッ クおよび リ ン ク などの問題につき ま し ては、 [email protected] まで、 または各ページの

右下にあ る [フ ィ ード バッ ク送信] ボ タ ンを ク リ ッ クする と 表示される フ ォームからお知らせ く ださい。 フ ィ ード バッ クは日本語で

入力可能です。 いただき ま し たご意見を参考に早急に対応させていただき ます。 なお、 こ の メ ール ア ド レ スへのお問い合わせは受

け付けてお り ません。 あ らかじめご了承 く ださい。

UltraFast 高生産性設計手法ガイド 65UG1197 (v2019.2) 2020 年 1 月 6 日 japan.xilinx.com