38译码器|数据选择器----实现逻辑函数

620 阅读2分钟

请使用3-8译码器①和必要的逻辑门实现函数L=(~A)C+A B

可在本题答案中添加并例化3-8译码器①代码,3-8译码器①代码如下:

基于真值表,逻辑表达式写出38译码器。

   input             E1_n   ,
   input             E2_n   ,
   input             E3     ,
   input             A0     ,
   input             A1     ,
   input             A2     ,
   
   output wire       Y0_n   ,  
   output wire       Y1_n   , 
   output wire       Y2_n   , 
   output wire       Y3_n   , 
   output wire       Y4_n   , 
   output wire       Y5_n   , 
   output wire       Y6_n   , 
   output wire       Y7_n   
);
wire E ;
assign E = E3 & ~E2_n & ~E1_n;
assign  Y0_n = ~(E & ~A2 & ~A1 & ~A0);
assign  Y1_n = ~(E & ~A2 & ~A1 &  A0);
assign  Y2_n = ~(E & ~A2 &  A1 & ~A0);
assign  Y3_n = ~(E & ~A2 &  A1 &  A0);
assign  Y4_n = ~(E &  A2 & ~A1 & ~A0);
assign  Y5_n = ~(E &  A2 & ~A1 &  A0);
assign  Y6_n = ~(E &  A2 &  A1 & ~A0);
assign  Y7_n = ~(E &  A2 &  A1 &  A0);
     
endmodule

实现函数L=(~A)C+A B:

38译码器的输出实际上包含了输入A2  A1  A0组成的所有最小项,而该逻辑表达式作为组合电路,其输出最终可化简为最小项的形式。

化简: ABC ------A2 A1 A0

L=(~A)C+A B = (~A)C(B+~B)+A* B(C+~C)

=~( Y1_n + Y3_n + Y7_n + Y6_n)


module decoder_38(
   input             E1_n   ,
   input             E2_n   ,
   input             E3     ,
   input             A0     ,
   input             A1     ,
   input             A2     ,
   
   output wire       Y0_n   ,  
   output wire       Y1_n   , 
   output wire       Y2_n   , 
   output wire       Y3_n   , 
   output wire       Y4_n   , 
   output wire       Y5_n   , 
   output wire       Y6_n   , 
   output wire       Y7_n   
);
wire E ;
assign E = E3 & ~E2_n & ~E1_n;
assign  Y0_n = ~(E & ~A2 & ~A1 & ~A0);
assign  Y1_n = ~(E & ~A2 & ~A1 &  A0);
assign  Y2_n = ~(E & ~A2 &  A1 & ~A0);
assign  Y3_n = ~(E & ~A2 &  A1 &  A0);
assign  Y4_n = ~(E &  A2 & ~A1 & ~A0);
assign  Y5_n = ~(E &  A2 & ~A1 &  A0);
assign  Y6_n = ~(E &  A2 &  A1 & ~A0);
assign  Y7_n = ~(E &  A2 &  A1 &  A0);
     
endmodule

module decoder0(
   input             A     ,
   input             B     ,
   input             C     ,
   
   output wire       L
);
    wire [7:0] Y;
    
    assign L = ~Y[1] + ~Y[3] + ~Y[6] + ~Y[7];
    //assign L = ~Y[1] + ~Y[3] + ~Y[6] + ~Y[7];
    
   
    decoder_38  decoder_38_inst(
        .E1_n (1'b0)  ,
        .E2_n (1'b0)  ,
        .E3   (1'b1)  ,
        .A0   (C)  ,
        .A1   (B)  ,
        .A2   (A)  ,
        .Y0_n (Y[0])  ,  
        .Y1_n (Y[1])  , 
        .Y2_n (Y[2])  , 
        .Y3_n (Y[3])  , 
        .Y4_n (Y[4])  , 
        .Y5_n (Y[5])  , 
        .Y6_n (Y[6])  , 
        .Y7_n (Y[7])  
);    
endmodule

数据选择器实现逻辑电路

请使用此4选1数据选择器和必要的逻辑门实现下列表达式。

L=A∙B+A∙~C+B∙C

image.png

Y =~S1&(~S0&D0 | S0&D1)|S1&(~S0&D2 | S0&D3) = S1S0D0+S1S0D1+S1S0D2+S1S0D3

建立两个输出之间的关系,用数据选择器的输出表示逻辑表达式输出。

化简逻辑表达式: A+A = A

ABC+ AB~C = AB 令D3=1;得到. 最后让D0=0.

L=A∙B+A∙~C+B∙C =

ABC+ ABC + AB~C + ~ABC

= ~S1 S0D1+ ~S1 S0 D2

A看作S0 B看作S1 C看作D


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_inst(
      .S0( A  )  ,
      .S1( B )  ,
      .D0(  0)  ,
      .D1( ~C )  ,
      .D2(  C )  ,
      .D3(  1 )  ,
   
      .Y(L)    
);  
    
    
    
    
    
    
    
endmodule
四选一选择器
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 

四选一多路器

image.png

module mux4_1(
input [1:0]d1,d2,d3,d0,
input [1:0]sel,
output[1:0]mux_out
);
//*************code***********//
    
    assign mux_out = sel[0]?(sel[1]?d0:d2):(sel[1]?d1:d3);    


//*************code***********//
endmodule