hls::stream.size()
メソッドは、ストリームが現在保持しているエレメント数を示す符号なし整数を返します。これにより、読み出し前にデータの有無やデータ量を確認し、ストールやデッドロックの発生を防ぐことができます。
注記:
hls::stream.size()
は、入力 FIFO がフルかどうか、出力 FIFO が空かどうかをチェックするために使用できます。hls::stream.empty()
は入力 FIFO に、hls::stream.full()
は出力 FIFO にのみ適用可能です。hls::stream<int> my_stream;
var = 16;
if (my_stream.size()>0) {
my_stream.read(var);
}
hls::stream.size()
および hls::stream.capacity()
メソッドでは、トランザクションに使用可能な特定の量のスペースまたはデータがある場合にのみ、ストリームの書き込みまたは読み出しをする高度なフロー制御ができます。たとえば、サイズ N の読み出しバーストを開始する前に、入力ストリームに N 個のデータ アイテムがあるかどうかを確認し、バーストがストールせずに完了できるようにできます。また、書き込みバーストの場合、バースト データをストールせずに保存するのに十分なスペースが出力ストリームにあるかどうかを確認することもできます。
if (instream.size() > N)
for(i=0, i<N; i++)
... = instream.read(); // will not block
ストリームがフルの場合にのみ読み出す方法:
if (instream.size() == instream.capacity())
... = instream.read(); // read only if full
ヒント: ストリームがフルかどうかを確認するために、
hls::stream.full()
は使用できません。次は、動作しません。if (instream.full())
... = instream.read();