在开始之前,建议回顾 LED 工程建立流程。本文主要介绍数据选择器工程的实现方法。
数据选择器原理
所谓数据选择器,是从多个输入的逻辑信号中选择一个逻辑信号输出。举例说明:手中有两张电影票 A 和 B,检票员决定哪张有效。这里的电影票 A 与 B 相当于输入信号 in1 与 in2,检票员相当于选择信号 sel(select),电影院相当于输出信号 out。
真值表分析
当选择信号 sel 为 0 时,对应输入信号 in1 的通道开启,输出信号 out 与 in1 相同。 当选择信号 sel 为 1 时,对应输入信号 in2 的通道开启,输出信号 out 与 in2 相同。
Verilog 实现
新建工程后,使用 Verilog 语言实现 2-1 数据选择器:
module mux_2to1 (
input wire in1,
input wire in2,
input wire sel,
output reg out
);
always @(*) begin
if (sel == 1'b0)
out = in1;
else
out = in2;
end
endmodule
语法说明
in1、in2、sel 信号前加'wire',out 前加'reg'。
- wire:连线型,只能传递信号,不能存储,适用于输入信号。
- reg:寄存器类型,能够记住信号,适用于 always 模块中的输出信号。
验证与仿真
打开 RTL 视图验证电路正确性,随后进行仿真。取不同波形组分析:
- 第一组:sel 恒为 0,无论 in2 如何变化,out 恒等于 in1。
- 第二组:sel 恒为 1,无论 in1 如何变化,out 恒等于 in2。
注意:在进行仿真前,需在设置中选择'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 亮。

