4.2 冗長 2 進加算器の簡略化
4.2.1 冗長 2 進加算器の構成(2)
宮原克典・横山真登・國信茂郎
冗長2進加算器と乗算器の性能評価
表4.2 変数Pi-1、被加数xi-1、加数yi-1、中間和si、中間桁上げci-1、 および変数ui、viの関係
本来3値である変数siおよびci-1を2値の変数uiおよびvi-1で表現出来ることは、加算器 がより簡単に構成できることを示している。次にその具体例を示す。
3値{-1,0,1}を持つ冗長2進表現は、表現ビット数が通常の符号なし2進表現{0,1}の2倍 必要である。以下では、一般に冗長2進数の1桁tiを2ビットの符号なし2進数(2値変数) tis、tiaとし、表4.3に示すように冗長2進数tiの -1 、0 、1 を各々tis、tiaの 11 00
01 に割り当てる。ここで、添字 s は符号ビットを、符号aは絶対値部のビットの表現 に相当している。また、ここでは、tiはxi、yi、si、ziを示す。
表4.3 冗長2進数tiと2進数tis、tiaとの対応
ti tis tia
-1 1 1
0 0 0
1 0 1
変数Piは表4.2より、変数ui、および中間和siの絶対値siaは各々式(4−1)、および表 4.1より、変数viは表4.4より、各々式(4−3)〜(4−5)で表される。なお、表4.4は変 数Pi、Pi-1、被加数xi-1、加数yi-1、中間和si、中間桁上げci-1、および変数ui、viの関係を 示し、被加数xi、加数yi、中間和si、中間桁上げciは表4.1から、変数Piは式(4−3)から、
変数viは式(4−2)の中間桁上げciおよび変数Piとの関係から、変数Pi-1は式(4−4)の中 間和siとの関係、および表4.2の中間和siとの関係から導かれる。
変数 (Pi-1)
被加数、加数 (xi-1, yi-1)
中間和 (si)
一つ下位の桁の中間桁上げ (ci-1)
変数 (ui, vi-1)
0 {0,1} {-1,0} {0,1} {0,1}
1 少なくとも一方は-1 {0,1} {-1,0} {0,1}
宮原克典・横山真登・國信茂郎
s i s i
i x y
P (4−3)
1 i a i
i s P
u
(4−4)
a i a i a
i x y
s
a i a i s i s i i i
i
s P x y x y
v
1 (4−5)
表4.4 変数Pi-1、被加数xi-1、加数yi-1、中間和si、中間桁上げci-1、 および変数ui、viの関係
被加数 (xis,xia)
加数 (yis,yia)
中間桁上げ (ci)
中間和 (si)
変数 (Pi)
変数 (vi)
変数 (Pi-1)
変数 (ui)
0 0
0 1 0 1 0 1 0 0 0 1
1 1
0 1 0 0 0 1 1 1 0 1 0 1
0 0 0 1 0 0 0 1 0 0 1 0
0 0
0 0 0 0 0 0 0 0 0 0
1 1
0 0
0 1 1 1 0 0 0 0 1 1
1 1
0 0
1 1 0 1 0 0 0 0 1 1
1 1
0 0 1 1 0 0 1 1 1 1 0 1
1 1 0 0 1 1 0 1 1 0 1 0
0 0
1 1 1 1 1 1 0 0 1 0
1 1
冗長2進加算器と乗算器の性能評価
さらに、和ziは、
z
is
ic
i 1および式(4−1)、式(4−2)から得られる。1 i i s
i u v
z
(4−6)
1 i i a
i u v
z
式(4−3)〜(4−6)から冗長2進加算器は図4.3のように表せる。図からも分かるよう に、図4.2と比較してみるとゲート数が大幅に削減出来ている。これは本来3値である冗長 2進加算器の内部変数Pi、ui、およびviが2値で実現出来たことに由来している。前述した よう冗長2進加算器と同様に、和zi はxi , yi , xi-1, yi-1 , xi -2, yi-2の6つのみから決まる。これ は信号伝搬が 3個の冗長2進加算器のみで決定されることを意味し、やはり計算時間はビ ット長に依存せず一定となる。
zia
zis
Vi Vi‑1
Ui
Pi
Sia
Pi‑1
yia
xia
yis
xis
図4.3 新規な冗長2進加算器の論理回路図
宮原克典・横山真登・國信茂郎
/*新規な1ビット長冗長2進加算器*/
module RBA(x,y,z,pin,vin,pout,vout);
input [1:0] x,y;
input pin,vin;
output [1:0] z;
output pout,vout;
wire w0,w1,w2,w3,w4,w5,w6;
assign pout = ~( x[1] | y[1]), w0 = ~( x[1] & y[1]), w1 = x[0] ^ y[0], w2 = w0 & x[0] & y[0], w3 = w1 & pin,
vout = ~(w2 | w3), w4 = ~(w1 ^ pin), w5 = ~(w4 & vin), w6 = w4 | vin, z[1] = ~w5,
z[0] = ~(w5 & w6);
endmodule
/*1ビット長冗長2進加算器による4 ビット加算器*/
module SD2_4_adder(x,y,z,pin,vin,pout,vout);
input [7:0] x,y;
input pin,vin;
output [7:0] z;
output pout,vout;
wire w0,w1,w2,w3,w4,w5,w6,w7;
SD2_adder i0(.x(x[1:0]),.y(y[1:0]),.z(z[1:0]),.pin(pin)
,.vin(vin),.pout(w0),.vout(w1));
冗長2進加算器と乗算器の性能評価 SD2_adder i1(.x(x[3:2]),.y(y[3:2]),.z(z[3:2]),.pin(w0)
,.vin(w1),.pout(w2),.vout(w3));
SD2_adder i2(.x(x[5:4]),.y(y[5:4]),.z(z[5:4]),.pin(w2)
,.vin(w3),.pout(w4),.vout(w5));
SD2_adder i3(.x(x[7:6]),.y(y[7:6]),.z(z[7:6]),.pin(w4)
,.vin(w5),.pout(pout),.vout(vout));
endmodule
/*1ビット長冗長2進加算器による16ビット加算器*/
module SD2_16_adder(x,y,z,pin,vin,pout,vout);
input [31:0] x,y;
input pin,vin;
output [31:0] z;
output pout,vout;
wire w0,w1,w2,w3,w4,w5,w6,w7;
SD2_4_adder i0(.x(x[7:0]),.y(y[7:0]),.z(z[7:0]),.pin(pin)
,.vin(vin),.pout(w0),.vout(w1));
SD2_4_adder i1(.x(x[15:8]),.y(y[15:8]),.z(z[15:8]),.pin(w0)
,.vin(w1),.pout(w2),.vout(w3));
SD2_4_adder i2(.x(x[23:16]),.y(y[23:16]),.z(z[23:16]),.pin(w2) ,.vin(w3),.pout(w4),.vout(w5));
SD2_4_adder i3(.x(x[31:24]),.y(y[31:24]),.z(z[31:24]),.pin(w4)
,.vin(w5),.pout(pout),.vout(vout));
endmodule
宮原克典・横山真登・國信茂郎
図4.4 新規な1ビット長冗長2進加算器のRTL図
冗長2進加算器と乗算器の性能評価
図4.5 新規な1ビット長冗長2進加算器の論理レイアウト(テクノロジマッピング)
宮原克典・横山真登・國信茂郎
図4.6 1ビット長冗長2進加算器による16ビット加算器のRTL図
冗長2進加算器と乗算器の性能評価
図4.7 1ビット長冗長2進加算器による16ビット加算器の論理レイアウト
(テクノロジマッピング)
宮原克典・横山真登・國信茂郎