FPGA入门学习第一例:二选一多路选择器
设计需求
设计一个二选一多路选择器模块,包含三个输入信号(a/b/sl),一个输出信号(out)。
当sl = 1
时,out = a
;当sl = 0
时,out = b
。
示意图如下所示:
真值表如下图所示:
设计代码
verilog
module mux2(
input a, /* 1 bit 输入信号 */
input b, /* 1 bit 输入信号 */
input sl, /* 1 bit 输入信号 */
output out /* 1 bit 输出信号 */
);
/* 输出信号赋值:
* 当 sl == 1 时,out = a
* 当 sl == 0 时,out = b */
assign out = (sl==1) ? a : b;
endmodule
仿真代码
verilog
`timescale 1ns / 1ns /* 时间单位和时间精度都设置为 1ns */
module mux2_tb();
/* 输入/输出定义 */
reg in_a;
reg in_b;
reg in_sel;
wire out;
/* 二选一多路选择器模块实例化,并将仿真信号与模块内部信号连接
* 模块.a <==> in_a
* 模块.b <==> in_b
* 模块.sl <==> in_sel
* 模块.out <==> out */
mux2 mux2_inst(
.a(in_a),
.b(in_b),
.sl(in_sel),
.out(out)
);
/* 产生激励信号 */
initial begin
in_a = 0; in_b = 0; in_sel = 0;
#200; /* 延迟200ns */
in_a = 0; in_b = 0; in_sel = 1;
#200;
in_a = 0; in_b = 1; in_sel = 0;
#200;
in_a = 0; in_b = 1; in_sel = 1;
#200;
in_a = 1; in_b = 0; in_sel = 0;
#200;
in_a = 1; in_b = 0; in_sel = 1;
#200;
in_a = 1; in_b = 1; in_sel = 0;
#200;
in_a = 1; in_b = 1; in_sel = 1;
#200;
$stop; /* 停止仿真 */
end
endmodule
ModelSim仿真波形
分析波形可以看出,模块的执行结果与真值表一致。