FPGA 入门:基于 Verilog 的 2 选 1 多路选择器设计
数据选择器简介
数据选择器(Multiplexer)是从多个输入的逻辑信号中选择一个逻辑信号输出,实现数据选择功能的逻辑电路。以两张电影票 A 和 B 为例,检票员相当于选择信号(sel),决定哪张票有效。在 FPGA 设计中,输入信号对应 in1 与 in2,选择信号为 sel,输出信号为 out。
逻辑设计与真值表
2-1 数据选择器的逻辑关系如下:
- 当选择信号 sel 为 0 时,通道 in1 开启,输出 out 等于 in1。
- 当选择信号 sel 为 1 时,通道 in2 开启,输出 out 等于 in2。
真值表
| sel | in1 | in2 | out |
|---|---|---|---|
| 0 | X | X | in1 |
| 1 | X | X | in2 |
Verilog 代码实现
使用 Verilog 语言描述该逻辑功能:
module mux_2to1 (
input wire in1,
input wire in2,
input wire sel,
output reg out
);
always @(*) begin
if (sel == 1'b1)
out = in2;
else
out = in1;
end
endmodule
数据类型说明
wire:连线型类型,用于传递信号,如输入端口。reg:寄存器类型,用于存储信号,如always块中的输出端口。
仿真验证
通过 RTL 视图验证电路逻辑与设计一致。仿真波形分析如下:
- 第一组:sel 恒为 0,无论 in2 如何变化,out 始终等于 in1。
- 第二组:sel 恒为 1,无论 in1 如何变化,out 始终等于 in2。
注意事项
在进行仿真前,需在设置中选择正确的工具名称(Tool name)。务必选择 "Modelsim" 而非 "Modelsim-Altera",否则可能报错无法启动软件。
引脚分配与硬件测试
结合 EP4C 最小系统板原理图进行引脚分配:
- 输入信号:KEY1 按键 -> in1 (pin90),KEY2 按键 -> in2 (pin89)。
- 选择信号:RESET 按键 -> sel (pin88)。
- 输出信号:LED1 -> out (IO_75 / pin75)。
配置完成后,需对未使用管脚进行设置,并在烧录前执行全编译。实际效果如下:
- 不按 RESET 时,sel 为 0,按下 KEY2 则 LED1 亮。
- 长按 RESET 时,sel 为 1,按下 KEY1 则 LED1 亮。

