FPGA入门:二选一多路选择器

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

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

相关推荐
简简单单做算法11 小时前
基于FPGA的图像退化算法verilog实现,分别实现横向和纵向运动模糊,包括tb和MATLAB辅助验证
fpga开发·verilog·图像退化
通信小小昕17 小时前
FPGA|Verilog-自己写的SPI驱动
fpga开发
太爱学习了1 天前
AXI接口总结
fpga开发
博览鸿蒙1 天前
FPGA前端设计适合哪些人学?该怎么学?
fpga开发
北京阿尔泰科技厂家2 天前
2路模拟量同步输出卡、任意波形发生器卡—PCIe9100数据采集卡
fpga开发·工业自动化·数据采集卡·任意波形发生器·模拟量输出卡
szxinmai主板定制专家2 天前
基于ARM+FPGA的高端伺服驱动与运动控制解决方案
大数据·arm开发·人工智能·fpga开发·架构
通信小小昕2 天前
FPGA|Verilog-SPI驱动
fpga开发·蓝桥杯·优化·verilog·spi·竞赛
TJ_Dream2 天前
clk_prepare函数详细解析
驱动开发·fpga开发
起床学FPGA2 天前
IBUF和BUFG
fpga开发
_Hello_Panda_3 天前
基于AMD AU15P FPGA的SLVS-EC桥PCIe设计方案分享
fpga开发