gpt4 book ai didi

vhdl - 全 8 位加法器,不合逻辑的输出

转载 作者:行者123 更新时间:2023-12-04 04:35:57 25 4
gpt4 key购买 nike

我创建了一个带有全加器的 8 位加法器。
如您所见,我开始从右到左添加相应的位,对于 cin 信号 t1 和 t2,并按顺序输出 t2 和 t1。第一个 cin 设置为加法器输入 cin。
我在我的实现中没有看到任何问题,但是当我运行它时,我得到 o 输出信号的红线。有人能告诉我出了什么问题吗?(我已经测试了全加器并返回了正确的结果。)

谢谢。

这是代码:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity adder8bit is
Port ( a : in STD_LOGIC_VECTOR (7 downto 0);
b : in STD_LOGIC_VECTOR (7 downto 0);
cin : in STD_LOGIC;
o : out STD_LOGIC_VECTOR (7 downto 0);
cout : out STD_LOGIC);
end adder8bit;

architecture Behavioral of adder8bit is

component fulladder is
Port ( a : in STD_LOGIC;
b : in STD_LOGIC;
cin : in STD_LOGIC;
o : out STD_LOGIC;
cout : out STD_LOGIC);
end component;

signal t1,t2:std_logic:='0';

begin

C1: fulladder port map( a => a(0), b => b(0), cin => cin, o => o(0), cout => t1 );
C2: fulladder port map( a => a(1), b => b(1), cin => t1, o => o(1), cout => t2 );
C3: fulladder port map( a => a(2), b => b(2), cin => t2, o => o(2), cout => t1 );
C4: fulladder port map( a => a(3), b => b(3), cin => t1, o => o(3), cout => t2 );
C5: fulladder port map( a => a(4), b => b(4), cin => t2, o => o(4), cout => t1 );
C6: fulladder port map( a => a(5), b => b(5), cin => t1, o => o(5), cout => t2 );
C7: fulladder port map( a => a(6), b => b(6), cin => t2, o => o(6), cout => t1 );
C8: fulladder port map( a => a(7), b => b(7), cin => t1, o => o(7), cout => cout );

end Behavioral;

最佳答案

在我看来,您假设您的实例 C1 ... C8顺序执行,因此您交替使用两个信号 t1t2好像这是一个可以重用变量的程序。

但是,您正在此处创建一个带有连接的结构和 t1对于您使用它的所有 8 个实例,将是相同的信号。因此您有 4 个驱动程序 C1, C3, C5C7t1 (对于 t2 也是如此)并且此代码很可能无法合成。

您可以做的是在设置中使用 8 个进位信号,如下所示:

signal c: std_logic_vector(7 downto 1) := (others => '0');
-- ...
C1: fulladder port map( a => a(0), b => b(0), cin => cin, o => o(0), cout => c(1) );
C2: fulladder port map( a => a(1), b => b(1), cin => c(1), o => o(1), cout => c(2) );
C3: fulladder port map( a => a(2), b => b(2), cin => c(2), o => o(2), cout => c(3) );
-- ...
C8: fulladder port map( a => a(7), b => b(7), cin => c(7), o => o(7), cout => cout );

此外,您可以查看 foor-generate-loops减少代码中的重复量。如果您扩展进位向量以包含 cincout ,所有 8 行看起来都一样(除了增加的索引)。
signal c: std_logic_vector(8 downto 0) := (others => '0');
-- ...
c(0) <= cin;
cout <= c(8);
-- ...
-- your for-generate loop here...

关于vhdl - 全 8 位加法器,不合逻辑的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19755497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com