赞
踩
引用《电子技术基础(数字部分)》的说法:
1.全加器能进行被加数、加数和来自低位的进位信号相加,并根据结果给出该位的进位信号。
用逻辑表达式可描述为:
S
=
A
⊕
B
⊕
C
S = A\oplus B \oplus C
S=A⊕B⊕C
C
o
u
t
=
A
B
+
(
A
⊕
B
)
C
i
n
C_{out} = AB + (A \oplus B)C_{in}
Cout=AB+(A⊕B)Cin
2.半加器仅考虑两个加数本身,而没有考虑低位进位的加法运算。由真值表可以得到逻辑表达式:
S
=
A
ˉ
B
+
A
B
ˉ
S = \bar{A}B + A\bar{B}
S=AˉB+ABˉ
C
=
A
B
C = AB
C=AB
设计思想:按照正常的加法运算逻辑,由低位向高位依次进行计算,进位依次从低位传递到高位。
公示推导:
3.架构图:
加法器整体由全加器串联构成,每一位的计算对应一个全加器,进位输入由相邻低位产生。
关键路径
图中红色路径为此加法器的关键路径,加法器的延迟和操作数尾数成正比。
module adder_TWC //行波进位加法器 #(parameter N = 64) ( input [N-1:0]A,B, input C_in, output [N-1:0]Y, output C_out //Y = (A + B) % (1<<N) //C = (A + B)>>N ); wire [N:0]C_mid; assign C_mid[0] = C_in; assign C_out = C_mid[N]; generate genvar i; for(i=0;i<N;i=i+1) begin: add_unit adder_full a1(A[i] , B[i] ,C_mid[i] ,Y[i] , C_mid[i+1] ); end endgenerate endmodule module adder_full( input A,B,C_in, output S,C_out ); assign C_out = (A&B)|((A^B)&C_in); assign S = A ^ B ^ C_in; endmodule
module adder_TWC_tb(); reg [63:0]a,b; reg cin; wire cout; wire [63:0]y; adder_TWC T1 (.A(a),.B(b),.C_in(cin),.Y(y),.C_out(cout)); integer i = 0; initial begin cin = 1; for(i=0;i<16;i=i+1) begin a = $random; b = $random; #10; end end endmodule
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。