Verilog设计4位CLA加法器电路,并仿真测试

设计4位CLA加法器电路,并仿真测试

使用Quartus+modelsim完成本次设计

在这里插入图片描述

分析

对于超前进位加法器 (CLA)加法器,它不同于普通加法器。如果对于两个1024位的数字进行相加,那么普通的串行加法器因为只有算出 C x C_{x} Cx才能继续计算 C x + 1 C_{x+1} Cx+1,这会导致整体的效率非常低。如果使用超前进位加法器,那么所有的 C x C_{x} Cx会同时计算得到,每级进位由附加的组合电路产生,高位的运算不需要等待低位运算完成,大大加快了整体的运行速度。对于每一个进位 C x C_{x} Cx的计算方法如图提示可以轻松得到。

题目中也给出了端口定义,及输入a[3:0],b[3:0],c0;输出s[3:0],c4

代码实现

//4bit CLA
module CLA4(
	input  [3:0] a,
	input  [3:0] b,
	input  c0,
	output [3:0] s,
	output c4
);
	wire   [4:0] g,p,c;
	assign c[0] = c0;
	assign p 	= a^b;
	assign g 	= a&b;
	assign c[1] = g[0]|(p[0]&c[0]);
	assign c[2] = g[1]|(p[1]&(g[0]|(p[0]&c[0])));
	assign c[3] = g[2]|(p[2]&(g[1]|(p[1]&(g[0]|(p[0]&c[0])))));
	assign c[4] = g[3]|(p[3]&(g[2]|(p[2]&(g[1]|(p[1]&(g[0]|(p[0]&c[0])))))));
	assign s  	= p[3:0]^c[3:0];
	assign c4 	= c[4];

endmodule 

Testbench

编写testbench对CLA4进行验证,选取部分值进行测试。

`timescale 1 ns/ 1 ns
module CLA4_vlg_tst();
// constants                                           
// general purpose registers
// test vector input registers
reg [3:0] a;
reg [3:0] b;
reg c0;
// wires                                               
wire c4;
wire [3:0]  s;

// assign statements (if any)                          
CLA4 i1 (
// port map - connection between master ports and signals/registers   
	.a(a),
	.b(b),
	.c0(c0),
	.c4(c4),
	.s(s)
);
initial                                                
begin      
                                            
	a 		 = 4'b1111;
	b 	 	 = 4'b1111;
	c0 	 = 1'b0;
	
	#10 a  = 4'b1010;
	#10 c0 = 1'b1;
	#10 b  = 4'b0100;
	#10 b  = 4'b0101;
	#10 b  = 4'b0110;
	#10 b  = 4'b0111;
	#50 $stop;
                  
end    
    
initial 
	$monitor($time,": a+b+cin=%b+%b+%b=%b%b",a,b,c0,c4,s);
                                                 
endmodule

结果

对代码进行编译,查看RTL Viewer,观察电路结构如下图所示,通过对比,与题目中的提示相同
在这里插入图片描述

在modelsim中观察波形以及monitor输出如下图所示,结果显示 a + b + c 0 = { c 4 , s } a+b+c0=\{c4,s\} a+b+c0={c4,s},及实现了目标功能
在这里插入图片描述

下图位monitor输出结果,均为2进制表示最右边结果为 { c 4 , s } \{c4,s\} {c4,s},及进位加4bit结果
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值