FPGA入门学习第一例:二选一多路选择器
设计需求
设计一个二选一多路选择器模块,包含三个输入信号(a/b/sl),一个输出信号(out)。
当sl = 1
时,out = a
;当sl = 0
时,out = b
。
示意图如下所示:
真值表如下图所示:
设计代码
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
仿真代码
`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 beginin_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; /* 停止仿真 */endendmodule
ModelSim仿真波形
分析波形可以看出,模块的执行结果与真值表一致。