如何将FLOAT中的信号位复制到STD_LOGIC_VECTOR表示,反之亦然?

时间:2014-08-07 08:36:32

标签: vhdl

我目前正在使用浮点宏功能,它接受STD_LOGIC_VECTOR的输入并将这些位处理为FLOAT。现在我在FLOAT中有一个信号,如何将这个FLOAT信号转换为具有相同精确位的STD_LOGIC_VECTOR?我可以使用to_slv函数吗?

例如,我在FLOAT中有一个信号(2 downto -3)=> " 011101",我希望在STD_LOGIC_VECTOR表示中具有相同的精确位的该信号(5 downto 0)=> " 011101",我可以使用to_slv吗?

另外,我可以使用to_float将STD_LOGIC_VECTOR的位复制到具有相同精确位的FLOAT表示中吗?

如果不可能,那我该怎么办呢?

谢谢!

的Stefan

1 个答案:

答案 0 :(得分:0)

std_logic_vector(包std_logic_1164)和float(包float_generic_pkg)都是元素基类型std_ulogic的单维数组。

类型转换应该有效。

密切相关的类型之间允许显式类型转换。

数组类型 - 当且仅当

时,两种数组类型密切相关
-- The types have the same dimensionality;

-- For each index position, the index types are either the same or are closely related; and

-- The element types are the same. 

类型STD_ULOGIC_VECTOR是STD_ULOGIC的数组(NATURAL范围<>);

子类型STD_LOGIC_VECTOR是(已解决)STD_ULOGIC_VECTOR;

类型UNRESOLVED_float是STD_ULOGIC的数组(INTEGER范围<>);

子类型float是(已解决)UNRESOLVED_float;

索引:

抽象数字类型 - 任何抽象数字类型都与任何其他抽象数字类型密切相关。

维度是指数组中索引(元素)的数量。

除了 - ' caper'在蛋糕结霜:

在数值类型之间进行转换的情况下,如果转换结果无法满足类型标记强加的约束,则会出错。

float类型的左边界是负的。

处理此问题的方法是转换函数,它使用索引来匹配返回类型的返回值,而to_slv和to_float由包float_generic_pkg提供。 to_float转换函数具有指数宽度和分数宽度的参数,默认值为包装泛型。

(并且始终可以阅读包装设计规范。)

对于某些浮动:

 variable some_float:   float (2 downto -3) := ""011101";
 variable second_float: float (2 downto -3);

具有相同维度的std_logic_vector:

 variable some_slv:   std_logic_vector( 5 downto 0);

 some_slv := to_slv(some_float);

如果您为浮点类型分数和指数宽度传递了包泛型:

 second_float := to_float(some_slv);

如果你还没有:

 second_float := to_float(some_slv,2,3);

其中:

  function to_float (
    arg                     : STD_ULOGIC_VECTOR;
    constant exponent_width : NATURAL := float_exponent_width;  -- length of FP output exponent
    constant fraction_width : NATURAL := float_fraction_width)  -- length of FP output fraction
    return UNRESOLVED_float;

参数exponent_width和fraction_width具有作为包可以覆盖的包泛型传递的默认值。

您可以阅读“源代码”'。请参阅IEEE-SA Supplemental Material,下载相当大的zip文件,解压缩它,并在子目录ieee中,这四个文件:

std_logic_1164.vhdl
std_logic_1164-body.vhdl
fixed_generic_pkg.vhdl
fixed_generic_pkg-body.vhdl