在结构化的VHDL中连接执行为adder/subtractor
Connect carry out to carry in for adder/subtractor in structural VHDL
所以我有以下 VHDL 代码来实现 Nbit adder/subtractor,仅使用 2:1 多路复用器、反相器(翻转位)和全加器。我在将加法器的进位连接到下一个进位时遇到问题,而第一个加法器的进位为 i_Control。任何帮助将不胜感激:)。
library IEEE;
use IEEE.std_logic_1164.all;
use work.all;
entity add_subtract is
generic(N : integer := 16);
port(i_M : in std_logic_vector(N-1 downto 0);
i_N : in std_logic_vector(N-1 downto 0);
i_Control : in std_logic_vector(N-1 downto 0);
o_S : out std_logic_vector(N-1 downto 0));
end add_subtract;
architecture structure of add_subtract is
component bit_adder
port(i_X : in std_logic;
i_Y : in std_logic;
i_Cin : in std_logic;
o_Ss : out std_logic;
o_Couts : out std_logic);
end component;
component inverter
port(i_A : in std_logic;
o_F : out std_logic);
end component;
component bit_mux
port(i_X : in std_logic;
i_Y : in std_logic;
i_S : in std_logic;
o_N : out std_logic);
end component;
signal compvalue, muxvalue, addervalue : std_logic_vector(N-1 downto 0);
signal sel, carry : std_logic_vector(N-1 downto 0);
signal k : integer := 0;
begin
carry(0) <= i_Control(0);
G1: for i in 0 to N-1 generate
one_comp: inverter
port map(i_A => i_N(i),
o_F => compvalue(i));
mux: bit_mux
port map(i_X => i_N(i),
i_Y => compvalue(i),
i_S => i_Control(i),
o_N => muxvalue(i));
struct_adder: bit_adder
port map(i_X => i_M(i),
i_Y => muxvalue(i),
i_Cin => carry(i),
o_Ss => o_S(i),
o_Couts => carry(i));
end generate;
end structure;
进位数组加长一个:
signal carry : std_logic_vector(N downto 0); -- was N-1
并更改此:
o_Couts => carry(i));
对此:
o_Couts => carry(i+1));
在您的生成语句中保留 i_Cin 进位输入关联。
如果最后一个进位不通过输出端口传送,网络将在合成过程中被吃掉。
所以我有以下 VHDL 代码来实现 Nbit adder/subtractor,仅使用 2:1 多路复用器、反相器(翻转位)和全加器。我在将加法器的进位连接到下一个进位时遇到问题,而第一个加法器的进位为 i_Control。任何帮助将不胜感激:)。
library IEEE;
use IEEE.std_logic_1164.all;
use work.all;
entity add_subtract is
generic(N : integer := 16);
port(i_M : in std_logic_vector(N-1 downto 0);
i_N : in std_logic_vector(N-1 downto 0);
i_Control : in std_logic_vector(N-1 downto 0);
o_S : out std_logic_vector(N-1 downto 0));
end add_subtract;
architecture structure of add_subtract is
component bit_adder
port(i_X : in std_logic;
i_Y : in std_logic;
i_Cin : in std_logic;
o_Ss : out std_logic;
o_Couts : out std_logic);
end component;
component inverter
port(i_A : in std_logic;
o_F : out std_logic);
end component;
component bit_mux
port(i_X : in std_logic;
i_Y : in std_logic;
i_S : in std_logic;
o_N : out std_logic);
end component;
signal compvalue, muxvalue, addervalue : std_logic_vector(N-1 downto 0);
signal sel, carry : std_logic_vector(N-1 downto 0);
signal k : integer := 0;
begin
carry(0) <= i_Control(0);
G1: for i in 0 to N-1 generate
one_comp: inverter
port map(i_A => i_N(i),
o_F => compvalue(i));
mux: bit_mux
port map(i_X => i_N(i),
i_Y => compvalue(i),
i_S => i_Control(i),
o_N => muxvalue(i));
struct_adder: bit_adder
port map(i_X => i_M(i),
i_Y => muxvalue(i),
i_Cin => carry(i),
o_Ss => o_S(i),
o_Couts => carry(i));
end generate;
end structure;
进位数组加长一个:
signal carry : std_logic_vector(N downto 0); -- was N-1
并更改此:
o_Couts => carry(i));
对此:
o_Couts => carry(i+1));
在您的生成语句中保留 i_Cin 进位输入关联。
如果最后一个进位不通过输出端口传送,网络将在合成过程中被吃掉。