数据选择器是从多个输入的逻辑信号中选择一个逻辑信号输出的逻辑电路。例如,手中有两张电影票 A 和 B,检票员决定哪张有效,这相当于输入信号 in1 与 in2,检票员相当于选择信号 sel(select),电影院相当于输出信号 out。因此,可以在原理图中设计出 2-1 数据选择器。

同样,给出 2-1 数据选择器的真值表:

分析真值表:当选择信号 sel 为 0 时,对应输入信号 in1 的通道开启,无论输入信号 in2 怎么取值,输出信号 out 永远与输入信号 in1 相同。反之,选择信号 sel 为 1 时,对应输入信号 in2 的通道开启,无论输入信号 in1 怎么取值,输出信号 out 永远与输入信号 in2 相同。
新建工程后,使用 Verilog 语言实现 2-1 数据选择器:
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
分析代码语法:in1、in2、sel 信号前加'wire',out 前加'reg'。reg 是寄存器类型,wire 是连线类型。wire 相当于导线,只能传递信号,不能记住信号;reg 相当于寄存器,能够记住输入信号。在 always@(*) 模块中,输出信号 out 需要持续循环逻辑进程,所以输出信号使用 reg 类型。
打开 RTL 视图验证电路的正确性:

可以看出,RTL 视图和原理图设计完全一样。接着进行仿真,直接放波形图进行分析。
取第一组红线内的波形图:

在这组波形图中,sel 信号恒为 0,无论 in2 信号怎么变,输出信号 out 波形图恒等于输入信号 in1。
再取第二组分析:

此时 sel 信号恒为 1,无论 in1 信号怎么变,输出信号 out 波形图恒等于输入信号 in2。
通过这两组例子,可以分析波形并验证 RTL 视图的正确性。在进行仿真前,打开'Assignment--Settings'时,尤其是'Tool name'选项卡中,要注意选择'Modelsim'而不是'Modelsim-Altera',否则会出现报错。








