2017-07-28 34 views
0

我正在使用Altera DE0 nano SoC FPGA。我想知道如何从HPS向FPGA发送浮点数。如何从HPS向FPGA发送浮点数?

让一个float ex_hps = 6000.9282;通过Avalon内存映射接口发送。如果Avalon_write_data address有32位数据长度(可以从Qsys中设置),在FPGA端,这个数字存储在一个32位的std_logic_vector右边?

std_logic_vector是否包含浮点数作为固定点类型(13 downto -14)与原始值?或者如何把这个数字回到VHDL的FPGA端的固定点数ex_fpga(13 downto -14)

+2

您应该找到,阅读并理解定义32位浮点二进制表示的标准。接下来,您会明白,您的FPGA **和** CPU中都可以使用相同的表示法。 –

+0

6 downto -6是13位,而不是32 ...这里缺少信息。 737692.928203不适合6 downto -6。 – JHBonarius

+0

@JHBonarius我没有更正问题 – komto909

回答

0

这是你可以自己抬头看的东西。

您需要首先使用关于系统的知识将float映射到C中的整数。

#include <math.h> 

unsigned int PrepareForTransmission(float inputValue) 
{ 
    if (inputValue < 0) return 0; /* underflow error: clip */ 
    if (inputValue >= powf(2.0f, 14)) return (unsigned int)pow(2.0, 28) - 1; /* overflow error: clip */ 
    return (unsigned int)(inputValue * pow(2.0, 14) + 0.5); /* +0.5 to round */ 
} 

然后在VHDL,你可以简单地口无符号std_logic_vector(27 downto 0)ufixed(13 downto -14)。你(希望)知道如何做到这一点。

+0

由Bishop的fixed_point包是可综合的吗? – komto909

+0

@ komto909说什么? – JHBonarius