当前位置:   article > 正文

关于在xilinx的FPGA上使用进位链原语的方式编写加法器_xilinx超前进位加法器代码

xilinx超前进位加法器代码

     不得不说,老师布置这个任务,让用进位链原语的方式将定点数加法器写出来,有点愚蠢,vivado自带综合软件可以说是优化做的非常不错了,如果非要用原语去写,无非是把人家综合的结果实现一遍。反复读取xilinx的官方文档,仅仅介绍进位链的原语输入以及输出是什么并没有直接写怎么用,无奈,只能按照人家的综合文件对照文档反复摸索。

    对于定点数加法器设计来讲,一般采用的是超前进位加法设计。公式如下:

     当前位输出 Si=Ai^Bi^Ci(进位)

     进位输出C(i+1)=(Ai^Bi)Ci +AiBi

     定义两个中间变量 Gi与Pi

     Gi=Ai*Bi

     Pi=Ai^Bi

    我们把Gi叫做产生变量,而Pi叫做传导变量。这两个变量都与进位信号无关,而仅仅与两个输入值有关。

   则,可以把当前位输出公式以及进位公式改造为:

    Si=Pi^Ci

   C(i+1)=Gi+Pi*Ci

   则,进位可以描述为:

  C1=G0+P0*C0

  C2=G1+P1C1=G1+P1G0+P1P0C0

 C3=G2+P2C2=G2+P2G1+P2P1G0+P2P1P0C0

。。。。。

 

 

对于进位链原语下面写的是一个4位加法,并且有进位输入以及输出的进位链设计:

 

  1. module carry_chain4(in_a_4,in_b_4,out_4,cin,cout
  2. );
  3. input [3:0] in_a_4,in_b_4;
  4. input cin;
  5. output [3:0] out_4;
  6. output cout;
  7. wire [3:0]S;
  8. wire [3:0] co;
  9. assign S[3:0]=in_a_4[3:0]^in_b_4[3:0];
  10. CARRY4 CARRY4_inst (
  11. .CO(co), // 4-bit carry out
  12. .O(out_4[3:0]), // 4-bit carry chain XOR data out
  13. .CI(cin), // 1-bit carry cascade input
  14. .CYINIT(1'b0), // 1-bit carry initialization
  15. .DI(in_a_4[3:0]), // 4-bit carry-MUX data in
  16. .S(S) // 4-bit carry-MUX select input
  17. );
  18. assign cout=co[3];
  19. endmodule

对于用verilog直接写加号综合出来的电路图,自己可以直接用verilog自己综合实现看一看。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/607803
推荐阅读
相关标签
  

闽ICP备14008679号