需要放在真正的电路板上,因此必须合成。
使用旧的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信号。我有什么想法可以简单地实现这个目标吗?
答案 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;
只需将其放入您的架构声明中即可。