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
endmoduleModelSim仿真波形

分析波形可以看出,模块的执行结果与真值表一致。