行波进位加法器C语言,行波进位加法器.doc

行波进位加法器

行波进位加法器

行波进位加法器实验报告

一、 实验目的:

1、掌握行波进位加法器原理;

2、熟悉verilog 语言;

3、了解quartus II的用法。

二、 实验内容:

使用verilog 语言实现8位的行波进位加法器。

三、 实验结果:

方案二的程序:

module add_8(A,B,Cin,Sum,Cout,out);

input [7:0] A,B;

input Cin;

output [7:0] Sum;

output Cout;

output [7:1] out;

wire [7:0] Sum;

wire Cout;

wire [7:1] out;

add add1(A[0],B[0],Cin,Sum[0],out[1]);

add add2(A[1],B[1],out[1],Sum[1],out[2]);

add add3(A[2],B[2],out[2],Sum[2],out[3]);

add add4(A[3],B[3],out[3],Sum[3],out[4]);

add add5(A[4],B[4],out[4],Sum[4],out[5]);

add add6(A[5],B[5],out[5],Sum[5],out[6]);

add add7(A[6],B[6],out[6],Sum[6],out[7]);

add add8(A[7],B[7],out[7],Sum[7],Cout);

endmodule

module add(a,b,cin,sum,cout);

input a,b;

input cin;

output sum;

output cout;

reg sum;

reg cout;

always @(*)

begin

if((a+b+cin==1)||(a+b+cin==3))

sum<=1'b1;

else sum<=1'b0;

if((a+b+cin)>=2)

cout<=1'b1;

else cout<=1'b0;

end

endmodule

方案二的功能仿真

方案三的程序:

module add_8(A,B,Cin,Sum,Cout);

input [7:0] A,B;

input Cin;

output [7:0] Sum;

output Cout;

reg [7:0] Sum;

reg Cout;

reg [8:0] out;

parameter size=7;

integer i;

always @(*)

begin

out[0]=Cin;

for(i=0;i<=size;i=i+1)

add (A[i],B[i],out[i],Sum[i],out[i+1]);

end

task add;

input a,b,cin;

output sum,cout;

begin

if((a+b+cin==1)||(a+b+cin==3))

sum=1'b1;

else sum=1'b0;

if((a+b+cin)>=2)

cout=1'b1;

else cout=1'b0;

end

endtask

always @(out[8])

Cout=out[8];

endmodule

方案三的功能仿真

四、 实验结果分析:

方案一、我选择了使用模块的嵌套,即先实现一个一位的全加器add ,然后在顶层模块add_8里面调用8次add ,经过老师的点拨,我选择使用for 循环调用add 。但是因为在for 循环里面调用8次add ,就得给每一个实例化模块一个名字,而在verilog 语言里面我还不会使用字符串数组。所以这种方案没能成功。

方案二、考虑到方案一是因为不能使用for 循环给每一个调用的模块一个实例化名字,所以我变放弃了for 循环,依次把要调用的模块写出来。结果这种方案成功了,但是缺点是太繁琐,如果实现8位的还可以勉强用写8

个实例化模块,如果

要写一个64位的就万万不可取了。

方案三、我又分析了方案一失败的原因,既然实例化模块调用不可行,那么调用task 呢?因为调用task 是不需要重新再给它任务命的,所以我便尝试着把方案一中的模块调用换成相应的task 调用。结果这种方法是可取的,而且相比方案二来说,这种更简单,在处理多位全加器时尤为方便,所以我最终选择了方案三。

五、 实验心得:

通过这次实验,我对verilo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值