2. 复合门电路设计
任务目标
使用VHDL实现与非门(NAND)、或非门(NOR)、异或门(XOR)、同或门(XNOR)四种复合门电路,并通过仿真验证其真值表。
实现方案
采用数据流建模方式,用标准逻辑运算符直接描述四种门的逻辑关系。输入为两个标准逻辑位a、b,输出为四个独立信号。该设计不依赖时钟,为纯组合逻辑电路。
完整代码
-- 文件: composite_gates.vhd
library ieee;
use ieee.std_logic_1164.all;
entity composite_gates is
port (
a, b : in std_logic;
nand_out : out std_logic; -- 与非门输出
nor_out : out std_logic; -- 或非门输出
xor_out : out std_logic; -- 异或门输出
xnor_out : out std_logic -- 同或门输出
);
end entity;
architecture dataflow of composite_gates is
begin
nand_out <= a nand b;
nor_out <= a nor b;
xor_out <= a xor b;
xnor_out <= a xnor b;
end architecture;
测试平台
-- 文件: composite_gates_tb.vhd
library ieee;
use ieee.std_logic_1164.all;
entity composite_gates_tb is
end entity;
architecture sim of composite_gates_tb is
signal a, b : std_logic;
signal nand_out, nor_out, xor_out, xnor_out : std_logic;
begin
dut: entity work.composite_gates
port map (a=>a, b=>b, nand_out=>nand_out, nor_out=>nor_out,
xor_out=>xor_out, xnor_out=>xnor_out);
stim: process
begin
-- 遍历全部4种输入组合
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中新建工程,将上述两个.vhd文件加入编译列表;
- 编译全部文件(
vcom composite_gates.vhd composite_gates_tb.vhd); - 启动仿真(
vsim composite_gates_tb); - 添加全部信号到波形窗口,运行仿真(
run 40 ns)。
预期输出真值表:
| a | b | nand_out | nor_out | xor_out | xnor_out |
|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 0 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 | 0 | 1 |
判定标准:仿真波形中四个输出信号在每个输入组合下的电平与上表完全一致,即验证通过。重点检查与非门仅在a=b=1时输出0,或非门仅在a=b=0时输出1,异或门在输入相异时输出1,同或门在输入相同时输出1。
常见问题
- 若编译报错找不到std_logic类型,确认已添加
use ieee.std_logic_1164.all;语句; - 若仿真无输出变化,检查测试平台中是否遗漏
wait语句导致进程提前结束。