加法器设计

加法运算是最基本的算术运算,常用的加法器有:级联加法器、并行加法器、超前进位加法器和流水线加法器。

1、         级联加法器

级联加法器是由1位全加器级联构成的,本级的进位输出作为下一级的 进位输入。优点是结构简单,缺点是n位级联加法运算的延时是1位全加器的n倍。

Moduleadd_jl(sum,cout,a,b,cin);

Input[7:0] a,b;

Inputcin;

Output[7:0]sum;

Outputcout;

Full_addu0(a[0],b[0],cin,sum[0],cin1);

Full_addu1(a[1],b[1],cin1,sum[1],cin2);

Full_addu2(a[2],b[2],cin2,sum[2],cin3);

……

Full_addu7(a[7],b[7],cin7,sum[7],cout);

Endmodule

2、         数据流描述的加法器

Verilog语言中的加法运算符可以直接描述加法器。

Moduleadder(cout,sum,a,b.cin);

Input[7:0] a,b;

Inputcin;

Outputcout;

Output[7:0]sum;

Assign{cout,sum} = a+b+cin;

Endmodule

但是,借助于EDA综合软件综合出来以后,会发现其实现的电路基本也是级联实现的。

3、         超前进位加法器

超前进位加法器不想写了,位数多了的话那公式感觉好复杂。

4、         流水线加法器

两级流水线8位加法器

Moduleadder8(cout,sum,a,b,cin,clk);

Input[7:0] a,b;

Inputcin,clk;

Outputreg[7:0] sum;

Outputreg cout;

Reg[3:0]temp_a,temp_b,first_s;

Regfirst_c;

Always@ (posedge clk)

Begin

{first_c,first_s}= a[3:0]+b[3:0]+cin;

Temp_a= a[7:4]; temp_b = b[7:4];

End

Always@(posedge clk)

Begin

{cout,sum[7:4]}= temp_a +temp_b +first_c;

Sum[3:0]= first_s;

End

上面电路通过增加寄存器来实现两级流水加法器。Verilog语言中的加法运算符经过EDA软件综合之后形成的加法电路基本上都是级联实现的。当加法位数过多时,延时会很大。上面电路第一个always语句块将低四位运算出来并把结果暂存在中间寄存器中,第二个always语句块从中间寄存器取中间结果进行高四位的运算。跟八位级联加法器相比,这样就把延时几乎降低了一半。


你可能感兴趣的:(verilog设计)