ap_[u]<>
型の変数は、通常 C/C++ 演算子を使用した式では自由に使用できます。ただし、一部には予期しない動作が見られることがあります。これについては、次を参照してください。
ビット幅が小さい値を幅が大きいものへ代入する場合のゼロまたは符号拡張
ビット幅が小さい符号付き変数 (ap_int<>
) の値を幅の大きなものへ代入すると、符号にかかわらず、値はデスティネーション変数の幅 (大きいほうの幅) に符号拡張されます。
同様に、符号なしのビット幅の小さい変数は代入前にゼロ拡張されます。
代入で予期動作を得るには、ソース変数の明示的な型変換が必要になることがあります。次に例を示します。
ap_uint<10> Result;
ap_int<7> Val1 = 0x7f;
ap_uint<6> Val2 = 0x3f;
Result = Val1; // Yields: 0x3ff (sign-extended)
Result = Val2; // Yields: 0x03f (zero-padded)
Result = ap_uint<7>(Val1); // Yields: 0x07f (zero-padded)
Result = ap_int<6>(Val2); // Yields: 0x3ff (sign-extended)
ビット幅が大きい値を幅が小さいものへ代入する場合の切り捨て
ビット幅が大きいソース変数値を幅の小さなものへ代入すると、値が切り捨てられ、デスティネーション値 (幅の小さいほうの値) の最上位ビット (MSB) を超えたビットはすべて失われます。
この切り捨てが実行されるとき、符号情報が特別に処理されるわけではないので、予期しない動作が見られる可能性があります。予期しない動作を防ぐには、明示的な型変換を利用します。