当前位置: 首页 > article >正文

简单组合逻辑

多路选择器

  在多路数据传输过程中,能够将任意一路选出来的电路叫做数据选择器,也称多路选择器。对于一个具有2^n个输入和一个输出的多路选择器,有n个选择变量,多路选择器也是FPGA内部的一个基本资源,主要用于内部信号的选通。简单的多路选择器还可以通过级联生成更大的多路选择器。

译码器

  译码是编码的逆过程,在编码时,每一种二级制都有特定的含义,都表示一个确定的信号。把代码状态的含义翻译出来的过程叫做译码,实现该功能的电路叫做译码器。或者说,译码器是可以将输入二进制代码的状态翻译成输出信号,以表示原来含义的电路。

  译码器是一类      多输入多输出   的组合逻辑电路器件,可以分为变量译码和显示译码。

多路选择器 if else
module  mux_2_1
(
    input    wire    in1    ,
    input    wire    in2    ,
    input    wire    sel    ,
        
    output    reg    out
);

    always@(*)
    begin
        if(sel == 1'b1)
        begin
            out = in1    ;
        end
        else
        begin
            out = in2    ;
        end
    end



endmodule

 多路选择器 case
module mux2_1
(
    input    wire    in1    ,
    input    wire    in2    ,
    input    wire    sel    ,

    output    reg    out    
);

    always@(*)
    begin
        case(sel)
            1'b1:    out    =    in1    ;
            1'b0:    out    =    in2    ;
            default:    out    =    in1    ;
        endcase
    end
    


endmodule

多路选择器    ?:;

        

module mux2_1
(
    input    wire    in1    ,
    input    wire    in2    ,
    input    wire    sel    ,

    output   wire    out
);



    assign    out    =    (sel == 1'b1)?in1:in2;


endmodule

译码器 if else 

module decode_3_8
(
    input    wire    in1    ,
    input    wire    in2    ,
    input    wire    in3    ,

    output   reg [7:0]    out    

);


    always@(*)
    begin
        if(  {in1,in2,in3}  == 3'b000 )
        begin
            out    =    8'b0000_0001    ;
        end
        else if(  {in1,in2,in3}  == 3'b001  )
        begin
            out    =    8'b0000_0010    ;
        end
        else if(   {in1,in2,in3} == 3'b010   )
        begin
            out    =    8'b0000_0100    ;
        end
        else if(   {in1,in2,in3} == 3'b011   )
        begin
            out    =    8'b0000_1000    ;
        end
        else if(   {in1,in2,in3} == 3'b100     )
        begin
            out    =    8'b0001_0000    ;
        end
        else if(   {in1,in2,in3}  == 3'b101    )
        begin
            out    =    8'b0010_0000    ;
        end
        else if(  {in1,in2,in3} == 3'b110  )
        begin
            out    =    8'b0100_0000    ;
        end
        else if(  {in1,in2,in3} == 3'b111  )
        begin
            out    =    8'b1000_0000    ;
        end
        else
        begin
            out    =    8'b0000_0001    ;
        end
    end



endmodule

译码器 case

module decode3_8
(
    input    wire    in1    ,
    input    wire    in2    ,
    input    wire    in3    ,

    output   reg [7:0]    out
);

always@(*)
begin    
    case({in1,in2,in3})
        3'b000    :    out    =    8'b0000_0001    ;
        3'b001    :    out    =    8'b0000_0010    ;
        3'b010    :    out    =    8'b0000_0100    ;
        3'b011    :    out    =    8'b0000_1000    ;
        3'b100    :    out    =    8'b0001_0000    ;
        3'b101    :    out    =    8'b0010_0000    ;
        3'b110    :    out    =    8'b0100_0000    ;
        3'b111    :    out    =    8'b1000_0000    ;
        default   :    out    =    8'b0000_0001    ;
    endcase
end


endmodule

仿真验证

仿真文件编写

`timescale 1ns/1ns

module tb_decode3_8();

    reg    in1    ;
    reg    in2    ;
    reg    in3    ;

    wire  [7:0] out    ;

    initial
    begin
        in1 <= 1'b0    ;
        in2 <= 1'b0    ;
        in3 <= 1'b0    ;
    end

    always #10    in1 <= {$random}%2    ;
    always #10    in2 <= {$random}%2    ;
    always #10    in3 <= {$random}%2    ;

    initial
    begin
        $timeformat(-9.0,"ns",6)    ;
        $monitor("@time %t , in1 = %b ,in2 = %b ,in3 = %b , out = %b ",$time,in1,in2,in3,out)    ;
    end


    decoder3_8    decoder3_8_inst
(
    .in1    (in1)    ,
    .in2    (in2)    ,
    .in3    (in3)    ,
    
    .out    (out)
);


endmodule


http://www.kler.cn/a/502950.html

相关文章:

  • 【9.1】Golang后端开发系列--Gin快速入门指南
  • GitLab本地服务器配置ssh和克隆项目
  • 第423场周赛:检测相邻递增子数组 Ⅰ、检测相邻递增子数组 Ⅱ、好子序列的元素之和、统计小于 N 的 K 可约简整数
  • 行业案例:高德服务单元化方案和架构实践
  • 源码编译安装httpd 2.4,提供系统服务管理脚本并测试(两种方法实现)
  • 无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型
  • 【机器学习】神经网络(BP算法)含具体计算过程
  • <C++学习>C++ std 多线程教程
  • git仓库中提交上去了.idea文件夹内容怎么办?
  • E12.【C语言】练习:求两个数的最大公约数
  • 新时期下k8s 网络插件calico 安装
  • 服务器登陆后有java变量
  • unity打包sdk热更新笔记
  • 氧化铌在光学领域的独特贡献与应用拓展-京煌科技
  • Android Room 报错:too many SQL variables (code 1 SQLITE_ERROR) 原因及解决方法
  • 【Qt】QWidget核心属性2(windowOpacity、cursor、font、toolTip、focusPolicy、styleSheet)
  • Vue2:el-table 最后一列的操作按钮不换行,按钮过多时展示【更多】
  • 掌握 React 关键:理解 super () 和 super (props) 的不同应用
  • (PVG)Periodic Vibration Gaussian:自动驾驶过程中的三维重建 论文解读
  • 3.Qt Quick-QML地图引擎之v4.3版本(新增动态轨迹线/海图/天地图街道/天地图卫星)
  • java fastjson2 解析JSON用法解析
  • [3D] 3D雷达天眼监控系统:打造智能城市的安全防线
  • 多模态论文笔记——BLIP2
  • 大语言模型的稀疏性:提升效率与性能的新方向
  • 《AI赋能鸿蒙Next,开启智能关卡设计新时代》
  • occ的开发框架