涉及 ap_[u]<> 类型的表达式 - 2023.2 简体中文

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

类型为 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) 位置的所有位都将丢失。

截位期间对于符号信息不进行任何特殊处理。这可能导致出现意外行为。显式类型强制转换可有助于避免此类意外行为。