2

std_logic_vector我需要对存储为信号的 IEEE 754 浮点数进行操作。

例如:

signal a, b, ans : std_logic_vector( 63 downto 0 );
..
ans <= std_logic_vector(to_float(a) + to_float(b));

我怎样才能做到这一点?(我想我需要在转换过程中的某处定义位数?) 编辑:代码是可合成的,但我收到警告。代码:

variable tempfloat1, tempfloat2, tempfloat3 : float32;
..
tempfloat1 := to_float(s_do_ssc2wb, exponent_width => 8, fraction_width => 23 );
tempfloat2 := to_float(s_do_wb2ssc, exponent_width => 8, fraction_width => 23 );
tempfloat3 := tempfloat1 + tempfloat2;

警告:

 "float_pkg_c.vhdl" line 1515: VHDL Assertion Statement with non constant condition is ignored.
    "float_pkg_c.vhdl" line 1600: Index value(s) does not match array range, simulation mismatch.

我想知道它的正确语法是什么......“添加”函数不接受用户指南中示例中的参数。

4

2 回答 2

4

对于 VHDL 2008,使用内置的 float_pkg,它提供可与 std_logic_vector 相互转换的浮点类型。对于早期版本的 VHDL,您可以使用来自http://www.vhdl.org/fphdl/index.html的这些相同包的原始、预标准版本。

使用浮点类型时,它们的工作非常简单,类似于无符号类型:您可以对它们进行算术运算、调整它们的大小等。

于 2012-09-03T17:43:42.737 回答
1

最后,我使用了浮点 IP 内核,由 ISE 中的 IP 内核生成器生成。上面链接的浮点包实际上毫无价值,因为合成需要大约一个小时,而 Spartan3 上的最大频率仅为 ~6 MHZ。使用 IP 内核:40 MHz 和 3-5 分钟的合成时间。

于 2013-01-25T15:47:18.580 回答