• 牛客刷题<11>4位数值比较器电路


    题目:4位数值比较器电路_牛客题霸_牛客网

    知识:

    门级描述,无非就是将<,>,==三个符号用门级电路来表示,然后根据行为级描述进行替换。

    a == b  --> ~(a^b)

    a > b --> (a^b)&a

    a < b --> (a^b)&b

    行为级描述就是从最高位依次比较。

    解法一

    1. `timescale 1ns/1ns
    2. module comparator_4(
    3. input [3:0] A ,
    4. input [3:0] B ,
    5. output wire Y2 , //A>B
    6. output wire Y1 , //A=B
    7. output wire Y0 //A<B
    8. );
    9. assign Y1 = ~(A[0]^B[0]) & ~(A[1]^B[1]) & ~(A[2]^B[2]) & ~(A[3]^B[3]);
    10. assign Y2 = ((A[3]^B[3])&A[3]) |
    11. (~(A[3]^B[3]) & ((A[2]^B[2])&A[2])) |
    12. (~(A[3]^B[3]) & ~(A[2]^B[2]) & ((A[1]^B[1])&A[1])) |
    13. (~(A[3]^B[3]) & ~(A[2]^B[2]) & ~(A[1]^B[1]) & ((A[0]^B[0])&A[0]));
    14. assign Y0 = ((A[3]^B[3])&B[3]) |
    15. (~(A[3]^B[3]) & ((A[2]^B[2])&B[2])) |
    16. (~(A[3]^B[3]) & ~(A[2]^B[2]) & ((A[1]^B[1])&B[1])) |
    17. (~(A[3]^B[3]) & ~(A[2]^B[2]) & ~(A[1]^B[1]) & ((A[0]^B[0])&B[0]));
    18. endmodule

    解法二:转换为门电路

    a>b ---  a&(~b)

    a

    a=b ---~a^b

    1. `timescale 1ns/1ns
    2. module comparator_4(
    3. input [3:0] A ,
    4. input [3:0] B ,
    5. output wire Y2 , //A>B
    6. output wire Y1 , //A=B
    7. output wire Y0 //A<B
    8. );
    9. assign Y2 = (A[3]&(~B[3]))|(~A[3]^B[3])&(A[2]&(~B[2]))|(~A[3]^B[3])&(~A[2]^B[2])&(A[1]&(~B[1]))|(~A[3]^B[3])&(~A[2]^B[2])&(~A[1]^B[1])&(A[0]&(~B[0]));
    10. assign Y1 = (~A[3]^B[3])&(~A[2]^B[2])&(~A[1]^B[1])&(~A[0]^B[0]);
    11. assign Y0 = ((~A[3])&B[3])|(~A[3]^B[3])&((~A[2])&B[2])|(~A[3]^B[3])&(~A[2]^B[2])&((~A[1])&B[1])|(~A[3]^B[3])&(~A[2]^B[2])&(~A[1]^B[1])&((~A[0])&B[0]);
    12. endmodule

    解法三:最容易想到的

    1. `timescale 1ns/1ns
    2. module comparator_4(
    3. input [3:0] A ,
    4. input [3:0] B ,
    5. output reg Y2 , //A>B
    6. output reg Y1 , //A=B
    7. output reg Y0 //A<B
    8. );
    9. always @(*) begin
    10. if(A==B) begin
    11. Y0 = 0;
    12. Y1 = 1;
    13. Y2 = 0;
    14. end
    15. else if(A[3]>B[3]) begin
    16. Y0 = 0;
    17. Y1 = 0;
    18. Y2 = 1;
    19. end
    20. else begin
    21. if(A[3]<B[3]) begin
    22. Y0 = 1;
    23. Y1 = 0;
    24. Y2 = 0;
    25. end
    26. else begin
    27. if(A[2]>B[2]) begin
    28. Y0 = 0;
    29. Y1 = 0;
    30. Y2 = 1;
    31. end
    32. else begin
    33. if(A[2]<B[2]) begin
    34. Y0 = 1;
    35. Y1 = 0;
    36. Y2 = 0;
    37. end
    38. else begin
    39. if(A[1]>B[1]) begin
    40. Y0 = 0;
    41. Y1 = 0;
    42. Y2 = 1;
    43. end
    44. else begin
    45. if(A[1]<B[1]) begin
    46. Y0 = 1;
    47. Y1 = 0;
    48. Y2 = 0;
    49. end
    50. else begin
    51. if(A[0]>B[0]) begin
    52. Y0 = 0;
    53. Y1 = 0;
    54. Y2 = 1;
    55. end
    56. else begin
    57. Y0 = 1;
    58. Y1 = 0;
    59. Y2 = 0;
    60. end
    61. end
    62. end
    63. end
    64. end
    65. end
    66. end
    67. end
    68. endmodule

    解法四:自己写的

    1. `timescale 1ns/1ns
    2. module comparator_4(
    3. input [3:0] A ,
    4. input [3:0] B ,
    5. output reg Y2 , //A>B
    6. output reg Y1 , //A=B
    7. output reg Y0 //A<B
    8. );
    9. always@(A or B)
    10. begin
    11. if(A[3]>B[3])begin
    12. Y2=1;
    13. Y1=0;
    14. Y0=0;
    15. end
    16. else if(A[3]>B[3])begin
    17. Y2=0;
    18. Y1=0;
    19. Y0=1;
    20. end
    21. else if((A[3]==B[3])&&(A[2]>B[2]))begin
    22. Y2=1;
    23. Y1=0;
    24. Y0=0;
    25. end
    26. else if((A[3]==B[3])&&(A[2]<B[2]))begin
    27. Y2=0;
    28. Y1=0;
    29. Y0=1;
    30. end
    31. else if((A[3]==B[3])&&(A[2]==B[2])&&(A[1]>B[1]))begin
    32. Y2=1;
    33. Y1=0;
    34. Y0=0;
    35. end
    36. else if((A[3]==B[3])&&(A[2]==B[2])&&(A[1]<B[1]))begin
    37. Y2=0;
    38. Y1=0;
    39. Y0=1;
    40. end
    41. else if((A[3]==B[3])&&(A[2]==B[2])&&(A[1]==B[1])&&(A[0]>B[0]))begin
    42. Y2=1;
    43. Y1=0;
    44. Y0=0;
    45. end
    46. else if((A[3]==B[3])&&(A[2]==B[2])&&(A[1]==B[1])&&(A[0]<B[0]))begin
    47. Y2=0;
    48. Y1=0;
    49. Y0=1;
    50. end
    51. else if((A[3]==B[3])&&(A[2]==B[2])&&(A[1]==B[1])&&(A[0]==B[0]))begin
    52. Y2=0;
    53. Y1=1;
    54. Y0=0;
    55. end
    56. end
    57. endmodule

    解法五:直接比较整体

    1. `timescale 1ns/1ns
    2. module comparator_4(
    3. input [3:0] A ,
    4. input [3:0] B ,
    5. output wire Y2 , //A>B
    6. output wire Y1 , //A=B
    7. output wire Y0 //A<B
    8. );
    9. assign Y2 = (A>B)?1:0;
    10. assign Y1 = (A==B)?1:0;
    11. assign Y0 = (A<B)?1:0;
    12. endmodule

    解法六

    1. `timescale 1ns/1ns
    2. module comparator_4(
    3. input [3:0] A ,
    4. input [3:0] B ,
    5. output wire Y2 , //A>B
    6. output wire Y1 , //A=B
    7. output wire Y0 //A<B
    8. );
    9. assign Y2 = (A[3]>B[3]) + (A[3]==B[3]&&A[2]>B[2]) + (A[3]==B[3]&&A[2]==B[2]&&A[1]>B[1]) + (A[3]==B[3]&&A[2]==B[2]&&A[1]==B[1]&&A[0]>B[0]);
    10. assign Y1 = A[3]==B[3]&&A[2]==B[2]&&A[1]==B[1]&&A[0]==B[0];
    11. assign Y0 = (A[3]<B[3]) + (A[3]==B[3]&&A[2]<B[2]) + (A[3]==B[3]&&A[2]==B[2]&&A[1]<B[1]) + (A[3]==B[3]&&A[2]==B[2]&&A[1]==B[1]&&A[0]<B[0]);
    12. endmodule

  • 相关阅读:
    Nvidia AGX Orin MAX9296 GMSL 载板设计要点
    SpringSecurity简明教程
    jmeter+nmon+crontab简单的执行接口定时压测
    如何使用 Dijkstra 算法找到从源到所有顶点的最短路径--附C++/Java源码
    `算法竞赛知识` 前缀和与差分
    基于 Junit 的接口自动化测试框架实现!
    Windows下安装Miniconda及配置和简单使用
    Dell服务器重启iDRAC方法
    前后端分离项目,整合成jar包,刷新404或空白页,解决方法
    传输中的差错检验技术
  • 原文地址:https://blog.csdn.net/mxh3600/article/details/126437322