数值控件选板上的大部分数学函数都支持整数或定点数据类型,但是需要请注意,避免使用乘法、除法、倒数、平方根等函数,此类函数比较占用FPGA资源,且如果使用的是定点数据或单精度浮点数据仅适用于FPGA终端。
支持的数据类型:
为了节省FPGA资源,最好不直接用FPGA上乘的除法函数。一般可以用 商与余数 和 按2的幂缩放 。(但是在FPGA里,乘法需要先转成二进制做加法运算,再做乘法,除法也是先转成二进制做减法在做除法)
除法函数可以用商与余数替代,但是这同样会使用较多FPGA资源。
乘除法可以用 按2的幂缩放 替代。
如果想把数据按非整数缩放,比如0.4。那就需要先乘再缩放。
定点数表示用户指定范围和精度内的有理数。定点数的大小在1-64位之间。可配置定点数为带符号或不带符号。
定点数具有固定个数的整数位和分数位。整数位和分数位分别在二进制点的左、右两侧。由于定点数可指定其确切的位数,故二进制小数点的位置是固定的。
例如,在LabVIEW中,有理数0.5可表示为一个总位数为8、整数位为4的定点数。
有理数 | 对应的定点数 |
---|---|
0.5 | 0000.1000 |
在LabVIEW中,同一个有理数也可表示为一个总位数为16、整数位为8的定点数。
有理数 | 对应的定点数 |
---|---|
0.5 | 00000000.10000000 |
注: 以定点数表示有理数时,如未指定定点数确切的位数,LabVIEW将调整定点数的位数,尽量避免数据丢失。LabVIEW无法处理大于64位的数字。 |
要将一个数设置为定点表示法,右键单击数据对象,从快捷菜单中选择表示法,改变对象的数据类型。可配置定点数的编码。还可指定定点数是否包括上溢状态,以及数值函数如何处理定点数的上溢和凑整。如要配置一个定点数,右键单击常量、控件,或数值函数,从快捷菜单中选择属性,打开数值属性、数值常量属性或数值节点属性对话框进行配置。
如要数值的比特数为特定值,需指定定点数的二进制编码方式。
例如:
是一个整数位为8的16位有符号数。下图表示一个字长为16、整数字长为8的有符号数。
1 | 字长(16位) |
2 | 整数字长(8位) |
3 | 符号位 |
4 | 二进制小数点 |
如整数字长大于字长,则LabVIEW不保存超过字长的那部分整数位。下图表示一个字长为8、整数字长为10的数。
1 | 字长(8位) |
2 | 整数字长(10位) |
3 | 整数位未保存 |
4 | 二进制小数点 |
如整数字长为负,LabVIEW将不保存任何整数位,并且也不保存从二进制小数点算起与负数相同的分数位。下图表示一个字长为8、整数字长为-2的数。
1 | 字长(8位) |
2 | 字长-整数字长(8位-2位) |
3 | 分数位未保存 |
4 | 二进制小数点 |
LabVIEW根据用户为定点数指定的编码值计算定点数的范围和delta。
将光标移动到传递定点数据的连线上时,LabVIEW在即时帮助窗口中以下列格式表示该定点数据的配置情况:
[最小值,最大值]:Delta
例如:
[–4, 4]:1的最小值为–4,最大值为4,delta为1。
对指定字长的定点数进行算术运算时,二进制小数点的位置与VI运行之前二进制小数点的位置相同,并无改变。这与浮点数恰好相反,进行浮点数算术运算时,浮点数的二进制小数点或十进制小数点的位置将改变。如算术运算所要求的字长大于定点数的字长,则运算后可能导致数据损失。
LabVIEW将调整数值函数的输出值的字长以尽量避免数据损失。然而,如表示输出值所要求的字长超出了指定的最大范围或LabViEW所允许的64位,则LabVIEW无法避免数据损失。如要配置数值函数的输出设置,右键单击函数,从快捷菜单中选择属性,打开数值节点属性对话框进行配置。
对定点数进行算术运算或使用转换为定点数函数将数值数据转换为定点数据时,都可能发生上溢和凑整。通过配置,LabVIEW可避免数值函数输出的定点数发生溢出或凑整。但在某些条件下LabVIEW无法避免溢出或凑整。
例如,将定点值连线数值函数(加、减、乘、平方),LabVIEW将默认为增加输出值的字长以使运算结果得以正常显示。此做法同样适用于浮点值。然而,如避免溢出或凑整所要求的字长超出了LabVIEW可接受的最大字长或用户指定的最大字长,则溢出或凑整可能无法避免。LabVIEW接受的最大字长为64位。
注: 如将一个定点值连接至除函数、倒数函数、平方根函数,因为精度无穷,所以经常会发生凑整状态。 |
在二进制中无法确切表示的类型周期和值也可能导致溢出或凑整。
当运算结果在输出类型能表示的值的范围外时,将发生溢出。可为溢出选择下列溢出模式进行处理:
注: 通常情况下,饱和模式需要FPGA终端上额外的硬件资源。 |
将定点数配置为包括上溢状态,确定是否发生上溢。如定点值包括上溢状态,LabVIEW将分配额外的存储空间,用于追踪作为计算结果的定点值是否溢出。将定点数配置为包括上溢状态后,可在定点数控件和常量上显示上溢状态LED。定点值的溢出状态为TRUE时,LED灯亮。也可使用定点溢出?函数确定定点数的上溢状态。定点函数可对定点数字的溢出状态进行操作。
注: LabVIEW不检查定点数的下溢情况。 |
使用比较函数比较定点数时,LabVIEW将忽略上溢状态,只比较数值。例如,如使用等于?函数比较上溢状态为TRUE的定点数和数值为1.5,无上溢状态的定点数,LabVIEW将返回TRUE。
如要配置数值函数的输出设置,右键单击函数,从快捷菜单中选择属性,打开数值节点属性对话框进行配置。该对话框用于配置LabVIEW处理溢出和凑整。
当输入值或运算结果的精度大于输出类型的精度时,将发生凑整。LabVIEW将输入值强制为一个与输出类型精度相同的值。例如,假设输出类型可表示下列连续值s和t。如运算结果为x,且x在s和t之间,即s<x<t,由于输出类型无法精确表示x,所以需要进行凑整。
可为凑整选择下列凑整模式进行处理:
注: 取整模式对性能的影响都微乎其微。但是,如在FPGA的终端运行处理溢出的VI,则取整可能会对性能有较大的影响。 |
在FPGA VI中使用定点数时,为特定函数选择正确的溢出和四舍五入模式非常重要。高吞吐率数学函数和部分数值函数带有配置对话框,可用于模式选择。如能够产生溢出或四舍五入,这些模式将影响FPGA VI所需的FPGA资源量。如不能产生溢出或四舍五入,操作不需要使用额外的FPGA资源。
多数情况下,在函数的配置对话框中勾选匹配至源复选框可避免溢出。如勾选此复选框,LabVIEW将尝试调整输出数据类型的宽度和范围,从而不会产生溢出或四舍五入。但此调整并不适用于所有情况。例如,函数包含除法时会一直产生四舍五入。且某些函数不包含此复选框。
通常溢出模式以下列几种方式影响FPGA资源:
通常四舍五入模式以下列几种方式影响FPGA资源:
注: 高吞吐率除和高吞吐率倒数函数使用输出值向零取整的四舍五入模式。此模式将输出值四舍五入为数据类型能够表示的最接近的值。如值为整数,LabVIEW进行截断取整。如值为负数,假设至少有一位删除的位不为零,LabVIEW删除最低有效位(LSB)并为剩余的LSB添加符号位。 例如,输出值x位于连续值s和t之间(s < x < t),如x为正数,LabVIEW设置x等于s。如x为负数,LabVIEW设置x等于t。 对于这两个函数,与其它四舍五入模式相比,向零取整使用的FPGA资源最少。不能为这些函数指定不同的四舍五入模式。 |
LabVIEW 中可用于将定点 (FXP)转换 为整数或浮点的 函数有:
定点到整数转换可用于将 FXP 数字转换为整数,并且整数的大小将基于 FXP 数字的大小。例如,如果您的 FXP 的字长为 8 位,则会将其转换为 I8,但字长为 9 的 FXP 将转换为 I16。(字和整数字长描述)
这在某些情况下可能没问题,但是如果我们需要将任何FXP(任何字长)转换为特定大小的整数,例如将任何大小的 FXP 转换为 I16,我们需要将该 FXP 转换为在使用定点到整数转换之前,字长为 16 位:
1.创建您的初始 FXP 编号,这可以来自 FPGA I/O、常数或控件。
如果使用控件或常量,您可以右键单击它,选择“属性”=>“数据类型” 并编辑字长和整数字长。设置 字长 = 4 位,整数字长 = 2 位。
2.将 FXP 控件(或常数)连接到 定点 转换函数,并将输出配置设置为 16 位。
3.右键单击 “到定点” 并选择 “属性”=>“输出配置”。将编码设置为带符号, 字长 = 16 位,整数字长 = 2 位。这将确保输出设置为 16 位有符号整数 (I16),这意味着 I16 数字的整个范围为 -32768 I16 到 +32767 I16,而无符号 16 位整数 (U16) 的范围为 0 到 65535
4.将定点 转换函数的输出连接到定点到整数转换 函数。其输出将是一个 16 位整数,缩放到正确的范围。
1.将整数连接到 整数到定点 函数,
将已知的 FXP 值连接到整数到定点转换函数 上的 定点类型输入。可以使用控件或常量,只要具有与初始 FXP 数字相同的属性(字和整数字长度)即可确保其以正确的格式转换回来。或者,将初始 FXP 值直接连接到定点类型 输入。
注意:它不是 必需的 输入,但建议连接,以便您更好地控制功能。
2.整数到定点 转换的输出 将是一个 FXP 数字,其属性与初始 FXP 数字相同。