8 位进位-select 加法器中的未知错误
Unknown error in 8 bit carry-select adder
所以我必须为我的实验室制作一个 8 位进位 select 加法器。我查看了维基百科,在那里我找到了一个 n 位进位 select 加法器的图表,并创建了我认为应该正确的内容,但是当我 运行 模拟时,我得到了一个错误的答案。如果有人能告诉我正确建模 8 位进位 select 加法器有什么问题,我将附上我的 vhdl 代码,我将不胜感激。
entity CarrySelect is
port( a : in std_logic_vector(7 downto 0);
b : in std_logic_vector(7 downto 0);
s : out std_logic_vector(7 downto 0);
co : out std_logic;
ci : in std_logic
);
end CarrySelect;
architecture behav of CarrySelect is
component multiplexer2 is
port (
a : in std_logic;
b : in std_logic;
s : in std_logic;
y : out std_logic
);
end component;
component RCA4 is --add RCA4 component for use by CS adder
port (ci: in std_logic;
a, b: in std_logic_vector(3 downto 0);
s: out std_logic_vector(3 downto 0);
co: out std_logic
);
end component;
signal t0,t1,c0,c1 : std_logic_vector(7 downto 0); --temp signals for passing from RCAs to muxes
signal co1 : std_logic;
begin
--for carry 0
RCA0 : RCA4 port map('0', a(3 downto 0), b(3 downto 0), t0(3 downto 0), c0(0));
RCA2 : RCA4 port map('0', a(7 downto 4), b(7 downto 4), t0(7 downto 4), c0(1));
--for carry 1
RCA1 : RCA4 port map('1', a(3 downto 0), b(3 downto 0), t1(3 downto 0), c1(0));
RCA3 : RCA4 port map('1', a(7 downto 4), b(7 downto 4), t1(7 downto 4), c1(1));
--mux for carry
MUX0 : multiplexer2 port map(c0(0),c1(0),ci,co1);
MUX9 : multiplexer2 port map(c0(1),c1(1),co1,co);
--muxes for sum
MUX1 : multiplexer2 port map(t0(0),t1(0),ci,s(0));
MUX2 : multiplexer2 port map(t0(1),t1(1),ci,s(1));
MUX3 : multiplexer2 port map(t0(2),t1(2),ci,s(2));
MUX4 : multiplexer2 port map(t0(3),t1(3),ci,s(3));
MUX5 : multiplexer2 port map(t0(4),t1(4),co1,s(4));
MUX6 : multiplexer2 port map(t0(5),t1(5),co1,s(5));
MUX7 : multiplexer2 port map(t0(6),t1(6),co1,s(6));
MUX8 : multiplexer2 port map(t0(7),t1(7),co1,s(7));
end architecture behav;
通过查看这段代码(没有组件和任何测试平台的代码),我想我发现了一些可能有问题的地方。
当您使用 RCA4 组件创建一个更大的 RCA 并以 0 作为进位时,您编写了 2 个 RCA4,RCA2(在端口映射中)需要将来自 RCA0 的进位作为进位而不是 0。
尝试改变它,我希望我有所帮助。
所以我必须为我的实验室制作一个 8 位进位 select 加法器。我查看了维基百科,在那里我找到了一个 n 位进位 select 加法器的图表,并创建了我认为应该正确的内容,但是当我 运行 模拟时,我得到了一个错误的答案。如果有人能告诉我正确建模 8 位进位 select 加法器有什么问题,我将附上我的 vhdl 代码,我将不胜感激。
entity CarrySelect is
port( a : in std_logic_vector(7 downto 0);
b : in std_logic_vector(7 downto 0);
s : out std_logic_vector(7 downto 0);
co : out std_logic;
ci : in std_logic
);
end CarrySelect;
architecture behav of CarrySelect is
component multiplexer2 is
port (
a : in std_logic;
b : in std_logic;
s : in std_logic;
y : out std_logic
);
end component;
component RCA4 is --add RCA4 component for use by CS adder
port (ci: in std_logic;
a, b: in std_logic_vector(3 downto 0);
s: out std_logic_vector(3 downto 0);
co: out std_logic
);
end component;
signal t0,t1,c0,c1 : std_logic_vector(7 downto 0); --temp signals for passing from RCAs to muxes
signal co1 : std_logic;
begin
--for carry 0
RCA0 : RCA4 port map('0', a(3 downto 0), b(3 downto 0), t0(3 downto 0), c0(0));
RCA2 : RCA4 port map('0', a(7 downto 4), b(7 downto 4), t0(7 downto 4), c0(1));
--for carry 1
RCA1 : RCA4 port map('1', a(3 downto 0), b(3 downto 0), t1(3 downto 0), c1(0));
RCA3 : RCA4 port map('1', a(7 downto 4), b(7 downto 4), t1(7 downto 4), c1(1));
--mux for carry
MUX0 : multiplexer2 port map(c0(0),c1(0),ci,co1);
MUX9 : multiplexer2 port map(c0(1),c1(1),co1,co);
--muxes for sum
MUX1 : multiplexer2 port map(t0(0),t1(0),ci,s(0));
MUX2 : multiplexer2 port map(t0(1),t1(1),ci,s(1));
MUX3 : multiplexer2 port map(t0(2),t1(2),ci,s(2));
MUX4 : multiplexer2 port map(t0(3),t1(3),ci,s(3));
MUX5 : multiplexer2 port map(t0(4),t1(4),co1,s(4));
MUX6 : multiplexer2 port map(t0(5),t1(5),co1,s(5));
MUX7 : multiplexer2 port map(t0(6),t1(6),co1,s(6));
MUX8 : multiplexer2 port map(t0(7),t1(7),co1,s(7));
end architecture behav;
通过查看这段代码(没有组件和任何测试平台的代码),我想我发现了一些可能有问题的地方。 当您使用 RCA4 组件创建一个更大的 RCA 并以 0 作为进位时,您编写了 2 个 RCA4,RCA2(在端口映射中)需要将来自 RCA0 的进位作为进位而不是 0。 尝试改变它,我希望我有所帮助。