我已经实现了一个带有泛型参数的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参数,但是到目前为止,我还是迷路了。
发布于 2014-05-14 03:41:45
当在进程内执行时,它不是一个生成(并发)循环。在本例中,它只是一个常规循环,其语法没有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;https://stackoverflow.com/questions/23639586
复制相似问题