当前位置:   article > 正文

「Verilog学习笔记」超前进位加法器_verilog超前进位加法器代码

verilog超前进位加法器代码
专栏前言

本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网


超前进位加法器的实质是:对于输出的每一位Si 其实都可以用Si = Ai ^ Bi ^ Cin来表示 我们需要做的只是判断加法结果的最高位该取几 例如本题中 输入的两个数A和B均为四位的二进制数 对于输出结果OUT的低四位都可以用上述公式计算 而最高位才是超前进位加法器需要解决的问题 即用更短的时间计算结果的最高位

  1. `timescale 1ns/1ns
  2. module huawei8//四位超前进位加法器
  3. (
  4. input wire [3:0]A,
  5. input wire [3:0]B,
  6. output wire [4:0]OUT
  7. );
  8. //*************code***********//
  9. wire [3:0] G, P, F ;
  10. wire [4:1] C ;
  11. Add1 a1(.a(A[0]), .b(B[0]), .C_in(0), .f(F[0]), .g(G[0]), .p(P[0])) ;
  12. genvar i ; // 在实例化过程中一般只能使用generate for块 不能直接使用for循环
  13. generate
  14. for (i = 1 ; i < 4 ; i = i + 1) begin : add_inst
  15. Add1 a_i(.a(A[i]), .b(B[i]), .C_in(C[i]), .f(F[i]), .g(G[i]), .p(P[i])) ;
  16. end
  17. endgenerate
  18. CLA_4 cla_inst(.P(P), .G(G), .C_in(0), .Ci(C), .Gm(), .Pm()) ;
  19. assign OUT = {C[4], F} ; // 最高位和低四位
  20. //*************code***********//
  21. endmodule
  22. //下面是两个子模块
  23. module Add1
  24. (
  25. input a,
  26. input b,
  27. input C_in,
  28. output f,
  29. output g,
  30. output p
  31. );
  32. assign f = a ^ b ^ C_in ;
  33. assign g = a & b ;
  34. assign p = a | b ;
  35. endmodule
  36. module CLA_4(
  37. input [3:0]P,
  38. input [3:0]G,
  39. input C_in,
  40. output [4:1]Ci,
  41. output Gm,
  42. output Pm
  43. );
  44. assign Ci[1] = G[0] | (P[0] & C_in);
  45. assign Ci[2] = G[1] | (P[1] & Ci[1]) ;
  46. assign Ci[3] = G[2] | (P[2] & Ci[2]) ;
  47. assign Ci[4] = G[3] | (P[3] & Ci[3]) ;
  48. endmodule
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/986443
推荐阅读
相关标签
  

闽ICP备14008679号