`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 Y1,Y2,Y3,Y4,Y5,Y6,Y7,Y0;
 decoder_38 decoder(
        .E1_n(0),
        .E2_n(0),
        .E3(1),
        .A0(C)    ,
        .A1(B)     ,
        .A2(A)     ,
   
        .Y0_n(Y0)    ,
        .Y1_n(Y1)    , 
        .Y2_n(Y2)    , 
        .Y3_n(Y3)    , 
        .Y4_n(Y4)    , 
        .Y5_n(Y5)    , 
        .Y6_n(Y6)    , 
        .Y7_n(Y7)  
    );

assign L = ~Y1 | ~Y3 | ~Y6 | ~Y7 ;


endmodule

首先我们分析设计目标 , L = ~AC + AB ; 使用基本逻辑门和一个标准的3-8译码器,低电平有效 。

输入有3个变量 , ABC,则对应译码器A2 A1 A0的输入 。

接着分析 , 目标函数的命中输入组合 , 枚举所有输入组合并找出让L=1的组合 (剩下组合L=0不难理解吧 草),

这时候对应的Y为,Y1 Y3 Y6 Y7 , 这几个为0 , 突出。

译码器是低电平有效 , 所以 Yx_N = 0 表示该组合发生即L=1 ;

我们需要L=1 , 只要Y1 Y3 Y6 Y7 中有任何一个为0 即可 。

因此逻辑为assign L = ~Y1_n | ~Y3_n | ~Y6_n | ~Y7_n;