【问题标题】:How to send fixed point number to FPGA如何将定点数发送到FPGA
【发布时间】:2015-05-12 23:44:15
【问题描述】:

我正在为 Zedboard 使用 Vivado。我的自定义 IP 包含 32 位输入和输出。我也需要对定点数进行一些算术运算。但是这个定点数要从 SDK 发送到 FPGA 部分。所以我的问题是如何在 SDK 中将 float_value = 0.2 表示为定点?

【问题讨论】:

  • 请问您想在 fpga 中的哪个位置发送数据?我的意思是:使用 HLS 创建的硬件加速器?到 Xilinx 的另一个 ip?要使用 HLD 创建的 ip?你想使用的界面呢?给我们一些更多的细节,以便具体

标签: sdk floating-point vhdl xilinx fixed-point


【解决方案1】:

正如here 所解释的那样,您可以使用这个简单的代码将浮点数“翻译”为定点数(这只是一个示例,您可以使用很多不同的方式,我肯定比这种简单的方法):

#include <stdio.h>
typedef int Fixed;

#define FRACT_BITS 16
#define FRACT_BITS_D2 8
#define FIXED_ONE (1 << FRACT_BITS)
#define INT2FIXED(x) ((x) << FRACT_BITS)
#define FLOAT2FIXED(x) ((int)((x) * (1 << FRACT_BITS))) 
#define FIXED2INT(x) ((x) >> FRACT_BITS)
#define FIXED2DOUBLE(x) (((double)(x)) / (1 << FRACT_BITS))
#define MULT(x, y) ( ((x) >> FRACT_BITS_D2) * ((y)>> FRACT_BITS_D2) )

但你必须注意很多事情。一个与精度的最终损失有关(不是每次都是这样);在任何情况下,值的范围都是完全不同的,并且在 FPGA 中,您应该不再将数据管理为浮点数(例如,这意味着乘法以不同的方式完成,当然可以节省大量资源)。 之后,如果要向 FPGA 发送数据,可以使用标准的 AXI4 接口,例如。 我有一些关于 m_axi 接口和轴接口的例子:这是一种用于节省资源的常用方法,但付出了失去计算精度的代价。当然,您应该逐个评估。

【讨论】:

    【解决方案2】:

    首先,您需要定义固定点的精度。 假设您使用的是 16 位精度。

    您会将 0.2 表示为 0.2 * 2 ^ 16 并丢失每个小数。您基本上将数字向左移动 16 次。

    这是 13107,2 那么你会丢失 之后的所有内容,所以 13107 或 0x3333。

    【讨论】:

    • 无法理解你在最后一句中的意思,所以我不能说我是否同意。在任何情况下,绝对可以在不损失精度的情况下以定点表示数据(在 Xilinx SDK 中)。
    猜你喜欢
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 2016-02-19
    • 2021-08-22
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 2016-01-23
    相关资源
    最近更新 更多