题意整理

②需要将L=(~A)·C+A·逻辑式转换为最小项的形式。

题解主体

②实现逻辑表达式

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

由于译码器的输出为最小项取反,而逻辑函数可以写成最小项之和的形式,故可以利用附加的门电路和译码器实现逻辑函数。

由逻辑表达式可得出,输出L的逻辑表达式用最小项表示为:

L = m1+m3+m6+m7

由于译码器的输出为最小项取反,下面需要将表达式中的最小项转换为最小项取反的形式。根据反演定理,转换结果如下:

L = (m1’m3’m6’m7’)’;

‘表示取反。

由上式可知,采用与非门即可实现该电路的组合逻辑输出。关键电路如下:


结合电路图,将电路转换成Verilog代码描述如下:


wire       Y0_n   ; 
wire       Y1_n   ;
wire       Y2_n   ;
wire       Y3_n   ;
wire       Y4_n   ;
wire       Y5_n   ;
wire       Y6_n   ;
wire       Y7_n   ;


decoder_38 U0(

   .E1_n   (1'b0),

   .E2_n   (1'b0),

   .E3     (1'b1),

   .A0     (C),

   .A1     (B),

   .A2     (A),

 

   .Y0_n   (Y0_n), 

   .Y1_n   (Y1_n),

   .Y2_n   (Y2_n),

   .Y3_n   (Y3_n),

   .Y4_n   (Y4_n),

   .Y5_n   (Y5_n),

   .Y6_n   (Y6_n),

   .Y7_n   (Y7_n)

);

assign L = ~(Y1_n & Y3_n & Y6_n & Y7_n);

参考答案

`timescale 1ns/1ns


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       Y0_n   ;  
wire       Y1_n   ; 
wire       Y2_n   ; 
wire       Y3_n   ; 
wire       Y4_n   ; 
wire       Y5_n   ; 
wire       Y6_n   ; 
wire       Y7_n   ;

decoder_38 U0(
   .E1_n   (1'b0),
   .E2_n   (1'b0),
   .E3     (1'b1),
   .A0     (C),
   .A1     (B),
   .A2     (A),
  
   .Y0_n   (Y0_n),  
   .Y1_n   (Y1_n), 
   .Y2_n   (Y2_n), 
   .Y3_n   (Y3_n), 
   .Y4_n   (Y4_n), 
   .Y5_n   (Y5_n), 
   .Y6_n   (Y6_n), 
   .Y7_n   (Y7_n)
);

assign L = ~(Y1_n & Y3_n & Y6_n & Y7_n);

endmodule