非法的顺序陈述。使用std_logic_vector时出错

时间:2017-04-27 23:18:38

标签: vhdl

我有一个VHDL项目,这是我第一次使用它。我需要创建一个由全加器构造的加法器/减法器,它需要能够添加8到32位的数字。我定义了一个泛型,但在尝试运行代码时,我得到了Illegal顺序语句。代码是这样的:

library ieee;
use ieee.std_logic_1164.all;
use IEEE.std_logic_unsigned.all; 
entity Add_Sub is
  generic (N : integer := 8); 
  port(addsub_line: in std_logic;
        A: in std_logic_vector(N-1 downto 0);
        B: in std_logic_vector(N-1 downto 0);
        SumOut: out std_logic_vector(N-1 downto 0);
        Cout: out std_logic);
end Add_Sub;

architecture struct of Add_Sub is
  component FA_Ent is
      port(a: in std_logic;
       b: in std_logic;
       carry_in: in std_logic;
       sum: out std_logic;
       carry_out: out std_logic);
  end component;
  component XOR_GATE is
    port(A: in std_logic;
         B: in std_logic;
         F: out std_logic);
  end component;

  signal BxorAddSub: std_logic_vector(N-1 downto 0);
  begin 
    process 
      begin
      for i in 0 to N-1 loop
        BxorAddSubLine: XOR_GATE port map(B(0), addsub_line, BxorAddSub(0));
      end loop;
    end process;
  end struct;

我想在某处使用循环错误。即时通讯试图为我拥有的所有位做xor我不知道我有多少我所以必须使用循环任何人都知道为什么我得到错误或我应该怎么做我试图实现? 谢谢

1 个答案:

答案 0 :(得分:2)

您的基本问题是您无法从流程内实例化组件:

process 
begin
  for i in 0 to N-1 loop
    BxorAddSubLine: XOR_GATE port map(B(0), addsub_line, BxorAddSub(0));
  end loop;
end process;

写这个的正确方法是:

XorGates : for i in 0 to N-1 generate
  BxorAddSubLine: XOR_GATE port map(B(0), addsub_line, BxorAddSub(0));
end generate;

另请注意,端口映射中的位置关联通常被视为不良做法。命名关联更具可读性且不易出错:

BxorAddSubLine: XOR_GATE
  port map(A => B(0),
           B => addsub_line,
           F => BxorAddSub(0));

最后,您的所有BxorAddSubLine个实例都连接到B(0)BxorAddSub(0);这可能不是你想要的。也许B(i)BxorAddSub(i)