首页 > 其他分享 >简单组合逻辑

简单组合逻辑

时间:2025-01-17 20:28:48浏览次数:3  
标签:begin 逻辑 wire 组合 in1 in2 简单 input out

多路选择器

  在多路数据传输过程中,能够将任意一路选出来的电路叫做数据选择器,也称多路选择器。对于一个具有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

标签:begin,逻辑,wire,组合,in1,in2,简单,input,out
From: https://blog.csdn.net/m0_46644085/article/details/145121984

相关文章

  • Python 实现简单的验证码识别
    验证码是一种常见的验证机制,用来区分用户是人还是程序。在本教程中,我们将使用Python编写一个程序,通过图像处理和OCR技术自动识别英文数字组合的验证码。以下将逐步介绍如何实现这一功能。环境准备安装Python和必要库首先,确保已安装Python。如果未安装,可以前往Python......
  • Vue3中使用组合式API通过路由传值详解
    在Vue3中,使用组合式API来传递路由参数是一种常见的需求。VueRouter是Vue.js的官方路由管理工具,可以在不同的场景下通过多种方式传递和接收路由参数。下面将详细讲解几种常见的路由传值方式,并提供相应的代码示例。1.通过路由参数传值(动态路由参数)路由参数是一种最常......
  • CyberRT_源码与简单功能
    阅读源码首先快速地作了一个每个模块的简单功能介绍,后续会按照程序的顺序对每个模块深入源码学习核心功能:数据通信和任务调度CyberRT采用了基于Component模块和有向无环图(DAG)的动态加载配置 role_attributescyber/proto/role_attributes.proto中定义了两个数据结......
  • 【金融资产组合模型进化论】4.1 对MPT+Fama-French五因子优化方案实现Backtrader量化
    目录0.承前1.汇总代码2.近4年量化回测2.1获取近4年资产组合数据2.2对近4年资产组合数据进行量化回测3.启后3.1待优化点0.承前本篇博文是对文章,链接:【金融资产组合模型进化论】4.马科维茨资产组合模型+Fama-French五因子优化方案(理论+Python实战)实现量......
  • 21岁前简单谈谈工作过的暑假工兼职
    21岁前简单谈谈工作过的暑假工/兼职第一份工作,小时工:小学:亲戚厂里忙,找了一堆小孩去帮忙,干了5个小时左右,就是把不知名的明星的的圆形半身照塞进一个纸袋里,应该是谷子或者代言。收货第一桶金,不到100,好像是70左右,后面还是上交了。第二份:亲戚让我辅导他儿子学业(我表弟,小我两岁,初三......
  • 域密码到期发送提醒邮件的超简单方法.210715
    1,AD服务器下载安装免费的卓豪AD管理工具   https://www.manageengine.cn/products/self-service-password/free-password-expiry-notification-tool.html2,设置邮箱3,设置提醒邮件内容,选择域4,愉快的玩耍吧。......
  • 介绍1个简单好用的英文文本翻转网站,关键还免费不用登录
    输入英文,会生成对应的翻转、反向、镜像、......
  • 使用excel生成简单的日历
    思路比较简单,样式也单一,丑了点。采用宏和时间函数,计算单元格偏移量,进行单元格填充。SubGenerateYearCalendar()DimwsAsWorksheetSetws=ThisWorkbook.Sheets("Sheet1")'更改为你使用的表名DimyearAsIntegeryear=InputBox("请输入年份(如......
  • 使用 Python 实现验证码识别的简单教程
    验证码是用于验证用户是否为机器人的重要工具。在本教程中,我们将利用Python和TesseractOCR引擎编写一个程序,用于识别英文和数字组成的验证码。通过适当的图像预处理,我们可以有效地提高识别的准确性。环境配置更多内容访问ttocr.com或联系1436423940安装Python和必需库......
  • RSA的原理和简单实践
    RSA加密是一种非对称加密,原理是:使⽤算法可以⽣成两把钥匙A和B使⽤A加密的信息,使⽤B可以解开使⽤B加密的信息,使⽤A可以解开⽇常使⽤中,我们把⼀把作为公钥公开发布。⼀把作为私钥,⾃⼰保留。这样,任何⼈都可以使⽤我们的公钥加密信息发给我们,我们则可以使⽤⾃⼰的私......