我试图让这个“for”循环工作,但我遇到了同样的错误:“非法并发语句”。
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use IEEE.std_logic_1164.STD_LOGIC_VECTOR;
entity circ is
generic ( Width : integer:=8;
WidthZ : integer:=4);
port ( z : out std_logic_vector ( WidthZ-1 downto 0 );
x1 : in std_logic_vector ( Width-1 downto 0 );
x2 : in std_logic_vector ( Width-1 downto 0 ));
end entity circ;
architecture funcLog_circ of circ is
signal count : std_logic_vector (3 downto 0);
begin
for i in 0 to 7 loop
if (x1(i) xor x2(i)) then
count <= count + 1;
end if;
end loop;
z <= count;
end architecture;
我真的不知道为什么我不能使用“for”循环。
for 循环不是并发语句。所以它只能在进程内部使用:
process(x1, x2)
begin
for i in 0 to 7 loop
if (x1(i) xor x2(i)) then
count <= count + 1;
end if;
end loop;
end process;
不要忘记初始化信号计数,否则你的设计将无法工作。例如通过
signal count : std_logic_vector (3 downto 0) := (others => '0');
请注意,该计数只会增加 1,与循环中的 if 条件为 TRUE 的频率无关。