用for-generate实现OR门

时间:2014-05-13 19:08:54

标签: vhdl

我已经使用泛型参数实现了一个OR门,但我目前在使用for-generate实现它时遇到了一些问题。

entity OR_gate is
generic( n : natural := 2);
port(x : in std_logic_vector(1 to n);
      z : out std_logic);
end OR_gate;
architecture Behavioral of OR_gate is
begin
    process(x)
    variable temp : std_logic;
    begin
    temp := '0';
    G1: for i in 1 to N loop
        temp := temp or x(i);
    end generate G1;
z <= temp;
end process;
end Behavioral;

我有G1参数表示循环,但就此而言,我迷失了。

1 个答案:

答案 0 :(得分:0)

在进程内部进行时,它不是生成(并发)循环。在这种情况下,它只是一个常规循环,语法没有generate,因此:

process(x)
  variable temp : std_logic;
begin
  temp := '0';
  G1 : for i in 1 to N loop
    temp := temp or x(i);
  end loop G1;
  z <= temp;
end process;

该过程的替代方法是创建一个函数,然后进行并发函数调用以生成z,如:

architecture Behavioral of OR_gate is

  function or_reduct(slv : in std_logic_vector) return std_logic is
    variable res_v : std_logic;
  begin
    res_v := '0';
    for i in slv'range loop
      res_v := res_v or slv(i);
    end loop;
    return res_v;
  end function;

begin

  z <= or_reduct(x);

end Behavioral;

最后,如果工具支持VHDL-2008定义的逻辑简化运算符,那么您可以将其全部简化为:

z <= or x;