Vitis HLS では、ユーザーの選択に応じて、タスク間のチャネルが PIPO バッファーまたは FIFO バッファーのいずれかでインプリメントされます。
- スカラーの場合、Vitis HLS は自動的に FIFO をチャネル タイプとして推論します。
- (プロデューサーまたはコンシューマーの) パラメーターが配列の場合、次の点を考慮してチャネルを PIPO または FIFO としてインプリメントするかどうかを選択できます。
- データが常に順番どおり (シーケンシャルに) アクセスされる場合、このメモリ チャネルを PIPO/FIFO としてインプリメントするように選択できます。PIPO を選択すると、デッドロックが発生しないという利点がありますが、使用するメモリが多く必要になります。FIFO を選択すると、必要なメモリが少なくて済むという利点がありますが、FIFO のサイズが適切でないとデッドロックが発生する可能性があります。
-
データが任意の方法でアクセスされる場合、メモリ チャネルを PIPO としてインプリメントする必要があります (デフォルト サイズは元の配列の 2 倍)。
ヒント: PIPO が使用されると、1 回の反復で生成されるすべてのサンプルが常にチャネルに損失なしで保持されるようになります。
FIFO チャネルのサイズを指定すると、スループットの最適化を試みるためにツールによって計算されるデフォルト値は上書きされます。デザイン内の関数が指定した FIFO サイズよりも速いレートでサンプルを入力または出力する場合、FIFO が空またはフルになることがあります。この場合、読み出しまたは書き込みはできないので、デザインの動作が停止し、デッドロック状態になってしまうこともあります。
AMDでは、FIFO の深さを設定する場合は、最初は深さを転送されるデータの最大値 (タスク間で渡される配列のサイズなど) に設定して C/RTL 協調シミュレーションで問題がないことを確認し、その後 FIFO のサイズを削減してそれでも問題がないことを C/RTL 協調シミュレーションで再度確認することを勧めします。RTL 協調シミュレーションがエラーになる場合は、FIFO のサイズが小さすぎて、停止やデッドロック状態を回避できなかった可能性があります。Vitis HLS GUI では、使用する FIFO の適切なサイズを自動的に判断する方法がサポートされるようになりました。さらに、RTL 協調シミュレーションの実行後に、Vitis HLS IDE に時間経過に伴う各 FIFO/PIPO バッファーのサイズのヒストグラムが表示されます。これは、各バッファーの最適な深さを判断するのに役立ちます。