多路选择器

文章目录

  • 一.多路选择器原理
    • 1.1 二选一多路选择器原理
    • 1.2 二选一多路选择器真值表
    • 1.3 四选一多路选择器原理
  • 二.主要代码及编译
    • 2.1 以四选一多路选择器为例
    • 2.2 代码分析
    • 2.3 编译
    • 2.4 原理图
  • 四.仿真及仿真效果
    • 4.1 仿真代码
    • 4.2 仿真过程
    • 4.3 波形及有关操作

一.多路选择器原理

1.1 二选一多路选择器原理

  • 因为两个输入端,sel位宽取1位(即0/1即可表示选择的是in_a还是in_b)我们可以设sel=0时,out=in_a;sel=1时,out=in_b。
    多路选择器_第1张图片

1.2 二选一多路选择器真值表

in_a in_b sel out
0 0 0 0
0 1 0 0
1 0 0 1
1 1 0 1
0 0 1 0
0 1 1 1
1 0 1 0
1 1 1 1

1.3 四选一多路选择器原理

  • 同二选一多路选择器原理一样,只不过变成了四个输入,那么就需要用两位宽的sel(00,01,10,11)分别表示选择输出out等于a,b,c,d的哪一个

二.主要代码及编译

2.1 以四选一多路选择器为例

module MUX4_1 (
    input       in_a,
    input       in_b,
    input       in_c,
    input       in_d,
    input [1:0] sel,
    
    output      out
);
    reg out_r;

always @(*) begin
    case (sel)
        2'b00:out_r = in_a;
        2'b01:out_r = in_b;
        2'b10:out_r = in_c;
        2'b11:out_r = in_d; 
        default: ;
    endcase
end

assign out = out_r;
endmodule

2.2 代码分析

  1. 四个输入信号,一个输入的选择信号,一个输出信号。选择信号需要两位位宽足够选择四个输入信号。

  2. 使用组合逻辑电路,always语句中需使用reg类型,所以先定义一个reg类型的out_r在always语句中使用,最后再用assign out = out_r实现同步。

  3. 组合逻辑中要用阻塞赋值“ = ”

  4. case语句中default在无其他情况下可以不写,但是“ ; ”是一定要写的,容易在这个地方出现错误。

2.3 编译

在这里插入图片描述

  • Quartus上面的菜单栏中,如图中框1是全编译,如图中框2为分析综合。仅分析综合可以实现语法检错,并且比全编译要更快一些。
    多路选择器_第2张图片

  • 如上图所示即为全编译通过

2.4 原理图

  • Quartus中点击Tools->Netlist Viewers->RTL viewer可以查看原理图
    多路选择器_第3张图片

四.仿真及仿真效果

4.1 仿真代码

  • 此处由于赋值的种类太多了,我只列举了其中几种。
`timescale 1ns/1ns
module tb_MUX4_1 ();
    
//激励信号
reg tb_in_a;
reg tb_in_b;
reg tb_in_c;
reg tb_in_d;
reg [1:0] tb_sel;

//输出信号
wire out;

//模块例化
MUX4_1 u_MUX4_1(
.in_a   (tb_in_a),
.in_b   (tb_in_b),
.in_c   (tb_in_c),
.in_d   (tb_in_d),
.sel    (tb_sel),

.out(out)
);

initial begin
    tb_in_a = 0;
    tb_in_b = 0;
    tb_in_c = 0;
    tb_in_d = 0;
    tb_sel = 2'b01;
    #20;
    tb_in_a = 0;
    tb_in_b = 0;
    tb_in_c = 1;
    tb_in_d = 0;
    tb_sel = 2'b10;
    #20; 
    tb_in_a = 0;
    tb_in_b = 1;
    tb_in_c = 1;
    tb_in_d = 0;
    tb_sel = 2'b00;
    #20;
    tb_in_a = 1;
    tb_in_b = 0;
    tb_in_c = 1;
    tb_in_d = 0;
    tb_sel = 2'b00;
    #20;
end
endmodule

4.2 仿真过程

  • 将仿真文件添加进建立的工程中
    多路选择器_第4张图片

多路选择器_第5张图片

  • setting中添加仿真文件
    多路选择器_第6张图片

多路选择器_第7张图片

  • 点击菜单栏中Tools->Run Simulation Tools->RTL Simulation
    多路选择器_第8张图片

4.3 波形及有关操作

  • 打开波形后点击左上方的图标即可显示波形
    多路选择器_第9张图片

  • 观测例化模块波形按下图操作
    多路选择器_第10张图片

  • 回到wave界面对波形crtl+A,再ctrl+G可以对信号进行分类。再点击Restart和Run all,即可得到最终的信号波形
    多路选择器_第11张图片

你可能感兴趣的:(FPGA学习,fpga)