如何在VHDL中添加“for”循环

问题描述 投票:0回答:1

我试图让这个“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-loop vhdl modelsim
1个回答
0
投票

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 的频率无关。

© www.soinside.com 2019 - 2024. All rights reserved.