インテル® HLS コンパイラー: ユーザーガイド

ID 683456
日付 12/22/2017
Public
ドキュメント目次

B.5.1. コンポーネント・インターフェイスのレビュー

Component Viewer レポートには、コンポーネント内のインターフェイスの視覚的表現が表示されます。デフォルト、ポインター、参照渡し、 Avalon® Memory-Mapped (MM)、および Avalon® Streaming などのインターフェイス引数の詳細が確認できます。

コンポーネント内の一部のインターフェイス引数には、stableであるとしてマークすることができます。安定したインターフェイス引数は、コンポーネントの実行中に変更されない引数ですが、コンポーネントの実行間で引数が変更される可能性があります。

Component Viewer レポートでは、安定したノードはエッジ接続がありません。

デフォルトのインターフェイス引数

デフォルトのインターフェイス引数は任意のスカラーまたはシンプルな構造です。Component Viewer レポートはデフォルトの引数ノードを対応するチャネル読み出し (RD) ノードに接続します。
#include "HLS/hls.h" #include "stdio.h" struct coordinate_t { int x; int y; }; component int default_comp(int b, coordinate_t p) { return b + p.x; }


各デフォルトのインターフェイス引数ノードでは、ノード上にマウスを置くとノードに関する詳細が表示されます。

ポインター、参照渡し、および Avalon® MM マスターのインターフェイス引数

ポインター・インターフェイス、参照渡しインターフェイス、 Avalon® MM マスター・インターフェイスおよびグローバル変数はすべて、コンポーネント外のメモリーへのアドレスに対応します。デフォルトのインターフェイス引数と同様に、これらのノードはコンポーネントの対応するチャネル読み出し (RD) ノードに接続します。
#include "HLS/hls.h" #include "stdio.h" component int master_comp( int *pointer_d, ihc::mm_master<int, ihc::aspace<3>, ihc::awidth<4>, ihc::dwidth<32>,ihc::latency<1>, ihc::align<4> > &master_i, int &result ) { result = *pointer_d + *master_i; return result; }

Component Viewer レポートには、これらのインターフェイス引数の詳細が表示されます。
Stable
インターフェイス引数が安定しているかどうかを表示します。
Data width
ビット単位での memory-mapped データバスの幅
Address width
ビット単位での memory-mapped アドレスバスの幅
Latency
コンポーネントからのリードコマンドが終了してから外部メモリーが有効なリードデータを返すまでの保証されたレイテンシー
Maximum burst
リードまたはライト・トランザクションに関連付けられるデータ転送の最大数。固定レイテンシー・インターフェイスでは、この値は 1 に設定されます。
Alignment
ベース・ポインターアドレスのバイト配列。 インテル® HLS コンパイラーはこの情報を使用してこのポインターへのロードおよびストアーが可能な結合の量を決定します。

Avalon® MM スレーブレジスターのインターフェイス引数

インターフェイス引数を Avalon® MM スレーブレジスター (hls_avalon_slave_register_argument) としてラベル付けする際、インターフェイス引数は CSR ( コントロールおよびステータスレジスター ) スレーブのインターフェイスに実装されます。Component Viewer レポートはスレーブレジスターの引数をCSRコンテナー内に格納します。
#include "HLS/hls.h" #include "stdio.h" component int slavereg_comp( int hls_avalon_slave_register_argument slave_scalar_f, int* hls_avalon_slave_register_argument slave_pointer_g ) { return slave_scalar_f + *slave_pointer_g; }

結果のメモリーマップは、自動的に生成されたヘッダーファイル <component_name>_csr.hに記述されます。このヘッダーファイルは source editor のメニューにあります。Component Viewer レポートのCSRコンテナーのノードをクリックすると、ヘッダーファイルも開くことができます。

hls_avalon_slave_componentマクロを使用すると、“do” または “return” ストリーム ( コントロールおよびステータスレジスター ) は CSR インターフェイスに実装されます。
#include "HLS/hls.h" #include "stdio.h" hls_avalon_slave_component component int slavereg_comp( int hls_avalon_slave_register_argument slave_scalar_f, int* hls_avalon_slave_register_argument slave_pointer_g ) { return slave_scalar_f + *slave_pointer_g; }

Avalon® MM スレーブメモリー・インターフェイス引数

ポインター引数をスレーブメモリーとして宣言する場合、Component Viewer レポートは、コンポーネント内の Local Memory ノードと接続される <slave memory name> LD/STノードでスレーブメモリー・インターフェイスを表示します。
#include "HLS/hls.h" #include "stdio.h" hls_avalon_slave_component component int slavemem_comp( hls_avalon_slave_memory_argument(4096) int* slave_mem_h, int index, int hls_avalon_slave_register_argument slave_scalar_f ) { return slave_mem_h[index] * slave_scalar_f;

Component Memory Viewer レポートにある同じ Avalon® MM スレーブメモリー・インターフェイスを確認すると、 <slave memory name> LD/STノードは外部RWポートに接続されていることが表示されています。

Avalon® Streaming インターフェイス引数

Streaming インターフェイスは、対応するRDノード (stream_in<> 用 ) またはWRノード (stream_out<> 用 ) に接続されている <stream name> ノードで Component Viewer レポートに表示されます。
#include "HLS/hls.h" #include "stdio.h" component int stream_comp( ihc::stream_in<int> &stream_in_c, ihc::stream_out<int> &stream_out_e, int scalar_b ) { stream_out_e.write(scalar_b + 1); return stream_in_c.read() + scalar_b * 2; }

Component Viewer レポートは Streaming インターフェイス引数に関する次の詳細を表示します。
Width
ビット単位でのデータバスの幅
Depth
ストリームの深さ
Bits per symbol
データがデータバス上のシンボルで分割される方法を表示します。
Uses Packets
インターフェイスが Streaming インターフェイス上のstartofpacketおよびendofpacketサイドバンド信号を公開するかどうかを表示します。信号はパケットベースの読み出しおよび書き込みでアクセス可能です。
Uses Valid
(stream_in) valid信号が Streaming インターフェイス上に存在するかどうかを表示します。Yesの場合、upstream ソースはreadyがアサートされている各サイクルで有効データを提供する必要があります。
Uses Reader
(stream_in) ready信号が Streaming インターフェイス上に存在するかどうかを表示します。Yesの場合、ダウンストリーム・シンクはvalidがアサートされている各サイクルでデータの受け取りが可能です。