我已经使用泛型参数实现了一个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
参数表示循环,但就此而言,我迷失了。
答案 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;