繁体   English   中英

如何将定点编号发送到FPGA

[英]How to send fixed point number to FPGA

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

如此处所述您可以使用以下简单代码将浮点数“转换”为定点数(这只是一个示例,您可以使用很多不同的方式,我相信比这种简单的方式更好):

#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接口和axis接口的示例:这是一种节省资源,以牺牲计算精度为代价的常用方法。 当然,您应该逐案评估。

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

您将0.2表示为0.2 * 2 ^ 16并丢失所有十进制大小写。 您基本上将数字向左移动16次。

这是13107,2,则您会损失所有,因此13107或0x3333。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM