• 牛客刷题<19>使用3-8译码器实现逻辑函数


    题目:使用3-8译码器①实现逻辑函数_牛客题霸_牛客网

    思路:此方法可适合于任何逻辑函数,需要将L=(~A)·C+A·逻辑式转换为最小项的形式。

    实现逻辑表达式

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

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

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

    L = m1+m3+m6+m7

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

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

    ‘表示取反。

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

    1. `timescale 1ns/1ns
    2. module decoder_38(
    3. input E1_n ,
    4. input E2_n ,
    5. input E3 ,
    6. input A0 ,
    7. input A1 ,
    8. input A2 ,
    9. output wire Y0_n ,
    10. output wire Y1_n ,
    11. output wire Y2_n ,
    12. output wire Y3_n ,
    13. output wire Y4_n ,
    14. output wire Y5_n ,
    15. output wire Y6_n ,
    16. output wire Y7_n
    17. );
    18. wire E ;
    19. assign E = E3 & ~E2_n & ~E1_n;
    20. assign Y0_n = ~(E & ~A2 & ~A1 & ~A0);
    21. assign Y1_n = ~(E & ~A2 & ~A1 & A0);
    22. assign Y2_n = ~(E & ~A2 & A1 & ~A0);
    23. assign Y3_n = ~(E & ~A2 & A1 & A0);
    24. assign Y4_n = ~(E & A2 & ~A1 & ~A0);
    25. assign Y5_n = ~(E & A2 & ~A1 & A0);
    26. assign Y6_n = ~(E & A2 & A1 & ~A0);
    27. assign Y7_n = ~(E & A2 & A1 & A0);
    28. endmodule
    29. module decoder0(
    30. input A ,
    31. input B ,
    32. input C ,
    33. output wire L
    34. );
    35. wire Y0_n;
    36. wire Y1_n;
    37. wire Y2_n;
    38. wire Y3_n;
    39. wire Y4_n;
    40. wire Y5_n;
    41. wire Y6_n;
    42. wire Y7_n;
    43. decoder_38 U0(
    44. .E1_n(1'b0),
    45. .E2_n(1'b0),
    46. .E3(1'b1),
    47. .A0(C),
    48. .A1(B),
    49. .A2(A),
    50. .Y0_n(Y0_n),
    51. .Y1_n(Y1_n),
    52. .Y2_n(Y2_n),
    53. .Y3_n(Y3_n),
    54. .Y4_n(Y4_n),
    55. .Y5_n(Y5_n),
    56. .Y6_n(Y6_n),
    57. .Y7_n(Y7_n)
    58. );
    59. assign L = ~(Y1_n & Y3_n & Y6_n & Y7_n);
    60. endmodule

     Y1_n相当于~m1

    此方法是A、B、C分别对应接入3-8译码器的A2、A1、A0,所以最小项是1、3、6、7

    如果C、B、A分别对应接入3-8译码器的A2、A1、A0,所以最小项是3、4、6、7,就变成下面的解法

    1. `timescale 1ns/1ns
    2. module decoder_38(
    3. input E1_n ,
    4. input E2_n ,
    5. input E3 ,
    6. input A0 ,
    7. input A1 ,
    8. input A2 ,
    9. output wire Y0_n ,
    10. output wire Y1_n ,
    11. output wire Y2_n ,
    12. output wire Y3_n ,
    13. output wire Y4_n ,
    14. output wire Y5_n ,
    15. output wire Y6_n ,
    16. output wire Y7_n
    17. );
    18. wire E ;
    19. assign E = E3 & ~E2_n & ~E1_n;
    20. assign Y0_n = ~(E & ~A2 & ~A1 & ~A0);
    21. assign Y1_n = ~(E & ~A2 & ~A1 & A0);
    22. assign Y2_n = ~(E & ~A2 & A1 & ~A0);
    23. assign Y3_n = ~(E & ~A2 & A1 & A0);
    24. assign Y4_n = ~(E & A2 & ~A1 & ~A0);
    25. assign Y5_n = ~(E & A2 & ~A1 & A0);
    26. assign Y6_n = ~(E & A2 & A1 & ~A0);
    27. assign Y7_n = ~(E & A2 & A1 & A0);
    28. endmodule
    29. module decoder0(
    30. input A ,
    31. input B ,
    32. input C ,
    33. output wire L
    34. );
    35. wire [7:0] Y;
    36. assign L = ~Y[3] + ~Y[4] + ~Y[6] + ~Y[7];
    37. decoder_38 inst(
    38. .E1_n(0),
    39. .E2_n(0),
    40. .E3 (1),
    41. .A0(A),
    42. .A1(B),
    43. .A2(C),
    44. .Y0_n(Y[0]),
    45. .Y1_n(Y[1]),
    46. .Y2_n(Y[2]),
    47. .Y3_n(Y[3]),
    48. .Y4_n(Y[4]),
    49. .Y5_n(Y[5]),
    50. .Y6_n(Y[6]),
    51. .Y7_n(Y[7])
    52. );
    53. endmodule

    解法三:最容易想到的

    1. `timescale 1ns/1ns
    2. module decoder_38(
    3. input E1_n ,
    4. input E2_n ,
    5. input E3 ,
    6. input A0 ,
    7. input A1 ,
    8. input A2 ,
    9. output wire Y0_n ,
    10. output wire Y1_n ,
    11. output wire Y2_n ,
    12. output wire Y3_n ,
    13. output wire Y4_n ,
    14. output wire Y5_n ,
    15. output wire Y6_n ,
    16. output wire Y7_n
    17. );
    18. wire E ;
    19. assign E = E3 & ~E2_n & ~E1_n;
    20. assign Y0_n = ~(E & ~A2 & ~A1 & ~A0);
    21. assign Y1_n = ~(E & ~A2 & ~A1 & A0);
    22. assign Y2_n = ~(E & ~A2 & A1 & ~A0);
    23. assign Y3_n = ~(E & ~A2 & A1 & A0);
    24. assign Y4_n = ~(E & A2 & ~A1 & ~A0);
    25. assign Y5_n = ~(E & A2 & ~A1 & A0);
    26. assign Y6_n = ~(E & A2 & A1 & ~A0);
    27. assign Y7_n = ~(E & A2 & A1 & A0);
    28. endmodule
    29. module decoder0(
    30. input A ,
    31. input B ,
    32. input C ,
    33. output wire L
    34. );
    35. assign L = (~A&C)|(A&B);
    36. endmodule

    解法四:简单

    1. `timescale 1ns/1ns
    2. module decoder_38(
    3. input E1_n ,
    4. input E2_n ,
    5. input E3 ,
    6. input A0 ,
    7. input A1 ,
    8. input A2 ,
    9. output wire Y0_n ,
    10. output wire Y1_n ,
    11. output wire Y2_n ,
    12. output wire Y3_n ,
    13. output wire Y4_n ,
    14. output wire Y5_n ,
    15. output wire Y6_n ,
    16. output wire Y7_n
    17. );
    18. wire E ;
    19. assign E = E3 & ~E2_n & ~E1_n;
    20. assign Y0_n = ~(E & ~A2 & ~A1 & ~A0);
    21. assign Y1_n = ~(E & ~A2 & ~A1 & A0);
    22. assign Y2_n = ~(E & ~A2 & A1 & ~A0);
    23. assign Y3_n = ~(E & ~A2 & A1 & A0);
    24. assign Y4_n = ~(E & A2 & ~A1 & ~A0);
    25. assign Y5_n = ~(E & A2 & ~A1 & A0);
    26. assign Y6_n = ~(E & A2 & A1 & ~A0);
    27. assign Y7_n = ~(E & A2 & A1 & A0);
    28. endmodule
    29. module decoder0(
    30. input A ,
    31. input B ,
    32. input C ,
    33. output wire L
    34. );
    35. wire y0,y1,y2,y3,y4,y5,y6,y7;
    36. decoder_38 inst(0,0,1,C,B,A,y0,y1,y2,y3,y4,y5,y6,y7);
    37. assign L = ~y1 + ~y3 + ~y6 + ~y7;
    38. endmodule

    在例化时不用写点和括号了

  • 相关阅读:
    机器学习强基计划0-4:通俗理解奥卡姆剃刀与没有免费午餐定理
    【短道速滑十一】标准的Gabor滤波器及Log_Gabor滤波器的实现、解析、速度优化及其和Halcon中gen_gabor的比较。
    微服务04-Gateway网关
    关于ETL的两种架构(ETL架构和ELT架构)
    【第十四届蓝桥杯单片机组】学习笔记(5):PCF8591( AD/DA芯片)
    GeneralUpdate20220323里程碑版本发布
    开发工具-压力测试工具 ab
    AI:05 - 基于深度学习的道路交通信号灯的检测与识别
    入职一周感慨
    行业品牌监测报告|《中国汽车产业舆情报告2022(上半年)》
  • 原文地址:https://blog.csdn.net/mxh3600/article/details/126566938