• 検索結果がありません。

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

i

s

i

c

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ビット加算器の論理レイアウト

(テクノロジマッピング)

宮原克典・横山真登・國信茂郎

関連したドキュメント