1、选择器介绍
多路选择器(MUX)是一种重要的数字电路元件,用于选择多个输入信号中的一个,并将其传递到单个输出。多路选择器也是 FPGA 内部的一个基本资源,主要用于内部信号的选通。
2、实战任务
这里我们选择一个简单的 2 选 1 的选择器,主要功能是通过选通控制信号 sel 确定输入信号 A 和 B 哪一个信号作为输出。当选通控制信号 sel 为 0 时,输出为 A 端信号;当选通控制信号 sel 为 1 时,信号输出为 B 端信号。
3、系统框图
根据实战任务描述是一个二选一的多路选择器,因此给模块命名为 2_sel_1。模块中的输入为三个一位的信号,其中 A 和 B 为两个输入信号,sel 为一位(因为两个输入端,sel 位宽取一位(即0/1即可表示选择的是 A 还是 B ))输入的控制信号,X 为输出信号。模块图如下图所示:
4、真值表
根据实战任务所述,二选一的多路选择器的真值表,如下表所示:
输入 A | 输入 B | 选择 sel | 输出 X |
0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 |
1 | 0 | 0 | 1 |
1 | 1 | 0 | 1 |
0 | 0 | 1 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 1 | 1 |
5、波形图
通过对真值表进行分析,我们可以绘制多路选择器的输入与输出波形。其波形如下图所示:
6、程序编写
首先我们来编写二选一多路选择器的逻辑代码,其中实现二选一多路选择器功能的 Verilog 代码形式有很多种,这里选择 assign 中条件运算符(三目运算符)实现方法(注:由于语法规则我们将 2_sel_1 改为 sel_2_1 ,避免编译器报错):
module sel_2_1(
input A, // 输入信号 A
input B, // 输入信号 B
input sel, // 选择控制信号 sel
output X // 输出信号 X
);
// 三目运算符实现多路选择器
assign X = (sel == 1'b0) ? A : B;
//(sel == 1'b0)这是一个布尔表达式。如果这个表达式的结果为真,则返回 A;如果为假,则返回 B
//当条件为真时,返回 A 的值。
//当条件为假时,返回 B 的值。
//X 为存储最终结果的变量。
//即 assign out = (sel == 1'b0) ? A : B; 表示如果 sel == 1'b0 为真,则 out 输出 A;如果 sel != 1'b0 为假,则 out 输出 B。
endmodule