我有一个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我不知道我有多少我所以必须使用循环任何人都知道为什么我得到错误或我应该怎么做我试图实现? 谢谢
答案 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)
?