vhdl运算符“和”含糊不清

时间:2015-03-02 14:13:18

标签: vhdl

我的综合工具不完全支持VHDL2008,我想使用类型的代码行:“a< = and bit_vector;”这基本上意味着如果bit_vector中的所有位都是'1'则a ='1',否则为'0'。 (a是std_logic,bit_vector是std_logic_vector)。

所以我用自己的“和”函数创建了一个小包,将它添加到我的VHDL中:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

package common_pkg is
  function "and" (L: std_logic_vector) return std_logic; -- And all bits in a vector

end package common_pkg;

package body common_pkg is
  function "and" (L: std_logic_vector) return std_logic is
    variable result : std_logic := '1';
  begin
    for i in 0 to L'length - 1 loop
      result := result and L(i);
    end loop;
    return result;
  end function;

end package body;

但是,在编译时我会收到以下错误:

** Error: c:\Repo\src\My_test.vhd(127): Operator "and" is ambiguous.
   Feasible operators are:
  (explicit) std_logic_1164."and"[STD_ULOGIC_VECTOR return STD_ULOGIC] at vhdl_src/ieee/stdlogic.vhd(140)
  (explicit) common_pkg."and"[STD_LOGIC_VECTOR return STD_LOGIC] at c:\Repo\src\common_pkg.vhd(23)
** Error: c:\Repo\src\My_test.vhd(127): Type error resolving prefix expression "and" as type ieee.std_logic_1164.STD_ULOGIC.

我无法弄清楚如何解决这个问题。我可以将我的功能重命名为“my_and”,但这不是我真正想要的......那里有没有人做过类似的事情,能够解释问题并且预先指出我正确的方向?

2 个答案:

答案 0 :(得分:0)

除了之前的答案和评论:

如果需要使用你的一元"和"对于宽输入向量的运算符,某些工具不够智能来映射"和"运营商到适当的资源。特别是,如果你的代码是针对FPGA的,那么有一种方法可以使用进位链来加速"和#34;和"或"计算

来自arith_prefix_and的模块PoC Library具有用VHDL编写的通用进位链描述和用于Xilinx MUXCY原语的设备特定实例,以加速广泛"和"操作

还有一个arith_prefix_or模块。

答案 1 :(得分:0)

我尝试了第二个版本但获得了相同的结果。上面的代码已经完成了common_pkg.vhd部分。其他代码有以下标题:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use ieee.std_logic_unsigned.all;

library unisim;
use unisim.vcomponents.all;

library common_lib;
use common_lib.common_pkg.all;

/泰迪熊