計算機アーキテクチャstimai/r02ca/comparch06.pdfhalf adder ai bi c s 半加算器 half...
TRANSCRIPT
AND(論理積)
a b ab
0 0 0
0 1 0
1 0 0
1 1 1
論理関数,論理回路そしてディジタル回路(計算機のハードウェア)
a
b
a・b =ab
NOT(論理否定)
a
0 1
1 0
a
OR(論理和)
a b a+b
0 0 0
0 1 1
1 0 1
1 1 1
a
b
a+b a
a
Ex-OR(排他的論理和):Exclusive-OR
a b
0 0 0
0 1 1
1 0 1
1 1 0
a
b
a b
a b
a
bAND,OR,NOTで実現
加算の原理と論理関数
0
+ 0
0
0
+ 1
1
1
+ 0
1
1
+ 1
1 0
キャリー(carry)
0
+ 0
0 0
0
+ 1
0 1
1
+ 0
0 1
1
+ 1
1 0
キャリー(carry)
キャリー(carry)
キャリー(carry)
キャリー(carry)
A
+ B
C S
A B S C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
2入力 2出力半加算器half adder
A
B
C
S
1つのハードウェアとしてまとめる
Ai
+ Bi
C S
Ci-1 Ai Bi Si Ci
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
An An-1 ・・Ai・・ A1 A0
Bn Bn-1 ・・Bi・・ B1 B0(+
S
+ Ci-1
Ci2 Si
上位への桁上げ
その桁の和
その桁の和(一時的)
下位からの桁上げ
1回目の加算
2回目の加算
Ai
+ Bi
C S
An An-1 ・・Ai・・ A1 A0
Bn Bn-1 ・・Bi・・ B1 B0(+
S
+ Ci-1
Ci2 Si
上位への桁上げ
1回目の加算
2回目の加算
半加算器half adder
Ai
Bi
C
S
半加算器half adder
Ci-1
Ci2
Si
C+Ci2
全加算器 full adder
3入力2出力のハードウェア
An-1 ・・・・ Ai ・・・ A1 A0
Bn-1 ・・・・ Bi ・・・ B1 B0
nビット初期値?
被加数
加数
Sn-1 ・・・・ Si ・・・ S1 S0加算結果
1桁以前(直前)のキャリーを記憶
C
直列加算
1ビットづつ下位から順番に加算
full adder : 1個下位の桁から
上位の桁へその桁の被加数&加数
その桁の和
キャリーの流れ
full adder
1ビット(1桁に相当)の加算にk時間(数マイクロ秒=kμSec)かかるとして,nビットの直列加算には,n×kμSecの所要時間が必要
1ビット分の加算が短時間でも,ビット数が増大すれば全体の処理時間も増大する!
x=ビット数(n)
処理時間
直列加算
y=kx
ビット数
処理時間
並列加算
y≒k
処理速度の改善
y
x
An-1 ・・・・ Ai ・・・ A1 A0
Bn-1 ・・・・ Bi ・・・ B1 B0
・・・・
・・・・・
・・・・
SiSn-1 CiCn-1 S0C0
・・・・
nビット
?
被加数
加数
Sn-1 ・・・・ Si ・・・ S1 S0
並列加算
nビット同時に並列加算
加算結果
CCarry
ripple carry
×n個
下位の桁から
上位の桁へ
その桁の被加数&加数
桁の和
full adder
full adder : n個
キャリーの流れ
脈流のように伝播するキャリー (その現象)
各桁の計算は並列に加算可能 直列加算より高速処理可能
問題は,・・・
ripple carry 脈流のように伝播するキャリー (その現象)
上位の桁になるほど,下位から伝播するキャリーの到着が遅くなり結果として,上位の加算処理の値が確定するのに時間を要する
ripple carryへの対策が並列処理の成否を決定(高速処理を実現)する要因
Ci-1 Ai Bi Si Ci
0 0 0 0 0
0 0 1 1 0
0 1 0 1 0
0 1 1 0 1
1 0 0 1 0
1 0 1 0 1
1 1 0 0 1
1 1 1 1 1
)(111 iiiiiiiiiiiiii BABABACBACBACC
)()()( 1111 iiiiiiiiiiiiiiiii BACBABABABACBACCC
)(11 iiiiiii BACBACC
キャリーを解析して,高速化を図る
論理式の最小化
)()( 1111 iiiiiiiiiiiiiiiii BABABACBACBACBACC
キャリーはその桁で発生するか,下位からのものを上位に伝えるか
この式からも,キャリーが下位から上位の桁へ伝播(あるいは伝達)していることが確認される
iii GBA : generator
iii TBA : transmitter or propagator
上位へのキャリー発生因子
下位から上位へのキャリー伝達因子
この論理式を基に,キャリーの伝達を予見する(carry look-ahead)特殊ハードウェアを構成
32211221111
211111
))()(())(()(
))(()()(
iiiiiiiiiiiiiiiiiii
iiiiiiiiiiiiiiiii
CBABABABABABABABABA
CBABABABABACBABAC 繰り返し適用…
上位の桁でも伝播するキャリーを予見し並列加算を可能にする
01321321211
32121211211
CTTTTTGTTTGTTGTG
CTTTGTTGTTGTGCTTGTGC
iiiiiiiiiiiiii
iiiiiiiiiiiiiiiiiiii
(2*n+1)入力(n+2)出力 のcarry look-ahead用ハードウェア
iii GBA iii TBA
iC
niC
11,, niniii BABA
1niC
*G*T
http://www.chipcenter.com/circuitcellar/may00/ancil-0500/c0500lr-f4.htm
http://klabs.org/richcontent/Tutorial/MiniCourses/architecture_logic_mapld2001/Logic_Section/1_Intro_Logic.PDF
http://www.et.utt.ro/public/Docs/Documentatii%20Hardware/Circuite%20TTL%20-%20Fairchild/DM74LS283.pdf参考HP
Reference: Parallel Adder with Carry Look-ahead
(Fairchild DM74LS283 logic diagram)
An-1 ・・・・ Ai ・・・ A1 A0
・・・・
・・・・
CCarry
iii GBA iii TBA
1nC
1C
0011 ,,, BABABA iinn
0C
*G*T
1iC2nC
carry look-aheader
Sn-1 ・・・・ Si ・・・ S1 S0加算結果
Bn-1 ・・・・ Bi ・・・ B1 B0
carry look-aheader
回路が下位からの桁上げを先見することで,各桁毎で同時にその桁へのキャリーを読み込んで加算が実行可能
(眞の並列加算)
下位からの桁上げが無ければゼロとなる
上位へのキャリー伝達が不要ならば未接続
加算ハードウェアだけでも結構大変なのに,減算のために新規にハードウェアを用意する必要があるのか?
加算ハードウェアで減算も(ついでに)実行できないか?
それは,少しわがままな要望から始まった....
2の補数(two’s complement)の導入
An-1 ・・・・ Ai ・・・ A1 A0
最上位ビット(MSB)を符号ビット(Sign Bit)として扱う
MSB:Most Significant Bit , MSB=0:正or零(ゼロ),MSB=1:負
最下位ビットLSB
1100・・・11
0111・・・11
0100・・・11
1010・・・00
0000・・・00
0010・・・00
1000・・・00
1111・・・11
0100・・・11
1111・・・11
1100・・・11
0010・・・00
1000・・・00
1010・・・00
0000・・・00
0111・・・11
n bit n bit
n2
12 n
12 n
情報量
情報量
情報量
ゼロ
MSB=0
MSB=1
正or
零
負
正の数の大小関係は明白!
負の数の大小関係は?
nビットのall 1 を考える 11111・・・・・・1111
n bit
11111・・・・・・111100000・・・・・・0001‘1’
? =X
MSB=1
(+00000・・・・・・00001
Carry=1 明らかにゼロ
n bit
nビットのall 0
X+1=0 X=-1
11111・・・・・・1111 -1
=1
nビットのall 1
0100・・・11
1111・・・11
1100・・・11
0010・・・00
1000・・・00
1010・・・00
0000・・・00
0111・・・11
n bit
12 n
12 n
情報量
情報量
ゼロ
MSB=0
MSB=1
正or
零
負
-1
1111・・・110000・・・01(-1111・・・10
1111・・・100000・・・01(-1111・・・01
1000・・・010000・・・01(-1000・・・00
・
・
・
-1
1
-2
-2
-3
12 n
12 n
12 1 n
0101x
1010x
個々のビットの0と1とを反転させる
nビットのXに対して,Xを考えると
X+X=1111・・・・11 -1
X+X=-1 -X=X+1
2の補数の世界において,ある数Xの符号反転(ーX)は
Xの各ビット毎の反転( X )に“1”を加算すると得られる
意味
2の補数(two’s complement)の導入の結果
これまで通り,加算はOK.加えて,減算を加算で表現することが可能
X+Y ・・・ OK
X-Y= X+(-Y)=X+Y+1
An-1 ・・・・ Ai ・・・ A1 A0
Bn-1 ・・・・ Bi ・・・ B1 B0
加算のハードウェア下位からのキャリーはゼロ
Sn-1 ・・・・ Si ・・・ S1 S0
加算はこれまで通り!
CCarry
An-1 ・・・・ Ai ・・・ A1 A0
Bn-1 ・・・・ Bi ・・・ B1 B0
加算のハードウェア
下位からのキャリーを1とする
Sn-1 ・・・・ Si ・・・ S1 S0
これで加算ハードウェアで減算も実行可能!
Bn-1 B0B1Bi
CCarry
An-1 ・・・・ Ai ・・・ A1 A0
Bn-1 ・・・・ Bi ・・・ B1 B0
加算のハードウェア
加算の時0,減算の時1
Sn-1 ・・・・ Si ・・・ S1 S0
これで加算ハードウェアで減算も実行可能!
CCarry
組合せ回路(Combinational Circuit)と
順序回路(Sequential Circuit)
組合せ回路:入力情報(入力パターン)に対して出力信号(出力パターン)が一意に決定される論理回路
順路回路:内部状態が存在し,内部状態と入力情報とによって,出力信号が決定される回路(このため,見掛け上,出力パターンは,入力パターンに対して一意には決定されない)
論理回路=組合せ回路+順序回路
組合せ回路の具体例
OR
Output: z
NOT
AND
s: Select
D2 D1
enable
z = s D1 + s D2
z = (s D1 + s D2)enable
s D1 D2 z0 0 0 00 0 1 00 1 0 10 1 1 11 0 0 01 0 1 11 1 0 01 1 1 1
組合せ回路の構成は,比較的容易!
問題は順序回路を如何に構成するかより詳しくは「論理回路」の授業を受講してください!!(ここではその入門)
フリップフロップ:フィードバックの存在
S R Q(t) notQ(t) Q(t+1) notQ(t+1)0 0 0 1 0 10 0 1 0 1 01 0 - - 1 00 1 - - 0 11 1 - - Unstable* Unstable*1 1 - - Unstable* Unstable*
保存(メモリ)
セット
リセット
禁止入力
S
R
Q1
0
0
1 Q
1
0
フリップフロップ回路(flip-flop circuit)
「フリップフロップ回路」とは:
「high」と「low」の2つの安定状態を持つ論理回路(電子回路).2つの状態を「0」と「1」に対応させることで,1ビットの情報を保持可能(メモリ).
印加する信号によって2つの状態が交互に変化するように構成されているのが特徴.
大規模な電子回路を構成するための基本的な素子.SRAMや、マイクロプロセッサ内部のフラグやレジスタ等の記憶回路に使用.
順序回路の具体例(その1)
マスタスレーブ型JKフリップフロップ
J
K
クロック
リセット
Q
Q
順序回路の具体例(その2)
エッジトリガー型JKフリップフロップ
Q
Kクロック
J
リセット
Q