2. 半加器设计

任务目标

使用VHDL描述一位半加器逻辑:输入为两个一位二进制数 a 和 b,输出为和 sum(异或逻辑)与进位 carry(与逻辑)。通过仿真验证真值表全部四种输入组合。

实现方案

采用数据流建模方式,用两条并发赋值语句直接描述半加器的布尔方程,无需时钟信号。代码可在任何支持VHDL-93标准的工具中综合与仿真。

完整VHDL代码

-- half_adder.vhd
library ieee;
use ieee.std_logic_1164.all;

entity half_adder is
    port (
        a     : in  std_logic;
        b     : in  std_logic;
        sum   : out std_logic;
        carry : out std_logic
    );
end entity;

architecture dataflow of half_adder is
begin
    sum   <= a xor b;
    carry <= a and b;
end architecture;

仿真测试平台

-- half_adder_tb.vhd
library ieee;
use ieee.std_logic_1164.all;

entity half_adder_tb is
end entity;

architecture sim of half_adder_tb is
    signal a, b, sum, carry : std_logic;
begin
    dut : entity work.half_adder
        port map (a => a, b => b, sum => sum, carry => carry);

    stimulus : process
    begin
        a <= '0'; b <= '0'; wait for 10 ns;
        a <= '0'; b <= '1'; wait for 10 ns;
        a <= '1'; b <= '0'; wait for 10 ns;
        a <= '1'; b <= '1'; wait for 10 ns;
        wait;
    end process;
end architecture;

运行与验证

  1. 编译:在ModelSim/QuestaSim中执行 vlib work && vcom half_adder.vhd half_adder_tb.vhd;若使用GHDL,执行 ghdl -a half_adder.vhd half_adder_tb.vhd。
  2. 仿真:ModelSim执行 vsim half_adder_tb 后运行 run 40 ns;GHDL执行 ghdl -r half_adder_tb --vcd=out.vcd 后用GTKWave查看波形。
  3. 通过条件:观察波形,四种输入组合下输出必须满足:0+0→sum=0, carry=0;0+1→sum=1, carry=0;1+0→sum=1, carry=0;1+1→sum=0, carry=1。若全部匹配,则设计正确。

预期输出真值表

absumcarry
0000
0110
1010
1101

以上真值表由代码逻辑直接推出,仿真时若波形与此一致即验证通过。