各种加法器的比对分析与Verilog实现(1)

这篇具有很好参考价值的文章主要介绍了各种加法器的比对分析与Verilog实现(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        接下来几篇博客,我将介绍常见的几种加法器设计,包括超前进位、Kogge-Stone、brent-kung、carry-skip、Conditional-Sum等加法器的原理及Verilog实现。

       本文将介绍行波进位加法器、超前进位加法器的原理及Verilog实现。

1. 行波进位加法器 (Ripple Carry Adder, RCA)

1.1 原理

       从下方原理图即可看出,行波进位加法器由一系列全加器级联而成,这种加法器面积小,由于每一比特的进位输入必须等待前一比特完成进位输出的计算,所以这种加法器的速度慢。

行波进位加法器,FPGA求学之路,fpga开发
行波进位加法器结构示意图

1.2 Verilog实现

(1)完成单比特全加器的模块

module full_adder(
    input a,
    input b,
    input c_in,
    output sum,
    output c_out
);
		
assign {c_out,sum} = a + b + c_in;
	
endmodule	

(2)全加器级联

module RCA(
    input [3:0] a,
    input [3:0] b,
    input c_in,
    output [3:0] sum,
    output c_out
);
	
wire sum1,sum2,sum3,sum4;
wire c_out1,c_out2,c_out3;
	
assign sum = {sum4,sum3,sum2,sum1};
	
full_adder f0(
    .a(a[0]),
    .b(b[0]),
    .c_in(c_in),
    .sum(sum1),
    .c_out(c_out1)
);
		
full_adder f1(
    .a(a[1]),
    .b(b[1]),
    .c_in(c_out1),
    .sum(sum2),
    .c_out(c_out2)
);
		
full_adder f2(
    .a(a[2]),
    .b(b[2]),
    .c_in(c_out2),
    .sum(sum3),
    .c_out(c_out3)
);
		
full_adder f3(
    .a(a[3]),
    .b(b[3]),
    .c_in(c_out3),
    .sum(sum4),
    .c_out(c_out)
);
	
endmodule
行波进位加法器,FPGA求学之路,fpga开发
Vivado综合电路(RCA)

2. 超前进位加法器 (Carry Look Ahead Adder , CLA)

2.1 设计原理

行波进位加法器,FPGA求学之路,fpga开发
一位全加器真值表

       我们可以按A、B异或结果和A·B结果分成3组(表中用不同颜色进行区分),不难发现,第一组没有进位,第三组必有进位,第二组中Ci为1则有进位。因此可以通过这种特性提前得到进位。

       定义:

行波进位加法器,FPGA求学之路,fpga开发

       根据真值表的特点可以推出:

行波进位加法器,FPGA求学之路,fpga开发

       因此,CLA的计算流程如下:

       1) 对面向输入的第一层,并行预计算gi和pi

       2) 计算进位ci

       3) 根据pi和ci计算si

       超前进位加法器优化改进行波进位器的关键路径,通过采用并行计算进位的方法,解决了行波进位加法器的进位依赖问题。然而对于大位宽的超前进位加法器,进位逻辑计算单元面积耗费大。

2.2 Verilog实现

(1)pg单元设计

module pg_cell(
    input a,
    input b,
    output g,
    output p
);

assign g = a & b;
assign p = a ^ b;

endmodule

(2)CLA实现

module LCA #(width=4) (
    input  [width-1:0] op1,
    input  [width-1:0] op2,
    input  cin,
    output [width-1:0] sum1,
    output [width-1:0] sum2,
    output cout,
    output cout2
);
//CLA
wire [width-1:0] g;
wire [width-1:0] p;
wire [width:0] c;
//gp generator
genvar i;
for( i=0; i<width; i=i+1) begin
pg_cell pg_cell_u(
    .a( op1[i]),
    .b( op2[i]),
    .g( g[i]  ),
    .p( p[i]  )
);
end
//carry generator
assign c[0] = cin;
assign c[1] = g[0] + ( c[0] & p[0] );
assign c[2] = g[1] + ( (g[0] + ( c[0] & p[0]) ) & p[1] );
assign c[3] = g[2] + ( (g[1] + ( (g[0] + (c[0] & p[0]) ) & p[1])) & p[2] );
assign c[4] = g[3] + ( (g[2] + ( (g[1] + ( (g[0] + (c[0] & p[0]) ) & p[1])) & p[2] )) & p[3]);
assign cout = c[width];

genvar k;
for( k=0; k<width; k=k+1) begin
    assign sum1[k] = p[k] ^ c[k];
end

endmodule
行波进位加法器,FPGA求学之路,fpga开发
Vivado综合电路(CLA)

求学路上,你我共勉(๑•̀ㅂ•́)و✧文章来源地址https://www.toymoban.com/news/detail-720940.html

到了这里,关于各种加法器的比对分析与Verilog实现(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • verilog数组的定义、转换和加法器的实现

    看了别人的博客有的人也称reg [31:0] add0[0:12]这样的数组为二维数组,其实中二维数组不是真正意义上的数组,而是由多个寄存器组成的ROM或者RAM。我觉得这样理解好记一点:这个是一维数组,一共有0到12共13组数据,每组数据的宽度是0到31一共32个位宽。 优势:简单易于编程

    2024年02月11日
    浏览(44)
  • 【FPGA】Verilog:二进制并行加法器 | 超前进位 | 实现 4 位二进制并行加法器和减法器 | MSI/LSI 运算电路

    0x00 并行加法器和减法器 如果我们要对 4 位加法器和减法器进行关于二进制并行运算功能,可以通过将加法器和减法器以 N 个并行连接的方式,创建一个执行 N 位加法和减法运算的电路。 4 位二进制并行加法器 4 位二进制并行减法器

    2024年02月05日
    浏览(57)
  • 【FPGA】Verilog:BCD 加法器的实现 | BCD 运算 | Single-level 16 bit 超前进位加法器 | 2-level 16-bit 超前进位加法器

    0x00 BCD 运算 在 BCD 中,使用4位值作为操作数,但由于只表示 0 到 9 的数字,因此只使用 0000 到 1001 的二进制数,而不使用 1010 到 1111 的二进制数(don\\\'t care)。 因此,不能使用常规的 2\\\'complement 运算来计算,需要额外的处理:如果 4 位二进制数的运算结果在 1010 到 1111 的范围

    2024年02月05日
    浏览(48)
  • FPGA学习笔记(1):使用Verilog实现常见的加法器

    本文使用VerilogHDL实现一些简单的加法器,本人水平有限,希望大佬能够多指证 Quartus Prime(18.0) Modelsim 半加器可以用于计算两个单比特二进制数的和,C表征进位输出,S表述计算的结果。 半加器的真值表 化简以后的逻辑表达式可以表达为: s = a’b+ab’ c = ab Verilog 代码块 全加

    2024年02月09日
    浏览(47)
  • Verilog 加法器/减法器

    目录 1位加法器 8位加法器 8位补码加减法器  32位补码加减法器       

    2024年02月11日
    浏览(42)
  • 【verilog】6位二进制数加法器

    1:掌握无符号二进制数加法器的设计方法。 2:掌握使用Modelsim对verilog程序进行仿真和验证的方法。 二进制加法器由全加器构成,全加器功能和电路图如下图所示。 全加器对两个1位二进制数和1位来自低位的进位做加法运算,产生1位和和1位向更高位的进位。图中(a)是全加

    2024年02月06日
    浏览(47)
  • verilog全加器和四位加法器

    半加器: 保存为half_addr.bsf之后,可以在该项目中添加半加器 全加器: 通过RTL-Viewer查看半加器和全加器 添加全加器到项目 在process里面先后执行start fitter 和start time analyzer 生成testbench模板 修改testbench文件: 添加到项目 注意在联合modelsim时让generate functinal simulation netlist值为

    2024年02月07日
    浏览(46)
  • Verilog数字系统设计——带进位的8位加法器

    试分别使用门级原语和always 语句设计带进位的8位加法器,要求编制测试模块对实现的逻辑功能进行完整的测试; 使用门级原语设计时注意先在草稿上做出该加法器的门级设计; 如有余力可以进一步使用门级原语设计出带超前进位链的8位加法器(期末有加分); 实验提交

    2024年02月15日
    浏览(49)
  • [FPGA]用Verilog写一个简单三位二进制加法器和减法器

    加法器和减法器是数字电路中的基本组件,它们可以对二进制数进行算术运算。加法器可以将两个或多个二进制数相加,得到一个和和一个进位。减法器可以将两个二进制数相减,得到一个差和一个借位。加法器和减法器可以用来实现更高级的运算,例如乘法、除法、移位等

    2024年02月04日
    浏览(45)
  • Verilog设计4位CLA加法器电路,并仿真测试

    使用Quartus+modelsim完成本次设计 对于超前进位加法器 (CLA)加法器,它不同于普通加法器。如果对于两个1024位的数字进行相加,那么普通的串行加法器因为只有算出 C x C_{x} C x ​ 才能继续计算 C x + 1 C_{x+1} C x + 1 ​ ,这会导致整体的效率非常低。如果使用超前进位加法器,那

    2024年02月04日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包