如何在VHDL中向17位中添加两个16位STD_逻辑_向量和一个进位?

如何在VHDL中向17位中添加两个16位STD_逻辑_向量和一个进位?,vhdl,Vhdl,我有两个输入16位逻辑_向量A、B和A: A,B : in STD_LOGIC_VECTOR(15 DOWNTO 0); Cin : in STD_LOGIC; F : out STD_LOGIC_VECTOR(15 downto 0); Cout : out STD_LOGIC 和17位逻辑_矢量结果信号: signal result : STD_LOGIC_VECTOR(16 DOWNTO 0); 和以下代码添加A和B以及Cin: result <= ('0' & A)

我有两个输入16位逻辑_向量A、B和A:

A,B : in STD_LOGIC_VECTOR(15 DOWNTO 0);
Cin : in STD_LOGIC;
F : out STD_LOGIC_VECTOR(15 downto 0);
Cout : out STD_LOGIC 
和17位逻辑_矢量结果信号:

signal result : STD_LOGIC_VECTOR(16 DOWNTO 0);
和以下代码添加A和B以及Cin:

result <= ('0' & A) + ('0' & B) + Cin;
F <= result(15 DOWNTO 0);
Cout <= result(16);

验证您的连接,您的代码可以按编写的方式工作。我尝试了以下方法:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity adder is
    port (
        A, B : in  std_logic_vector(15 downto 0);
        Cin  : in  std_logic;
        F    : out std_logic_vector(15 downto 0);
        Cout : out std_logic
    );
end entity adder;

architecture rtl of adder is
    signal result : std_logic_vector(16 downto 0);
begin
    result <= ('0' & A) + ('0' & B) + Cin;
    F      <= result(15 downto 0);
    Cout   <= result(16);
end architecture rtl;

library ieee;
use ieee.std_logic_1164.all;

entity adder_tb is
end entity adder_tb;

architecture behavioral of adder_tb is
    signal A, B, F : std_logic_vector(15 downto 0);
    signal Cin, Cout : std_logic;
begin

    DUT: entity work.adder
    port map (
        A    => A,
        B    => B,
        Cin  => Cin,
        F    => F,
        Cout => Cout
    );

    A   <= "1010100101110011";
    B   <= "0001111101010101";
    Cin <= '1';

end architecture behavioral;
ieee库;
使用ieee.std_logic_1164.all;
使用ieee.std_logic_unsigned.all;
实体加法器是
港口(
A、 B:标准逻辑向量(15到0);
Cin:标准逻辑;
F:输出标准逻辑向量(15到0);
Cout:out标准逻辑
);
终端实体加法器;
介绍了加法器的rtl结构
信号结果:标准逻辑向量(16至0);
开始
结果,,
F=>F,
Cout=>Cout
);

A它应该按原样工作。是什么让你认为Cin被忽略了?你们有试验台吗?请提供一个最小的、完整的和可验证的例子:事实上,我不认为你所发布的内容有任何问题。请查看您的
Cin
作业,了解您的问题。@JonathanDrolet编辑!测试台中A、B、Cin的输入数据添加谢谢。我发现了我的问题,这就是把代码放在过程中。
1100100011001000
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity adder is
    port (
        A, B : in  std_logic_vector(15 downto 0);
        Cin  : in  std_logic;
        F    : out std_logic_vector(15 downto 0);
        Cout : out std_logic
    );
end entity adder;

architecture rtl of adder is
    signal result : std_logic_vector(16 downto 0);
begin
    result <= ('0' & A) + ('0' & B) + Cin;
    F      <= result(15 downto 0);
    Cout   <= result(16);
end architecture rtl;

library ieee;
use ieee.std_logic_1164.all;

entity adder_tb is
end entity adder_tb;

architecture behavioral of adder_tb is
    signal A, B, F : std_logic_vector(15 downto 0);
    signal Cin, Cout : std_logic;
begin

    DUT: entity work.adder
    port map (
        A    => A,
        B    => B,
        Cin  => Cin,
        F    => F,
        Cout => Cout
    );

    A   <= "1010100101110011";
    B   <= "0001111101010101";
    Cin <= '1';

end architecture behavioral;