-1
我正在尝试为3输入简单加法器编写VHDL代码。当我键入下面的代码时,S得到正确的输出值,但S1得到零,因此add_out也会得到错误的值。VHDL:体系结构中定义的信号未取得分配的值
library ieee;
use ieee.std_logic_1164.all;
entity adder is
port(A,B : in std_logic_vector(3 downto 0);
C : in std_logic;
carry_out : out std_logic;
S : out std_logic_vector(3 downto 0);
addOut : out std_logic_vector(4 downto 0));
end adder;
architecture behavioral of adder is
signal S1 : std_logic_vector(3 downto 0);
begin
proc : process(A,B,C) is
variable carry : std_logic;
begin
carry := C;
for i in 0 to 3 loop
S(i) <= A(i) xor B(i) xor carry;
S1(i) <= A(i) xor B(i) xor carry;
carry := (A(i) and B(i)) or (B(i) and carry) or (A(i) and carry);
end loop;
carry_out <= carry;
addOut <= carry & S1;
end process proc;
end behavioral;
为什么信号S1没有达到与S相同的值?
您需要提供更多信息,以便其他人可以尝试重现您的问题。你的for循环存在于一个进程中;敏感性列表将很重要。另外,要回答这个问题,需要通过创建实体,体系结构和测试平台来完成一些工作。为什么不为他们做呢? –
您的代码仍然不是[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)。循环语句是在子程序或进程语句中找到的顺序语句。因为你提到的实体让我们想象一下进程语句,第二个for循环所在的进程语句在其敏感列表中缺少S1。为你的mcve填写所有缺失的部分,并将S1加入敏感列表给出[正确答案](http://i.stack.imgur.com/UgonR.png)。 – user1155120
在测试平台中,我使用了A <=“1111”,B <=“1111”和C <='0' – ayerhs7