因此,在尝试编写执行AND门的函数时,intput是门输入的向量和输入的数量。但由于某种原因,编译器给了我一个错误,它不能识别“和”逻辑运算符我出于某种原因使用内部。有谁能发现这个问题?
p.s这是一个更大的项目的一部分,它是一个16counter(0-15),由4个链接的JK触发器和2个AND门(使用我的“myand”功能)组成。
function myand (x: std_logic_vector; n : integer range 7 downto 0) return std_logic is
variable result: integer :=0;
begin
for i in 0 to n-1 loop
result:=result and x(i);
end loop;
return result;
end function;
编译错误是:
Error (10327): VHDL error at counter16.vhd(16): can't determine definition of operator ""and"" -- found 0 possible definitions
我甚至尝试使用'+'代替'和',但它的错误相同。
答案 0 :(得分:2)
VHDL的内置库没有定义一个and
和integer
的运算符std_logic
。
result
应该是std_logic
而不是integer
。result
应初始化为'1'
而不是0
。答案 1 :(得分:1)
如果在'range
上使用x
属性来获取索引值,则可以通过删除'n'参数来简化函数接口。如果将std_logic_vector的子范围用作参数,则只能使用该子范围调用myand
函数。包括sharth建议,功能是:
function myand (x : std_logic_vector) return std_logic is
variable result : std_logic := '1';
begin
for i in x'range loop
result := result and x(i);
end loop;
return result;
end function;