Vhdl 如何将浮点中的信号位复制到标准逻辑向量表示,反之亦然?

Vhdl 如何将浮点中的信号位复制到标准逻辑向量表示,反之亦然?,vhdl,Vhdl,我目前正在使用浮点MegaFunction,它接受STD_逻辑_向量的输入,并将位作为浮点进行处理。现在我有一个浮点数中的信号,我如何用相同的精确位将这个浮点数信号转换成STD_逻辑_向量?我可以使用slv功能吗 例如,我有一个浮点数(2到-3)=>“011101”中的信号,我想让这个信号在STD_逻辑_向量表示中具有相同的精确位(5到0)=>“011101”,我可以使用它吗 还有另一种方法,我可以用to_float将STD_LOGIC_VECTOR的位复制到具有相同精确位的float表示吗 如

我目前正在使用浮点MegaFunction,它接受STD_逻辑_向量的输入,并将位作为浮点进行处理。现在我有一个浮点数中的信号,我如何用相同的精确位将这个浮点数信号转换成STD_逻辑_向量?我可以使用slv功能吗

例如,我有一个浮点数(2到-3)=>“011101”中的信号,我想让这个信号在STD_逻辑_向量表示中具有相同的精确位(5到0)=>“011101”,我可以使用它吗

还有另一种方法,我可以用to_float将STD_LOGIC_VECTOR的位复制到具有相同精确位的float表示吗

如果这是不可能的,那么我如何才能做到这一点

谢谢大家!

Stefan

标准逻辑向量(软件包标准逻辑)和浮点(软件包浮点通用)都是标准逻辑单元基型的一维数组

类型转换应该可以工作

允许在密切相关的类型之间进行显式类型转换

数组类型——两种数组类型密切相关当且仅当

-- 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_向量是STD_-ULOGIC的数组(自然范围)

子类型STD_逻辑_向量是(解析的)STD_逻辑_向量

类型UNRESOLVED_float是STD_ULOGIC的数组(整数范围)

子类型float为(已解析)未解析\u float

有关索引:

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

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

除了-蛋糕糖霜中的“跳跃”:

对于数字类型之间的转换,如果转换结果未能满足类型标记施加的约束,则是错误的

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);
以及具有相同维度的标准逻辑向量:

 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具有作为包泛型传递的默认值,您可以覆盖这些值

你可以阅读“源代码”。请参阅,下载相当大的zip文件,将其解压缩,然后在子目录ieee中,下载四个文件:

std_logic_1164.vhdl
std_logic_1164-body.vhdl
修复了\u generic\u pkg.vhdl

修复了\u generic\u pkg-body.vhdl

亲爱的David Koontz,非常感谢您的快速回复。然而,我不确定我是否理解了你的回答,可能是因为我对VHDL的了解。所以,如果我有一个浮动信号a(2到-3):=“011101”,那么我写B这是数组类型转换,与数字类型没有任何关系。注:维度(指数数量、元素数量)相同。不应丢失任何信息。阅读软件包float_generic_pkg中的功能设计规范。亲爱的David Koontz,非常感谢您的时间和回答!我不知道有两种不同类型的转换,数组和数值,我只知道如何转换,而不知道两者之间的区别。这应该可以解决我的问题,现在,再次感谢你!