最上位関数内の接続に関する規則は、計算関数を分割する際にも適用できます。フィード フォワード接続で、各接続変数ごとに 1 つのプロデューサーとコンシューマーが含まれるようにします。変数を複数の関数で消費されるようにする必要がある場合は、明示的に複製する必要があります。
データのブロックを 1 つの計算ブロックから別のブロックに移動する際は、配列または hls::stream
オブジェクトを使用できます。
配列を使用すると、コード変更が少なくすむので、通常は分割プロセスを短時間で実行できますが、hls::stream
オブジェクトを使用すると、メモリ リソース量が少なくなり、レイテンシも短くなります。また、カーネルを介してデータがどのように移動するかを判断しやすくなります。これは、スループットを最大にするよう最適化する場合に重要です。
通常は hls::stream
オブジェクトを使用することをお勧めしますが、配列をいつストリームに変換するかは開発者が決定できます。早期に実行する開発者もいれば、最終的な最適化段階で実行する開発者もいます。これには、
pragma HLS dataflow
を使用することもできます。
この段階では、カーネルのアーキテクチャを図にしておくと、データ依存性、データ移動、データ管理、制御フロー、および同時処理を決定するのに役立ちます。