配列を最上位関数への引数として使用した場合、Vitis HLS では次のいずれかが想定されます。
- メモリはオフチップで、Vitis カーネル フローのデフォルトとしてメモリにアクセスするために、Vitis HLS で M_AXI ポートがインタフェイスに合成される。
- メモリは、Vivado IP のデフォルト動作としてレイテンシ 1 の標準ブロック RAM。データはアドレスの供給後 1 クロック サイクルで準備完了。
Vitis HLS でのこれらのポートの作成方法は、次のように設定します。
- INTERFACE プラグマまたは指示子を使用して、インターフェイスを M_AXI、BRAM、または FIFO インターフェイスとして指定します。
- INTERFACE プラグマまたは指示子の
storage_type
を使用して、RAM をシングル ポートまたはデュアル ポート RAM として指定します。 - INTERFACE プラグマまたは指示子の
latency
オプションを使用して、RAM のレイテンシを指定します。 - 配列最適化指示子 (ARRAY_PARTITION または ARRAY_RESHAPE) を使用すると、配列の構造を設定し直せ、I/O ポートの数も変更できます。
ヒント: データへのアクセスがメモリ (RAM または FIFO) ポートからに制限されるため、インターフェイス上の配列がパフォーマンスの障害となることがあります。これらの障害は通常、最適化指示子を使用することにより回避できます。
合成可能なコードで配列を使用する場合は、配列を必ずサイズ指定する必要があります。たとえば、配列インターフェイス の宣言
d_i[4]
が d_i[]
に変更されると、Vitis HLS でデザインが合成できないことを示すメッセージが表示されます。@E [SYNCHK-61] array_RAM.c:52: unsupported memory access on variable 'd_i' which is (or contains) an array with unknown size at compile time.