杭电计算机组成实验2(二)超前进位加法器设计实验

已开源在GitHub上,欢迎各位大佬给Star

仓库地址
网站

实验内容

1. 掌握运用Verilog HDL进行数据流描述与建模的技巧和方法,掌握模块调用与实例引用的方法
2. 掌握超前进位加法器的原理与设计方法

解决方法

1. 分析4位的二进制全加器的输入输出,内部为超前进位逻辑
2. 首先,要知道超前进位逻辑与行波进位加法器的区别
3. 行波进位加法器需要像链子一样,等第一位算完,再算第二位,而超前进位加法器是四位同时,第二位包括了第一位的计算部分,从而达到消除依赖的关系
4. 代码展示:

顶层模块

module second_experiment_first(A,B,F,C4,C0);
input [3:0]A,B;
input C0;
output [3:0]F;
output C4;
	assign G0 = A[0] & B[0];
	assign P0 = A[0] | B[0];
	assign G1 = A[1] & B[1];
	assign P1 = A[1] | B[1];
	assign G2 = A[2] & B[2];
	assign P2 = A[2] | B[2];
	assign G3 = A[3] & B[3];
	assign P3 = A[3] | B[3];
	assign C1 = G0 | P0&C0;
	assign C2 = G1 | P1&G0 | P0&P1&C0;
	assign C3 = G2 | P2&G1 | P2&P1&G0 | P2&P1&P0&C0;
	assign C4 = G3 | P3&G2 | P3&P2&G1 | P3&P2&P1&G0 | P3&P2&P1&P0&C0;
	assign F[0] = A[0]^B[0]^C0;
	assign F[1] = A[1]^B[1]^C1;
	assign F[2] = A[2]^B[2]^C2;
	assign F[3] = A[3]^B[3]^C3;
endmodule

测试模块

module second_experiment_test;
	// Inputs
	reg [3:0] A;
	reg [3:0] B;
	reg C0;
	// Outputs
	wire [3:0] F;
	wire C4;
	second_experiment_first uut (
		.A(A), 
		.B(B), 
		.F(F), 
		.C4(C4), 
		.C0(C0)
	);
	initial begin
		A = 4'b1000;
		B = 4'b1000;
		C0 = 1;
		#100;
		A = 4'b1001;
		B = 4'b1001;
		C0 = 1;
		#100;
		A = 4'b1011;
		B = 4'b1011;
		C0 = 1;
	end    
endmodule

特别注意

题主在网上看到一份报告中的代码并不是把所有的运算拿过来的,而是把C1赋给C2这样做的,assign这种组合逻辑电路,是并行执行,这样的方法不一定可行

代码地址

代码地址

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XdpCs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值