或减少向量数组

Or Reduce An Array of Vectors

需要放在真实的板上,所以必须合成。

使用旧的 VHDL,包含的库:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.numeric_std.all;
use ieee.std_logic_misc.all;

一些信号:

type my_array is array (N-1 downto 0) of std_logic_vector(31 downto 0);
signal enable : my_array;
signal ored_enable: std_logic_vector(31 downto 0);

信号在生成器中合并:

my_gen: for i in 0 to (N-1) generate

    woah: entity work.my_entity

            port map(
                    clk => clk,
                    enable => enable(i)
                    );


 end generate;

ored_enable <= or_reduce(enable); -- this fails

我只是想创建一个 std_logic_vector 来保存来自阵列的 ored 信号。我有什么想法可以简单地实现这一目标吗?

首先,我希望你的最后一行有错字,请阅读

ored_enable <= or_reduce(enable);

但这行不通,因为 or_reduce 只为 std_logic_vector 定义,而不是 std_logic_vector 的数组。您可以创建自己的 reduce 函数:

function or_reduce(a : my_array) return std_logic_vector is
    variable ret : std_logic_vector(31 downto 0) := (others => '0');
begin
    for i in a'range loop
        ret := ret or a(i);
    end loop;

    return ret;
end function or_reduce;

只需将其放入您的体系结构声明中,它就会起作用。