整数のオーバーフローでの飽和
Vitis Model Composer では、信号上の整数データ値のオーバーフロー検出がサポートされています。前述のように、デフォルトのオーバーフロー メカニズムは折り返し ([Wrap on Overflow]) です。標準 Simulink ライブラリおよび HLS ライブラリの一部のブロックには、Saturate on integer overflow という整数のオーバーフローで飽和させるオプションがあり、[Block Parameters] ダイアログ ボックスでこれをオンにできます。このパラメーターは、出力が整数 (int8、int16、int32、uint8、uint16、uint32) の場合にのみ適用されます。ブロックに特定の情報は、Model Composer ブロック ライブラリを参照してください。
図 1. [Saturate on integer overflow] オプション
[Saturate on integer overflow] をオンにすると、入力値が出力でサポートされる値の範囲外である場合に、値が最大値または最小値で飽和することを意味します。値は飽和したら、変更されません。
固定小数点のオーバーフロー モード
固定小数点データ型の場合、たとえば DTC (Data Type Conversion) ブロックでサポートされるように、オーバーフロー モードが [Saturate on integer overflow] オプションよりも詳細に制御できます。
図 2. 固定小数点のオーバーフロー
それぞれの固定小数点オーバーフロー モードの詳細は、次を参照してください。
モード | 説明 | グラフ |
---|---|---|
Saturation | 入力値が出力のデータ型でオーバーフローする場合、出力値がその最小値または最大値で飽和に達すると、それ以上変更されません。 | |
Saturation to Zero | 入力値が出力のデータ型でオーバーフローする場合、出力値がその最小値または最大値で飽和に達すると 0 に戻ります。 | |
Symmetrical Saturation | [Saturation to Zero] と同じですが、最小値と最大値が対称 (値は反対でサイズが同じ) である点が違います。 | |
Wrap around | 入力値が出力のデータ型の範囲外になると、出力値は最大値から最小値に折り返されるか、最小値から最大値に折り返され、範囲内で循環します。 | |
Sign-Magnitude Wrap Around | 入力値が出力のデータ型の範囲を超えると、出力値が最大値に達すると値が減少し始めて、最小値に戻ります。アンダーフローの場合は、最小値に達すると値が増加し始め、最大値に戻ります。 |