使用for循环在vhdl中设计加法器

时间:2014-02-10 20:42:22

标签: for-loop vhdl

我正在尝试通过使用for / generate循环实例化n位加法器的多个副本来创建m位加法器。这是我的代码到目前为止,它无法通过给出错误来模拟: “第44行:并非a_n的所有部分形式都具有实际”。 n位加法器被声明为组件,我已成功测试它并且它可以工作。 请提供解决此问题的任何建议

entity m_bit_adder is
generic (m : integer := 16; n : integer := 4);
    Port ( A_m : in  STD_LOGIC_VECTOR (m-1 downto 0);
           B_m : in  STD_LOGIC_VECTOR (m-1 downto 0);
           Cin_m : in  STD_LOGIC;
           Cout_m : out  STD_LOGIC;
           S_m : out  STD_LOGIC_VECTOR (m-1 downto 0));
end m_bit_adder;

architecture Behavioral of m_bit_adder is

component n_bit_adder is
generic (n_number : integer := 4);
    Port ( A_n : in  STD_LOGIC_vector(n-1 downto 0);
           B_n : in  STD_LOGIC_vector(n-1 downto 0);
           Cin_n : in  STD_LOGIC;
           S_n : out  STD_LOGIC_vector(n-1 downto 0);
           Cout_n : out  STD_LOGIC);
end component;

signal sig_m : std_logic_vector (m downto 0);


begin

 m_bit_adder : for j in 0 to m-1 generate

 n_bit : n_bit_adder generic map (n_number => n)

 port map (  
                   A_n(n-1) => A_m(j),       
                 B_n(n-1)=> B_m(j),
                 S_n(n-1) => S_m(j),
                 Cin_n => sig_m(j),
                 Cout_n => sig_m(j+1)              
                );



end generate;
sig_m(0) <= Cin_m; 
Cout_m   <= sig_m(m);

end Behavioral;

这是我的n加法器代码:

entity n_bit_adder is
generic (n : integer := 4);
    Port ( A_n : in  STD_LOGIC_vector(n-1 downto 0);
           B_n : in  STD_LOGIC_vector(n-1 downto 0);
           Cin_n : in  STD_LOGIC;
           S_n : out  STD_LOGIC_vector(n-1 downto 0);
           Cout_n : out  STD_LOGIC);
end n_bit_adder;
architecture Behavioral of n_bit_adder is

component adder 
    Port ( A : in  STD_LOGIC;
           B : in  STD_LOGIC;
           Cin : in  STD_LOGIC;
           S : out  STD_LOGIC;
           Cout : out  STD_LOGIC);

end component;

signal sig_n : std_logic_vector (n downto 0);


begin

n_bit_adder : for i in 0 to n-1 generate
 one_bit : adder

 port map (  
                    A => A_n(i), 
                 B => B_n(i),
                 S => S_n(i),
                 Cin => sig_n(i),
                 Cout => sig_n(i+1)
                );            
end generate;

sig_n(0) <= Cin_n; 
Cout_n <= sig_n(n);

end Behavioral;

1 个答案:

答案 0 :(得分:0)

n_bit_adder仅使用A_n(n-1)中的n_bit : n_bit_adder generic map (n_number => n) port map ( A_n(n-1) => A_m(j), .... 正式一侧的实例进行实例化:

n_bit_adder

std_logic_vector的组件A_ncomponent n_bit_adder is generic (n_number : integer := 4); Port ( A_n : in STD_LOGIC_vector(n-1 downto 0); ... ,其中包含多个位:

std_logic_vector(3 downto 0)

因此,对于A_n(2 downto 0)n_number未在映射的正式侧(左侧)使用,这也是错误消息在“并非所有a_n的部分形式都具有实际内容”中所说的内容”

另请注意,在端口上通用和n长度的组件中使用了不同的名称std_logic_vector和{{1}}。