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

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

相关推荐
GateWorld2 小时前
FPGA内部模块详解之九 FPGA内部模块的协同作战与设计流程精要
fpga开发·fpga设计流程
嵌入式-老费5 小时前
vivado hls的应用(hls需要verilog基础)
fpga开发
FPGA小迷弟9 小时前
FPGA工程师面试题汇总(九)
网络协议·tcp/ip·fpga开发·面试·verilog·fpga
fei_sun1 天前
逻辑设计概念及Vivado基础
fpga开发
发光的沙子1 天前
FPGA----vitis测试linux程序
fpga开发
初夏正浓1 天前
一文读懂“JESD204B”之链路建立与xilinx IP仿真
fpga开发·xilinx·jesd204b
s09071362 天前
【Zynq 进阶一】深度解析 PetaLinux 存储布局:NAND Flash 分区与 DDR 内存分配全攻略
linux·fpga开发·设备树·zynq·nand flash启动·flash分区
Kong_19942 天前
芯片开发学习笔记·二十——时序报告分析
fpga开发·芯片开发
凌盛羽2 天前
使用python绘图分析电池充电曲线
开发语言·python·stm32·单片机·fpga开发·51单片机
尤老师FPGA2 天前
LVDS系列44:Xilinx Ultrascale系 ADC LVDS接口参考方法(六)
fpga开发