VHDL:编写AND函数

时间:2014-07-25 21:09:40

标签: vhdl

因此,在尝试编写执行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

我甚至尝试使用'+'代替'和',但它的错误相同。

2 个答案:

答案 0 :(得分:2)

VHDL的内置库没有定义一个andinteger的运算符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;