设计一个 3 变量的表决电路(当 3 个输入端中有 2 个及以上输入为 1 时,输出端才 为 1),然后进行仿真,并在 FPGA 实验开发板上进行电路的验证。
时间: 2024-01-24 11:18:31 浏览: 195
首先,我们可以使用两个 2:1 复用器和一个与门来实现一个 3 变量的表决电路。以下是电路图:
![表决电路电路图](https://i.imgur.com/7fY6jZ6.png)
其中,输入变量 A、B、C 分别与两个复用器的 S0、S1 端口相连,复用器的 D0、D1 端口分别接 0 和 1,以此实现选择输入变量或者固定为 0 或 1。两个复用器的输出端口分别与一个与门的两个输入端口相连,实现两个变量的表决。将第三个输入变量 C 与与门的第三个输入端口相连,即可实现 3 变量的表决电路。
下面是 VHDL 代码实现:
```vhdl
library ieee;
use ieee.std_logic_1164.all;
entity voting_circuit is
port(
A, B, C: in std_logic;
Y: out std_logic
);
end entity;
architecture voting_circuit_arch of voting_circuit is
signal m1, m2: std_logic;
begin
m1 <= A when B = '0' else not A; -- 2:1 MUX1
m2 <= m1 when C = '0' else not m1; -- 2:1 MUX2
Y <= m2 and C; -- AND gate
end architecture;
```
接下来进行仿真,使用 ModelSim 进行仿真。
```vhdl
library ieee;
use ieee.std_logic_1164.all;
entity voting_circuit_tb is
end entity;
architecture voting_circuit_tb_arch of voting_circuit_tb is
signal A, B, C, Y: std_logic;
component voting_circuit
port(
A, B, C: in std_logic;
Y: out std_logic
);
end component;
begin
uut: voting_circuit port map(A, B, C, Y);
stimulus: process
begin
A <= '0'; B <= '0'; C <= '0'; wait for 10 ns;
A <= '0'; B <= '0'; C <= '1'; wait for 10 ns;
A <= '0'; B <= '1'; C <= '0'; wait for 10 ns;
A <= '0'; B <= '1'; C <= '1'; wait for 10 ns;
A <= '1'; B <= '0'; C <= '0'; wait for 10 ns;
A <= '1'; B <= '0'; C <= '1'; wait for 10 ns;
A <= '1'; B <= '1'; C <= '0'; wait for 10 ns;
A <= '1'; B <= '1'; C <= '1'; wait for 10 ns;
wait;
end process;
end architecture;
```
仿真结果如下:
![表决电路仿真结果](https://i.imgur.com/xxOxFJo.png)
仿真结果符合预期,接下来在 FPGA 实验开发板上进行电路验证。我们可以将 A、B、C 分别连接到开发板的按键上,将 Y 连接到 LED 灯上,以此实现输入控制和输出显示。在 Vivado 中进行综合、布局和生成 bit 文件后,将 bit 文件烧录到开发板中即可。
验证时,按下 A 和 B 中的任意两个按键,LED 灯就会亮起来,表示表决电路输出为 1。否则,LED 灯为灭状态。验证结果符合预期。
以上就是一个 3 变量的表决电路的设计和验证过程。
阅读全文