インターフェイスのポインターが複数回アクセスされると、Vitis HLS で関数インターフェイスから何回読み出しおよび書き込みが実行されたかを判断できません。関数インターフェイスの引数には、読み出される値または書き込まれる値の数を Vitis HLS に示すものはありません。
void pointer_stream_good (volatile dout_t *d_o, volatile din_t *d_i)
配列の最大サイズなど、Vitis HLS に対してインターフェイスに必要な値の数を示すものがコードに含まれていない場合は、値は 1 つと想定され、入力および出力が 1 つずつの C/RTL 協調シミュレーションが作成されます。RTL ポートが実際には複数の値の読み出しまたは書き込みを実行する場合、RTL 協調シミュレーションが停止します。RTL 協調シミュレーションでは、ポート インターフェイスを介して RTL デザインに接続される外部プロデューサー ブロックとコンシューマー ブロックがモデル化されます。複数の値が必要な場合、複数の値の読み出しまたは書き込みが実行されると、読み出す値がないか書き込むスペースがないため、RTL デザインは停止します。
インターフェイスでマルチアクセス ポインターを使用する場合は、インターフェイスで必要な読み出しまたは書き込みの回数を Vitis HLS に示す必要があります。ポインター インターフェイスに INTERFACE プラグマまたは指示子を手動で指定し、depth
オプションを必要な深さに設定します。
たとえば、上記のコード例の引数 d_i
に必要な FIFO の深さは 4 です。これにより、RTL 協調シミュレーションで RTL を正しく検証するのに十分な値が供給されます。