`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;