• 1组合逻辑电路多路选择器与多路分解器


    1.2多路选择器

    1.2.1不带优先级的多路选择器

    四路选择器如下

    代码如下

    View Code
     1 module multiplexer
    2 (
    3 input iA,
    4 input iB,
    5 input iC,
    6 input iD,
    7 input [1:0] iSel,
    8 output reg oQ
    9 );
    10
    11 always @(*)
    12 begin
    13 case(iSel)
    14 2'b00 : oQ=iA;
    15 2'b01 : oQ=iB;
    16 2'b10 : oQ=iC;
    17 2'b11 : oQ=iD;
    18 endcase
    19 end
    20
    21 endmodule

    case语句如果没有全部包含所有的情况,则一般要用default语句将信号默认赋值为0,否则会出现锁存器,使得仿真结果不一致。

    RTL级视图如下:

    testbench如下

    View Code
     1 `timescale 1 ns/ 1 ns
    2 module logics_tb();
    3
    4 reg ia;
    5 reg ib;
    6
    7 wire oAnd;
    8 wire oOr;
    9 wire oNot;
    10
    11 initial
    12 begin
    13 ia=0;
    14 #40 ia=1;
    15 #40 ia=0;
    16 #40 ia=1;
    17 #40 ia=0;
    18 end
    19
    20 initial
    21 begin
    22 ib=0;
    23 #40 ib=0;
    24 #40 ib=1;
    25 #40 ib=1;
    26 #40 ib=0;
    27 end
    28
    29 logics logics_inst
    30 (
    31 .iA(ia),
    32 .iB(ib),
    33 .oAnd(oAnd),
    34 .oOr(oOr),
    35 .oNot(oNot)
    36 );
    37
    38 endmodule

    initial语句和always语句左边的信号类型都要为reg。

    RTL级仿真图形如下

    1.2.2 带优先级的多路选择器

    代码如下

    View Code
     1 module multiplexer
    2 (
    3 input iA,
    4 input iB,
    5 input iC,
    6 input iD,
    7 input [1:0] iSel,
    8 output reg oQ
    9 );
    10
    11 always @(*)
    12 if(iSel==2'b00)
    13 oQ=iA;
    14 else if(iSel==2'b01)
    15 oQ=iB;
    16 else if(iSel==2'b10)
    17 oQ=iC;
    18 else
    19 oQ=iD;
    20
    21 endmodule

    RTL级视图如下


    1.2.3多路分解器

    一路输入,三路输出分解器代码如下

    View Code
     1 module de_multiplexer
    2 (
    3 input iA,
    4 input [1:0] iSel,
    5 output reg oA,
    6 output reg oB,
    7 output reg oC
    8 );
    9
    10 always @(*)
    11 begin
    12 oA=0;oB=0;oC=0;
    13 case(iSel)
    14 2'b00 : oA=iA;
    15 2'b01 : oB=iA;
    16 2'b10 : oC=iA;
    17 default :;
    18 endcase
    19 end
    20
    21 endmodule

    RTL级视图如下

    testbench代码如下

    View Code
     1 `timescale 1ns/1ns
    2 module de_multiplexer_tb;
    3 reg ia;
    4 reg [1:0] isel;
    5 wire oa;
    6 wire ob;
    7 wire oc;
    8
    9 initial
    10 begin
    11 ia=0;
    12 forever
    13 #10 ia=~ia;
    14 end
    15
    16 initial
    17 begin
    18 isel=2'b00;
    19 #20 isel=2'b01;
    20 #20 isel=2'b10;
    21 #20 isel=2'b11;
    22 #20 $stop;
    23 end
    24
    25 de_multiplexer de_multiplexer_inst
    26 (
    27 .iA(ia),
    28 .iSel(isel),
    29 .oA(oa),
    30 .oB(ob),
    31 .oC(oc)
    32 );
    33
    34 endmodule

    RTL级仿真波形如下

  • 相关阅读:
    java 版下载地址
    java文档
    中文打包之后无法显示
    通过Unity3d创建二维码(利用zxing2.2)
    通过NavMeshObstacle解决NavMesh防卡
    EditorGUILayout.EnumPopup 枚举弹出选择菜单
    价格表
    热更新脚本C#light,ulua,Scorpio性能比较
    Ngui 五种点击事件实现方式及在3d场景中点透的情况
    linux每日命令(38):iostat命令
  • 原文地址:https://www.cnblogs.com/yuesheng/p/2123909.html
Copyright © 2020-2023  润新知