Compiler errors to_float()和除法错误

Compiler errors to_float()和除法错误,compiler-errors,floating-point,vhdl,Compiler Errors,Floating Point,Vhdl,在一篇评论()中提出这个问题后,我决定最好把它作为一个单独的问题 这是代码摘录,是流程的主要部分: variable denum : integer; variable num : integer; variable dividend : float (4 downto -27); begin dividend := to_float(num) / to_float(denum); ... 在指出to_float()函数需要额外参数的错误后

在一篇评论()中提出这个问题后,我决定最好把它作为一个单独的问题

这是代码摘录,是流程的主要部分:

    variable denum : integer; 
    variable num : integer; 
    variable dividend : float (4 downto -27);  

begin
    dividend := to_float(num) / to_float(denum); 
    ... 
在指出to_float()函数需要额外参数的错误后,我尝试了建议的改进,但仍然出现了一些错误:

dividend := to_float(num, dividend) / to_float(denum, dividend);
返回:“float_pkg_c.VHDL(3843)处的VHDL语法错误:范围的右边界必须是常量”

返回:“SM处的VHDL错误。vhd(93):值“-27”超出目标约束范围(0到2147483647)”


错误消息指出问题源于对to_float的错误调用,但考虑到它是最新包的一部分,我看不到该方法中有任何问题。有人能向我澄清一下吗?另外,我不确定除法操作是否可以这样执行,我的意思是在一行中,返回从特定整数获得的浮点值。

我可以在这里看到一个问题:

dividend := to_float(num, 4, -27) / to_float(denum, 4, -27);
如果你看一下定义:

-- to_float (Integer)
function to_float (
    arg                     : INTEGER;
    constant exponent_width : NATURAL    := float_exponent_width;  -- length of FP output exponent
    constant fraction_width : NATURAL    := float_fraction_width;  -- length of FP output fraction
    constant round_style    : round_type := float_round_style)  -- rounding option
    return UNRESOLVED_float is
    variable result     : UNRESOLVED_float (exponent_width downto -fraction_width);
    ...
看一看分数的宽度:这是一种自然现象。这是您当前遇到的错误,因为您提供了-27

当您稍微向下看一看实现时,结果使用了分数_宽度的倒数。因此,您应该调用

to_float(num, 4, 27)

你的include for float包是什么样子的?我生成了include文件,至少它说它成功了。include文件的扩展名是什么?我不确定它是在哪里生成的。我只是指以“use”开头的行……如果你去,你会看到不同工具的特定包,包括Altera:一些工具仍然不能综合标准中的所有内容,可能包括负索引。使用ieee_proposed.float_pkg.all@布莱恩德鲁蒙德:那有什么解决办法吗?我的意思是,我只想把两个整数分成一个浮点。我使用了你提供的网站上的材料,关于你的评论是否有任何细节?我查看了自述文件和.vhdl文件的注释,但没有发现这样的限制。我尝试过,以下错误输出报告为错误(10454):float_pkg_c.vhdl的vhdl语法错误。vhdl(3840):范围的右边界必须是常量错误(10657):SM.vhd的vhdl子程序错误(93):无法详细说明对子程序的调用“to_float”错误(10346):float_pkg_c上的VHDL错误。VHDL(4843):形式端口或参数“l”必须有实际值或默认值错误(10346):float_pkg_c上的VHDL错误。VHDL(4843):形式端口或参数“r”必须有实际值或默认值错误(10658):SM上的VHDL运算符错误。vhd(93):无法计算对运算符“”的调用“你确定你是像我上面键入的那样尝试这个吗?所有这些错误消息都与分数_宽度不是常数有关。你是不是在向我们展示你真正的代码,而是它的一些实现?如果这与您正在尝试的代码相同,那么我也会不知所措。在这种情况下,您可能应该研究您的float_pkg_c.vhdl和Quartus设置。
to_float(num, 4, 27)