或者减少向量数组

时间:2015-03-10 20:22:55

标签: vhdl

需要放在真正的电路板上,因此必须合成。

使用旧的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信号。我有什么想法可以简单地实现这个目标吗?

1 个答案:

答案 0 :(得分:3)

首先,我希望您的最后一行是拼写错误并阅读

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;

只需将其放入您的架构声明中即可。