数字IC经典电路(1)——经典加法器的实现(加法器简介及Verilog实现)

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

写在前面的话

加法器是数字系统最基础的计算单元,用来产生两个数的和,加法器是以二进制作运算。负数可用二的补数来表示,减法器也是加法器,乘法器可以由加法器和移位器实现。加法器和乘法器由于会频繁使用,因此加法器的速度也影响着整个系统的计算速度。对加法器的设计也一直在更新迭代,反观数字IC初学者,往往只是了解个全加器和半加器,而对一些经典的加法器类型和实现方式却很少了解。

经典加法器

8bit并行加法器

并行加法器就是利用多个全加器实现两个操作数各位同时相加。并行加法器中全加器的个数与操作数的位数相同,常用的并行加法器有行波进位加法器、超前进位加法器、进位选择加法器等。容易实现、运算速度快,但是耗用资源多,当位宽较宽时,耗用的资源会非常大。

Verilog代码:

// Verdion: v1.0
// Description: 8位并行加法器
// -----------------------------------------------------------------------------
module parallel_adder (
	input [7:0]			din_a 	,    	// data in a
	input [7:0]			din_b 	, 		// data in b
	input 				cin 	,		// carry in
	output wire [7:0]	sum 	, 		// summation of a ,b
	output wire  		cout 			// carry out 
);


assign {cout,sum}	=	din_a + din_b +	cin ;

endmodule 

这里使用的是数据流描述方式,只用了一条语句,不能控制综合的具体电路。

Quartus RTL图
用到了两个加法器。
级联加法器,数字IC设计,fpga开发

Quartus Post mapping图级联加法器,数字IC设计,fpga开发

Vivado synthesis图级联加法器,数字IC设计,fpga开发

这里可以看出,相同的设计,在不同综合工具中综合出的电路结构是不同的,感兴趣的同学可以学习综合相关的知识点。后续也会把DC综合的教程笔记分享出来,这个可以在笔面前再了解,大部分同学都很难接触到流片相关的软件,在学校稍微熟悉就好。

8bit超前进位加法器

超前进位加法器是由全加器发展而来,目的是提高运算速度。当加法器级数提高时,高位的进位信号需要从低级逐级传递,为了缩短这个时间,我们可以从低级的输入信号确定一个组合逻辑电路,唯一确定一个高位的进位信号,从而提高运行速度。超前进位加法器也称为快速进位加法器,目的就是缩短进位信号生成的时间。
Verilog代码:

// -----------------------------------------------------------------------------
// Copyright (c) 2014-2022 All rights reserved
// -----------------------------------------------------------------------------
// Author : HFUT904  1320343336@qq.com
// File   : Carry_Look_ahead_adder.v
// Create : 2022-11-19 16:15:31
// Revise : 2022-11-19 16:15:31
// Editor : 0078
// Verdion: v1.0
// Description: 8bit 超前进位加法器
// -----------------------------------------------------------------------------
module Carry_Look_ahead_adder (
	input [7:0] 		din_a 	,    	// data in a
	input [7:0] 		din_b 	, 		// data in b
	input 				cin 	, 	 	// carry in 
	output  wire 		cout 	, 		// carry out 
	output 	wire [7:0]	sum 			// summation of a ,b
);

wire [7:0]	G  	;
wire [7:0]	P 	;
wire [7:0] 	C 	;


assign G[0] 	= din_a[0] & din_b[0]	;		//bit 0
assign P[0]		= din_a[0] | din_b[0]	;
assign C[0]		= cin 					;
assign sum[0]	= G[0] ^ P[0] ^ C[0]	;


assign G[1] 	= din_a[1] & din_b[1]	;		//bit 1
assign P[1]		= din_a[1] | din_b[1]	;
assign C[1]		= G[0] | (P[0] & cin) 	;
assign sum[1]	= G[1] ^ P[1] ^ C[1]	;


assign G[2] 	= din_a[2] & din_b[2]	;		//bit 2
assign P[2]		= din_a[2] | din_b[2]	;
assign C[2]		= G[1] | (P[1] & C[1]) 	;
assign sum[2]	= G[2] ^ P[2] ^ C[2]	;


assign G[3] 	= din_a[3] & din_b[3]	;		//bit 3
assign P[3]		= din_a[3] | din_b[3]	;
assign C[3]		= G[2] | (P[2] & C[2]) 	;
assign sum[3]	= G[3] ^ P[3] ^ C[3]	;

assign G[4] 	= din_a[4] & din_b[4]	;		//bit 4
assign P[4]		= din_a[4] | din_b[4]	;
assign C[4]		= G[3] | (P[3] & C[3]) 	;
assign sum[4]	= G[4] ^ P[4] ^ C[4]	;


assign G[5] 	= din_a[5] & din_b[5]	;		//bit 5
assign P[5]		= din_a[5] | din_b[5]	;
assign C[5]		= G[4] | (P[4] & C[4]) 	;
assign sum[5]	= G[5] ^ P[5] ^ C[5]	;


assign G[6] 	= din_a[6] & din_b[6]	;		//bit 6
assign P[6]		= din_a[6] | din_b[6]	;
assign C[6]		= G[5] | (P[5] & C[5]) 	;
assign sum[6]	= G[6] ^ P[6] ^ C[6]	;

assign G[7] 	= din_a[7] & din_b[7]	;		//bit 7
assign P[7]		= din_a[7] | din_b[7]	;
assign C[7]		= G[6] | (P[6] & C[6]) 	;
assign sum[7]	= G[7] ^ P[7] ^ C[7]	;

assign cout = G[7] | (P[7] & C[7])		;
endmodule 

Quartus RTL图
用到了两个加法器。
级联加法器,数字IC设计,fpga开发

Quartus Post mapping图
使用的资源明显要高于普通的并行加法器。
级联加法器,数字IC设计,fpga开发

8bit流水线加法器

流水线设计可以有效提高工作频率,核心就是面积换速度。

Verilog代码:

// -----------------------------------------------------------------------------
// Copyright (c) 2014-2022 All rights reserved
// -----------------------------------------------------------------------------
// Author : HFUT90S  1320343336@qq.com
// File   : Pipeline_adder.v
// Create : 2022-11-21 15:40:45
// Revise : 2022-11-21 15:40:45
// Editor : 0078
// Verdion: v1.0
// Description: 8bit 流水线加法器
// -----------------------------------------------------------------------------
module Pipeline_adder (
	input [7:0]			din_a		,   // data in a
	input [7:0]			din_b		, 	// data in b
	input 				cin 		,	// Carry in
	input 				clk 		,	// Clock
	output 	reg [7:0]	sum 		,	// Sum
	output	reg 		cout 			// Carry out	
);

	reg 	[7:0]	a_t ;
	reg 	[7:0]	b_t ;

//carry in & out
	reg 	ci_t 	;
	reg 	p1co 	;
	reg 	p2co 	;
	reg 	p3co 	;

	reg [5:0]	p1a ;
	reg [5:0]	p1b ;
	reg [1:0] 	p1s ;

	reg [3:0]	p2a ;
	reg [3:0] 	p2b ;
	reg [3:0]	p2s ;

	reg [1:0] 	p3a ;
	reg [1:0]	p3b ;
	reg [5:0]	p3s ;


always@(posedge clk) begin
		a_t 	<=   din_a 	;
		b_t 	<= 	 din_b 	;
		ci_t 	<=	 cin 	;
end


always@(posedge  clk )	begin
	{p1co,p1s}  <= a_t[1:0]	+ b_t[1:0] + ci_t	;
	p1a 		<= a_t[7:2]	;
	p1b 		<= b_t[7:2]	;
end


always@(posedge  clk )	begin
	{p2co,p2s}  <= p1a[1:0]	+ p1b[1:0] + p1co + p1s	;
	p2a 		<= p1a[5:2]	;
	p2b 		<= p1b[5:2]	;
end

always@(posedge  clk )	begin
	{p3co,p3s}  <= p2a[1:0]	+ p2b[1:0] + p2co + p2s	;
	p3a 		<= p1a[3:2]	;
	p3b 		<= p1b[3:2]	;
end

always@(posedge  clk )	begin
	{cout,sum}		<=	p3a[1:0] + p3b[1:0]	+ p3co + p3s ;
end

endmodule 

Quartus RTL图
用到了四个2bit加法器以及中间数据缓存。
级联加法器,数字IC设计,fpga开发
Quartus Post mapping图
这个资源的使用就更多,更大的面积换取更高的运行速度。
级联加法器,数字IC设计,fpga开发

8bit级联加法器

级联加法器的结构简单,但N位级联加法器的延时是一位全加器的N倍,延时主要是由于进位信号级联造成的,避免在高性能要求的设计中采用该结构。
Verilog代码:


// -----------------------------------------------------------------------------
// Copyright (c) 2014-2023 All rights reserved
// -----------------------------------------------------------------------------
// Author : HFUT90S  1320343336@qq.com
// File   : Cascade_adder.v
// Create : 2023-03-20 10:51:14
// Revise : 2023-03-20 10:51:14
// Editor : 0078
// Verdion: v1.0
// Description: 8bit 级联加法器
// -----------------------------------------------------------------------------
module Cascade_adder(

	input  	[7:0] 		a 		, 	 	//data in a
	input 	[7:0]		b 		, 		//data in b
	input 				cin 	,		//carry in
	output wire  		cout 	,		//carry out
	output wire [7:0]	sum 			//sum
	);

//signal 
wire cin1 	;
wire cin2 	;
wire cin3 	;
wire cin4 	;
wire cin5 	;
wire cin6 	;
wire cin7 	;

// inst cascade desc

full_add1 f0(
	.a 		(a[0]	),
	.b 	 	(b[0]	),
	.cin  	(cin 	),
	.cout 	(cin1 	),
	.sum 	(sum[0] )
	);

full_add1 f1(
	.a 		(a[1]	),
	.b 	 	(b[1]	),
	.cin  	(cin1 	),
	.cout 	(cin2 	),
	.sum 	(sum[1] )
	);

full_add1 f2(
	.a 		(a[2]	),
	.b 	 	(b[2]	),
	.cin  	(cin2 	),
	.cout 	(cin3 	),
	.sum 	(sum[2] )
	);

full_add1 f3(
	.a 		(a[3]	),
	.b 	 	(b[3]	),
	.cin  	(cin3 	),
	.cout 	(cin4 	),
	.sum 	(sum[3] )
	);


full_add1 f4(
	.a 		(a[4]	),
	.b 	 	(b[4]	),
	.cin  	(cin4 	),
	.cout 	(cin5 	),
	.sum 	(sum[4] )
	);

full_add1 f5(
	.a 		(a[5]	),
	.b 	 	(b[5]	),
	.cin  	(cin5 	),
	.cout 	(cin6 	),
	.sum 	(sum[5] )
	);

full_add1 f6(
	.a 		(a[6]	),
	.b 	 	(b[6]	),
	.cin  	(cin6 	),
	.cout 	(cin7 	),
	.sum 	(sum[6] )
	);

full_add1 f7(
	.a 		(a[7]	),
	.b 	 	(b[7]	),
	.cin  	(cin7 	),
	.cout 	(cout 	),
	.sum 	(sum[7] )
	);

endmodule 

其中,8bit级联加法器需要使用8个单bit的全加器。其描述如下:


// -----------------------------------------------------------------------------
// Copyright (c) 2014-2023 All rights reserved
// -----------------------------------------------------------------------------
// Author : HFUT90S  1320343336@qq.com
// File   : fuu_add1.v
// Create : 2023-03-20 11:06:52
// Revise : 2023-03-20 11:06:52
// Editor : 0078
// Verdion: v1.0
// Description: 1bit full adder
// -----------------------------------------------------------------------------
module full_add1 (
	input  		a 	,    	// data in a
	input  		b 	, 		// data in b
	input 		cin ,  		// carry in 
	output 		sum ,		// sum
	output 		cout 		// carry out
);

//signal 
wire 	s1 	;
wire 	m1 	;
wire 	m2 	;
wire 	m3 	;

and (m1,a,b 	),
	(m2,b,cin   ),
	(m3,a,cin 	);

xor (s1,a,b 	),
	(sum,s1,cin );

or (cout,m1,m2,m3);

endmodule 

Quartus RTL图
用到了8个加法器。
级联加法器,数字IC设计,fpga开发
单bit全加器。
级联加法器,数字IC设计,fpga开发
Quartus Post mapping图
级联加法器,数字IC设计,fpga开发

总结

级联加法器,数字IC设计,fpga开发文章来源地址https://www.toymoban.com/news/detail-620178.html

到了这里,关于数字IC经典电路(1)——经典加法器的实现(加法器简介及Verilog实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 运算放大电路(三)-加法器

    加法器 由虚短知: V- = V+ = 0 ……a 由虚断及基尔霍夫定律知,通过R2与R1的电流之和等于通过R3的电流,故 (V1 – V-)/R1 + (V2 – V-)/R2 = (Vout – V-)/R3 ……b 代入a式,b式变为 V1/R1 + V2/R2 = Vout/R3 如果取 R1=R2=R3 则上式变为 Vout=V1+V2 这就是传说中的加法器了。 因为虚断,运放同向端没

    2024年02月04日
    浏览(56)
  • VHDL语言基础-组合逻辑电路-加法器

    目录 加法器的设计: 半加器: 全加器: 加法器的模块化: 四位串行进位全加器的设计: 四位并行进位全加器: 串行进位与并行进位加法器性能比较: 8位加法器的实现: 在数字系统中,常需要进行加、减、乘、除等运算,而乘、除和减法运算均可变换为加法运算,故加法

    2024年02月04日
    浏览(46)
  • FPGA实验一:层次法设计组合电路(加法器)

    目录 一、实验目的 二、实验要求 三、实验代码 四、实验结果及分析

    2024年02月12日
    浏览(46)
  • 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)
  • Verilog快速入门(8)—— 4bit超前进位加法器电路

    (1) 四选一多路器 (2)异步复位的串联T触发器 (3)奇偶校验 (4)移位运算与乘法 (5)位拆分与运算 (6)使用子模块实现三输入数的大小比较 (7)4位数值比较器电路 (8)4bit超前进位加法器电路 (9)优先编码器电路① (10)用优先编码器①实现键盘编码电路 (11)8线-3线优先编码器 (12)使用8线-3线

    2024年02月04日
    浏览(47)
  • 数字IC经典电路(4)——经典滤波器的实现(滤波器简介及Verilog实现)

    数字滤波器一般可以分为两类:有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器。 在Verilog综合方面,通常可以实现四种数字滤波器: 基于时域采样的FIR滤波器(Time Domain Sampling FIR Filter) 快速傅里叶变换(FFT)算法实现的FIR滤波器(FFT-based FIR Filter) 直接IIR滤波器

    2024年02月09日
    浏览(45)
  • 零基础学模拟电路--3.同相放大器、反相放大器、加法器、减法器、积分器、微分器

    基于上一节所讲的虚短和虚断,我们可以搭建出这些电路: ​ 同相放大器,反相放大器,加法器,减法器,积分器,微分器,电压跟随器。 接下来,我会运用虚断和虚断推导几个典型的电路。 其余的电路,希望大家能自己推导一遍 关于微分器和积分器,这里还得补充一个

    2024年02月07日
    浏览(51)
  • verilog手撕代码2——各种加法器介绍——真值表、表达式、电路图

    2023.4.25 两个数直接相加,无进位,真值表如下 两个数和进位一起相加,根据真值表画出卡诺图,对表达式进行化简 用两个半加器来组成一个全加器 原理 : N bit的加法器由N个1 bit的全加器组成 。从低位开始,逐位相加, 每一bit需要等待前面计算出来得到进位,才能进行下一

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

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

    2024年02月15日
    浏览(50)
  • 数字逻辑---头歌实训作业---加法器设计(Logisim)

    第1关:半加器设计 如有任何不解或者想要答案代码,可在评论区喊话我哦,希望我的答案对你有帮助,点个关注再走吧,感谢!!! 本关卡最终答案:   任务描述 本关任务:利用在Logisim中的“组合逻辑分析”工具自动生成半加器电路。 相关知识 半加器电路是指对两个输

    2023年04月13日
    浏览(53)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包