3. 全加器设计

全加器设计 学习卡片

任务目标

设计一个1位全加器(Full Adder),输入包括两个加数位A、B以及来自低位的进位Cin,输出为本位和S以及向高位的进位Cout。该单元是构成多位加法器的基本模块,通过级联可扩展为任意位宽的加法器。

实现方案

采用数据流(Dataflow)风格,使用逻辑方程直接描述全加器的行为。核心方程为:

  • S = A XOR B XOR Cin
  • Cout = (A AND B) OR (Cin AND (A XOR B))

代码中同时给出实体(Entity)与结构体(Architecture),可直接综合到FPGA或用于仿真。

完整VHDL代码

-- 1位全加器
library ieee;
use ieee.std_logic_1164.all;

entity full_adder is
    port (
        A    : in  std_logic;  -- 加数位
        B    : in  std_logic;  -- 加数位
        Cin  : in  std_logic;  -- 低位进位输入
        S    : out std_logic;  -- 本位和
        Cout : out std_logic   -- 向高位进位输出
    );
end entity;

architecture dataflow of full_adder is
begin
    S    <= A xor B xor Cin;
    Cout <= (A and B) or (Cin and (A xor B));
end architecture;

仿真测试平台(Testbench)

以下测试平台遍历全部8种输入组合,验证真值表。使用assert语句自动检查输出,若所有断言通过,仿真结束时报告“仿真成功”。

library ieee;
use ieee.std_logic_1164.all;

entity full_adder_tb is
end entity;

architecture sim of full_adder_tb is
    signal A, B, Cin, S, Cout : std_logic;
begin
    -- 实例化被测设计
    uut: entity work.full_adder
        port map (A => A, B => B, Cin => Cin, S => S, Cout => Cout);

    -- 激励与验证
    process begin
        -- 遍历所有输入组合
        for i in 0 to 7 loop
            (A, B, Cin) <= to_unsigned(i, 3);
            wait for 10 ns;
            -- 计算期望值
            assert (S = (A xor B xor Cin))
                report "S错误" severity error;
            assert (Cout = ((A and B) or (Cin and (A xor B))))
                report "Cout错误" severity error;
        end loop;
        report "仿真成功" severity note;
        wait;
    end process;
end architecture;

运行与验证

环境要求:ModelSim、GHDL或任何支持VHDL-93的仿真器。

仿真步骤(以GHDL为例):

ghdl -a full_adder.vhd
ghdl -a full_adder_tb.vhd
ghdl -e full_adder_tb
ghdl -r full_adder_tb --stop-time=100ns

通过条件:仿真控制台输出“仿真成功”,且无任何“错误”级别的报告。若使用波形查看,可观察到S与Cout在所有8种输入组合下均与真值表一致。

真值表参考

ABCinSCout
00000
00110
01010
01101
10010
10101
11001
11111

级联为多位加法器

将多个全加器的Cout连接到下一级的Cin即可构成行波进位加法器。例如4位加法器需要4个全加器实例,最低位的Cin接地('0'),最高位的Cout作为溢出标志。

FA A B Cin S Cout FA A B 进位传递 S Cout 位0 位1 行波进位级联结构

说明:上图展示了两个全加器级联构成2位加法器的连接方式,橙色虚线表示进位信号从低位Cout传递到高位的Cin。实际多位加法器按此模式继续扩展即可。