• 牛客刷题<18>3-8译码器


    题目:实现3-8译码器①_牛客题霸_牛客网

    知识点:Verilog中and or not的用法

    在程序模块中出现的and,or和not都是Verilog语言的保留字,由Verilog语言的原语

    规定了它们的接口顺序和用法,分别表示与门,或门,非门 

    例:

    module muxtwo(out,a,b,sl);

    input a,b,sl;

    output out;

         not      u1(nsl,sl);   //将sl进行非运算,nsl为sl非运算后的值,u1相当于逻辑元件非门

         and  #1   u2(sela,a,nsl);  //将a和nsl进行与运算,sela为与运算后的输出值,u2相当于逻辑元件与门

         and  #1   u3(selb,b,sl);//将b和sl进行与运算

         or     #1   u4(out,sela,selb);  //将sela和selb进行或运算

                                                    /*#1表示输入到输出延迟1个单位时间*/

    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. not NO0 (A00,A0),
    19. NO1(A10,A1),
    20. NO2(A20,A2),
    21. NO0_N(Y0_n,Y0),
    22. NO1_N(Y1_n,Y1),
    23. NO2_N(Y2_n,Y2),
    24. NO3_N(Y3_n,Y3),
    25. NO4_N(Y4_n,Y4),
    26. NO5_N(Y5_n,Y5),
    27. NO6_N(Y6_n,Y6),
    28. NO7_N(Y7_n,Y7),
    29. NOE1(E1,E1_n),
    30. NOE2(E2,E2_n),
    31. NOE3(E3,E3_n);
    32. and AND0(Y0,A00,A10,A20,E3,E2,E1),
    33. AND1(Y1,A0,A10,A20,E3,E2,E1),
    34. AND2(Y2,A00,A1,A20,E3,E2,E1),
    35. AND3(Y3,A0,A1,A20,E3,E2,E1),
    36. AND4(Y4,A00,A10,A2,E3,E2,E1),
    37. AND5(Y5,A0,A10,A2,E3,E2,E1),
    38. AND6(Y6,A00,A1,A2,E3,E2,E1),
    39. AND7(Y7,A0,A1,A2,E3,E2,E1);
    40. 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. assign Y0_n = ~(({A2,A1,A0}==3'd0)&&({E3,E2_n,E1_n} ==3'b100));
    19. assign Y1_n = ~(({A2,A1,A0}==3'd1)&&({E3,E2_n,E1_n} ==3'b100));
    20. assign Y2_n = ~(({A2,A1,A0}==3'd2)&&({E3,E2_n,E1_n} ==3'b100));
    21. assign Y3_n = ~(({A2,A1,A0}==3'd3)&&({E3,E2_n,E1_n} ==3'b100));
    22. assign Y4_n = ~(({A2,A1,A0}==3'd4)&&({E3,E2_n,E1_n} ==3'b100));
    23. assign Y5_n = ~(({A2,A1,A0}==3'd5)&&({E3,E2_n,E1_n} ==3'b100));
    24. assign Y6_n = ~(({A2,A1,A0}==3'd6)&&({E3,E2_n,E1_n} ==3'b100));
    25. assign Y7_n = ~(({A2,A1,A0}==3'd7)&&({E3,E2_n,E1_n} ==3'b100));
    26. 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. assign Y0_n = ~E3 | E2_n | E1_n | A2 | A1 | A0;
    19. assign Y1_n = ~E3 | E2_n | E1_n | A2 | A1 | ~A0;
    20. assign Y2_n = ~E3 | E2_n | E1_n | A2 | ~A1 | A0;
    21. assign Y3_n = ~E3 | E2_n | E1_n | A2 | ~A1 | ~A0;
    22. assign Y4_n = ~E3 | E2_n | E1_n | ~A2 | A1 | A0;
    23. assign Y5_n = ~E3 | E2_n | E1_n | ~A2 | A1 | ~A0;
    24. assign Y6_n = ~E3 | E2_n | E1_n | ~A2 | ~A1 | A0;
    25. assign Y7_n = ~E3 | E2_n | E1_n | ~A2 | ~A1 | ~A0;
    26. 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

    解法五:自己写的

    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. reg Y0n;
    19. reg Y1n;
    20. reg Y2n;
    21. reg Y3n;
    22. reg Y4n;
    23. reg Y5n;
    24. reg Y6n;
    25. reg Y7n;
    26. always@(*)begin
    27. if(E3==0|E2_n==1|E1_n==1)begin
    28. Y0n = 1'b1;
    29. Y1n = 1'b1;
    30. Y2n = 1'b1;
    31. Y3n = 1'b1;
    32. Y4n = 1'b1;
    33. Y5n = 1'b1;
    34. Y6n = 1'b1;
    35. Y7n = 1'b1;
    36. end
    37. else begin
    38. case({A2,A1,A0})
    39. 3'b000:begin
    40. Y0n = 1'b0; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
    41. Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
    42. end
    43. 3'b001:begin
    44. Y0n = 1'b1; Y1n = 1'b0; Y2n = 1'b1; Y3n = 1'b1;
    45. Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
    46. end
    47. 3'b010:begin
    48. Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b0; Y3n = 1'b1;
    49. Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
    50. end
    51. 3'b011:begin
    52. Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b0;
    53. Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
    54. end
    55. 3'b100:begin
    56. Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
    57. Y4n = 1'b0; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
    58. end
    59. 3'b101:begin
    60. Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
    61. Y4n = 1'b1; Y5n = 1'b0; Y6n = 1'b1; Y7n = 1'b1;
    62. end
    63. 3'b110:begin
    64. Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
    65. Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b0; Y7n = 1'b1;
    66. end
    67. 3'b111:begin
    68. Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
    69. Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b0;
    70. end
    71. default:begin
    72. Y0n = 1'b1; Y1n = 1'b1; Y2n = 1'b1; Y3n = 1'b1;
    73. Y4n = 1'b1; Y5n = 1'b1; Y6n = 1'b1; Y7n = 1'b1;
    74. end
    75. endcase
    76. end
    77. end
    78. assign Y0_n = Y0n;
    79. assign Y1_n = Y1n;
    80. assign Y2_n = Y2n;
    81. assign Y3_n = Y3n;
    82. assign Y4_n = Y4n;
    83. assign Y5_n = Y5n;
    84. assign Y6_n = Y6n;
    85. assign Y7_n = Y7n;
    86. endmodule

    Testbench

    1. `timescale 1ns/1ns
    2. module testbench();
    3. wire E1_n;
    4. wire E2_n;
    5. wire E3;
    6. wire A0;
    7. wire A1;
    8. wire A2;
    9. wire Y0_n;
    10. wire Y1_n;
    11. wire Y2_n;
    12. wire Y3_n;
    13. wire Y4_n;
    14. wire Y5_n;
    15. wire Y6_n;
    16. wire Y7_n;
    17. initial begin
    18. $dumpfile("out.vcd");
    19. $dumpvars(0,testbench);
    20. end
    21. decoder_38 inst(
    22. .E1_n(E1_n),
    23. .E2_n(E2_n),
    24. .E3(E3),
    25. .A0(A0),
    26. .A1(A1),
    27. .A2(A2),
    28. .Y0_n(Y0_n),
    29. .Y1_n(Y1_n),
    30. .Y2_n(Y2_n),
    31. .Y3_n(Y3_n),
    32. .Y4_n(Y4_n),
    33. .Y5_n(Y5_n),
    34. .Y6_n(Y6_n),
    35. .Y7_n(Y7_n)
    36. );
    37. endmodule

  • 相关阅读:
    智慧油田解决方案-最新全套文件
    TCp并发服务器
    小熊听书项目的详细介绍
    文件工具类
    Java类和对象(一)
    FPGA中乘除法运算实现途径
    String的intern()方法详解
    阿里p8软测专家耗时一个月整理出,从0基础自学到功能测试再到自动化测试超全学习指南
    Hadoop大数据平台搭建(超详细步骤)
    【SSM框架】Mybatis详解08(源码自取)之优化注册,#{}与¥{}区别,返回主键,UUID
  • 原文地址:https://blog.csdn.net/mxh3600/article/details/126493498