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;

仿真与验证

运行步骤:

  1. 在ModelSim/QuestaSim中新建工程,将上述两个.vhd文件加入编译列表;
  2. 编译全部文件(vcom composite_gates.vhd composite_gates_tb.vhd);
  3. 启动仿真(vsim composite_gates_tb);
  4. 添加全部信号到波形窗口,运行仿真(run 40 ns)。

预期输出真值表:

abnand_outnor_outxor_outxnor_out
001101
011010
101010
110001

判定标准:仿真波形中四个输出信号在每个输入组合下的电平与上表完全一致,即验证通过。重点检查与非门仅在a=b=1时输出0,或非门仅在a=b=0时输出1,异或门在输入相异时输出1,同或门在输入相同时输出1。

常见问题

  • 若编译报错找不到std_logic类型,确认已添加use ieee.std_logic_1164.all;语句;
  • 若仿真无输出变化,检查测试平台中是否遗漏wait语句导致进程提前结束。