VL20 用数据选择器实现逻辑函数

一、要求

1、这是提供的数据选择器的代码,可以在工程中例化

module data_sel(
   input             S0     ,
   input             S1     ,
   input             D0     ,
   input             D1     ,
   input             D2     ,
   input             D3     ,
   
   output wire        Y    
);

assign Y = ~S1 & (~S0&D0 | S0&D1) | S1&(~S0&D2 | S0&D3);
     
endmodule

2、函数模块的输入输出定义如下:

input A,B,C;    output wire L;

二、分析

1、assign Y = ~S1 & (~S0&D0 | S0&D1) | S1&(~S0&D2 | S0&D3);

这行代码是选择器的功能,控制端S1 决定了选择器是否工作,

        当控制端S1为1时,只用看后半部分

        ~S1为0,0“与”任何数都为0,所以 ~S1 & (~S0&D0 | S0&D1) 这部分的值为0,即输出Y和D0D1S0无关;

        S1为1,S1&(~S0&D2 | S0&D3),变成,(~S0&D2 | S0&D3)。S0为0时,Y是D2;S0为1时,Y是D3;

        所以 S1S0 为 10 时 ,Y = D2              S1S0 为 11 时,Y = D3

        当控制端S1为0时,只用看前半部分

        S1为0,0“与”任何数都为0,所以 S1 & (~S0&D2 | S0&D3) 这部分的值为0,即输出Y和D2D3S0无关;

        ~S1为1,~S1&(~S0&D0 | S0&D1),变成,(~S0&D0 | S0&D1)。S0为0时,Y是D0;S0为1时,Y是D1;

        所以 S1S0 为 00 时 ,Y = D0              S1S0 为 01 时,Y = D1

        总结:控制端 S1S0 = 00 01 10 11  时,输出 Y 分别选择 D0 D1 D2 D3

三、写代码

1、怎么把选择器和表达式对应?

        首先令 A = S1  B = S0 ,则可以把表达式 L写成这样。

        注意,表达式 L 是要实现的功能,所以它的每一项都必须得到对应。而选择器是用来实现功能的,不必每个项都对应。

        根据S1S0锁定,

        L的第一项对应Y的第四项     L的第二项也可以对应Y的,把L的第一第二项合并,则可以对应Y的第四项。所以 D3 = 1

        L的第三项对应Y的第三项。D2 = !C

        L的第四项对应Y的第二项。D1 = C

        L的四项全部对应完毕,但是Y只使用了三项功能,Y的第一项没有使用,使用让D0 = 0 ,既可以禁止Y 的第一项功能。

2、代码

`timescale 1ns/1ns

module data_sel(

   input             S0     ,

   input             S1     ,

   input             D0     ,

   input             D1     ,

   input             D2     ,

   input             D3     ,

   output wire        Y    

);

assign Y = ~S1 & (~S0&D0 | S0&D1) | S1&(~S0&D2 | S0&D3);

endmodule

module sel_exp(

   input             A     ,

   input             B     ,

   input             C     ,

   output wire       L            

);

data_sel data_sel_inst0(

                .S0(B)     ,

                .S1(A)     ,

                .D0(0)     ,

                .D1(C)     ,

                .D2(!C)     ,

                .D3(1)     ,

   

                .Y(L)    

);

endmodule

(只创建一个source文件,把上面的代码直接复制到vivado,也会生成这个电路图。但是为了养成好习惯,最后一个source文件只有一个module) 

        

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值