我目前正在使用浮点宏功能,它接受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
答案 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