我的综合工具不完全支持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”,但这不是我真正想要的......那里有没有人做过类似的事情,能够解释问题并且预先指出我正确的方向?
答案 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;
/泰迪熊