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;
运行与验证
- 编译:在ModelSim/QuestaSim中执行
vlib work && vcom half_adder.vhd half_adder_tb.vhd;若使用GHDL,执行ghdl -a half_adder.vhd half_adder_tb.vhd。 - 仿真:ModelSim执行
vsim half_adder_tb后运行run 40 ns;GHDL执行ghdl -r half_adder_tb --vcd=out.vcd后用GTKWave查看波形。 - 通过条件:观察波形,四种输入组合下输出必须满足:
0+0→sum=0, carry=0;0+1→sum=1, carry=0;1+0→sum=1, carry=0;1+1→sum=0, carry=1。若全部匹配,则设计正确。
预期输出真值表
| a | b | sum | carry |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
以上真值表由代码逻辑直接推出,仿真时若波形与此一致即验证通过。