分割の例 - 2023.2 日本語

Vitis 高位合成ユーザー ガイド (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 日本語

AXIS インターフェイスの分割

これは、axis インターフェイスの DISAGGREGATE プラグマまたは指示子の例です。次は、GitHub で公開されている disaggregation_of_axis_port の例です。

表 1. AXIS インターフェイスの分割構造体
HLS ソース コード 合成済みの IP モジュール
#define N 10

struct A {
  char c;
  int i;
};

void dut(A in[N], A out[N]) {
#pragma HLS interface axis port=in
#pragma HLS interface axis port=out
#pragma HLS disaggregate variable=in
#pragma HLS disaggregate variable=out
  int sum = 0;
  for (unsigned i=0; i<N; i++) {
    out[i].c = in[i].c;
    out[i].i = in[i].i;
  }
} 
module dut (
ap_local_block,
ap_local_deadlock,
ap_clk,
ap_rst_n,
ap_start,
ap_done,
ap_idle,
ap_ready,
in_c_TVALID,
in_i_TVALID,
out_c_TREADY,
out_i_TREADY,
in_c_TDATA,
in_c_TREADY,
in_i_TDATA,
in_i_TREADY,
out_c_TDATA,
out_c_TVALID,
out_i_TDATA,
out_i_TVALID
);

上記の分割の例では、構造体引数の in および out が AXIS インターフェイスにマップされてから、分割されます。この結果、Vitis HLS は、引数 (in_cin_iout_cout_i) それぞれに対して 2 つの AXI ストリームを作成します。struct A の各メンバーは、個別のストリームになります。

生成されたモジュールの RTL インターフェイスは、上記の右側に表示されます。メンバー要素の ci は、それぞれ独自の TVALID、TREADY 、および TDATA 信号を持つ個別の AXI ストリーム ポートです。

Vitis HLS は、ログ ファイルに次のメッセージを表示します。
INFO: [HLS 214-210] Disaggregating variable 'in' (example.cpp:19:0)
INFO: [HLS 214-210] Disaggregating variable 'out' (example.cpp:19:0)

HLS::STREAM の分割

これは、hls::stream タイプを使用した場合の DISAGGREGATE プラグマまたは指示子の例です。

表 2. HLS::STREAM の分割構造体
HLS ソース コード 合成済みの IP モジュール
#define N 1024

struct A {,
  hls::stream<int> s_in;
  long arr[N];
};

long dut(struct A &d) {
  long sum = 0;
  while(!d.s_in.empty())
    sum += d.s_in.read();
  for (unsigned i=0; i<N; i++)
    sum += d.arr[i]; 
  return sum;
}
module dut (
ap_local_block,
ap_local_deadlock,
ap_clk,
ap_rst,
ap_start,
ap_done,
ap_idle,
ap_ready,
d_s_in_dout,
d_s_in_empty_n,
d_s_in_read,
d_arr_ce0, 
d_arr_q0,
ap_return
);

インターフェイスで使用される構造体内の hls::stream オブジェクトを使用すると、構造体ポートが Vitis HLS コンパイラによって自動的に分割されます。上記の例に示すように、生成された RTL インターフェイスには、hls::stream オブジェクトの s_in (すなわち d_s_in_*) の個別の RTL ポートと、配列 arr (すなわち d_arr_*) の個別の RTL ポートが含まれます。

Vitis HLS は、ログ ファイルに次のメッセージを表示します。
INFO: [HLS 214-210] Disaggregating variable 'd'
INFO: [HLS 214-241] Aggregating fifo (hls::stream) variable 'd_s_in' with compact=bit mode in 32-bits