首页 > 编程知识 正文

加法器实现减法,行波进位的补码加法/减法器原理

时间:2023-05-06 11:33:06 阅读:125079 作者:1472

行波进位加法器

行波进位加法器

行波进位加法器实验报告

一、实验目的:

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

2、熟悉verilog语言

3、了解quartus II的使用方法。

二、实验内容:

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

三、实验结果:

方案2中的步骤:

模块add _8(a、b、Cin、Sum、Cout、out );

input [7:0] A,b;

输入CIN;

output [7:0] Sum;

输出计数;

output [7:1] out;

wire [7:0] Sum;

wire Cout;

wire [7:1] out;

addadd1(a[0],B[0],Cin,Sum[0],out[1];

addadd2(a[1]、B[1]、out[1]、Sum[1]、out[2];

addadd3(a[2]、B[2]、out[2]、Sum[2]、out[3];

addadd4(a[3]、B[3]、out[3]、Sum[3]、out[4];

addadd5(a[4]、B[4]、out[4]、Sum[4]、out[5];

addadd6(a[5]、B[5]、out[5]、Sum[5]、out[6];

addadd7(a[6]、B[6]、out[6]、Sum[6]、out[7];

addadd8(a[7]、B[7]、out[7]、Sum[7]、Cout );

最终模块

模块添加(a、b、cin、sum、cout );

输入a,b;

输入CIN;

输出和;

输出计数;

reg sum;

reg cout;

always@(* ) ) )。

比根

if () aBCIN==1)aBCIN==3) )

sum=1'b1;

else sum=1'b0;

(if(aBCIN )=2) ) ) ) ) ) ) ) ) ) ) ) )。

cout=1'b1;

else cout=1'b0;

结束

最终模块

方案2的功能模拟

方案3步骤:

模块添加_8(a、b、Cin、Sum、Cout );

input [7:0] A,b;

输入CIN;

output [7:0] Sum;

输出计数;

reg [7:0] Sum;

reg Cout;

reg [8:0] out;

参数大小=7;

integer i;

always@(* ) ) )。

比根

out[0]=Cin;

for(I=0; i=size; i=i 1)

add(a[I],B[i],out[i],Sum[i],out[i 1];

结束

任务添加;

输入a、b、cin;

输出和,cout;

比根

if () aBCIN==1)aBCIN==3) )

sum=1'b1;

else sum=1'b0;

(if(aBCIN )=2) ) ) ) ) ) ) ) ) ) ) ) )。

cout=1'b1;

else cout=1'b0;

结束

结束任务

always @(out[8] )

Cout=out[8]

最终模块

方案3的功能模拟

四、实验结果分析:

案一,我选择了使用模块嵌套。 也就是说,首先实现了一位全加器add,然后在顶级模块add_8中调用add_8次,经过老师的点击,选择使用for循环调用add。 但是,如果在for循环中调用add次,则必须为每个实例化模块命名,但在verilog语言中还不能使用字符串数组。 所以这个方案没有成功。

因为方案2、方案1无法使用for循环对调用的每个模块进行实例化命名,所以我们认为必须放弃for循环,按顺序写要调用的模块。 毕竟这个方案成功了,但是缺点太复杂了,实现8位的东西也可以勉强写8

个实例化模块,如果

写64位的东西是绝对不可取的。

方案三,我还分析了方案一失败的原因,不能实例化模块调用,要调用task吗? 由于调用task不需要赋予任务生命,因此我们尝试用相应的task调用替换了方案1中的模块调用。 毕竟,这种方法是可取的,而且比方案2更简单,在处理多位全加法器时特别有用,所以我最终选择了方案3。

五、实验心得:

通过这次实验,我得到了贝瑞洛

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。