ソフトウェア基礎技術研修 - System LSI Lab.

データパスの構築Ⅰ
~シングルサイクル・データパス~
プロセッサの構成:データパスと制御
 MIPS命令セットを実現するプロセッサを設計する!
 ただし,以下の命令セットに限定
 算術論理演算命令:add,sub,and,or,slt
 メモリ参照命令:lw,sw
 分岐命令:beq
命令区分
算術論理演算
データ転送
分岐
命令の内容
例
意味
加算
add $s1, $s2, $s3
$s1 = $s2 + $s3
減算
sub $s1, $s2, $s3
$s1 = $s2 – $s3
論理積
and $s1, $s2, $s3
$s1 = $s2 and $s3 (ビット毎の論理積)
論理和
or $s1, $s2, $s3
$s1 = $s2 or $s3 (ビット毎の論理和)
比較(セット)
slt $s1, $s2, $s3
もし、$s2<$s3なら$s1=1, $s2>=$s3なら$s1=0
ロードワード
lw $s1, 100($s2)
$s1に,メモリの[$s2+100]番地のワードデータを読込み
ストアワード
sw $s1, 100($s2)
メモリの[$s2+100]番地に,$s1のワードデータを書込み
条件付
beq $s1, $s2, L
もし、$s1==$s2ならラベルLへ分岐
九州大学工学部電気情報工学科
命令実行の基本動作
PCの指す番地から命令
を取得.
命令取得
命令解読
命令実行
命令語の各フィールドを
検査して,実行する命
令と必要なパラメータを
特定する.
全ての命令で共通の処理
命令によって異なる処理
九州大学工学部電気情報工学科
命令実行の基本動作(add命令)
(sub, and, or, slt も同様)
000000 rs
rt
rd 00000 100000
命令取得
命令解読
rs,rt の指定するレジスタの値
を ALU に転送
命令実行
ALUで演算実行
結果を rd の指定するレジスタ
に転送
PC ← PC + 4
九州大学工学部電気情報工学科
命令実行の基本動作(lw命令)
100011 rs
即値
rt
命令取得
命令解読
命令実行
rs の指定するレジスタの値と即
値を ALU に転送
加算実行
加算結果の番地の値を rt の指
定するレジスタに転送
PC ← PC + 4
九州大学工学部電気情報工学科
各命令実行で必要な処理
命令の
種類
命令
命令実行で必要となる処理
Step1
算術論
理演算
add/sub/
and/or/slt
データ
転送
lw

sw

beq

分岐

レジスタファイルより
rsとrtを読出し
レジスタファイルより
rsを読出し
 命令より即値を選択
レジスタファイルより
rsとrtを読出し
 命令より即値を選択
レジスタファイルより
rsとrtを読出し
 命令より分岐先オフ
セットを選択
Step2




ALUでの演算
ALUでのアドレ
ス計算(+)
ALUでのアドレ
ス計算(+)
ALUでの一致
判定(-)
Step3


Step4
演算結果をrdへ
書き込み
メモリから値を読
出し(ロード)
メモリへrtの値を
書込み





Step5
PCの更新
(+4)
ロード値を
rtへ書込み

PCの更新
(+4)
PCの更新
(+4)
PCの更新(分岐
先の値)
九州大学工学部電気情報工学科
データパスの概観
PC
命令メモリ
アドレス
命令
書込みデータ
読出しデータ
レジスタ番号
レジスタ番号
読出しデータ
レジスタ番号
レジスタファイル
命令取得 命令解読
ALU
データメモリ
アドレス
読出しデータ
書込みデータ
命令実行
九州大学工学部電気情報工学科
部品の準備(命令メモリ)
命令メモリ:実行対象となる命令(プログラム)を格納
信号の意味
入出力
信号名
ビット幅
読み出す命令の番地
入力
adrs
32
読み出された命令
出力
inst
32
PC
命令メモリ
アドレス
命令
書込みデータ
読出しデータ
レジスタ番号
レジスタ番号
読出しデータ
レジスタ番号
レジスタファイル
adrs
命令メモリ
32
32
ALU
データメモリ
アドレス
読出しデータ
書込みデータ
inst
九州大学工学部電気情報工学科
部品の準備(データメモリ)
データメモリ:プログラム実行において必要となるデータを格納
信号の意味
入出力
信号名
ビット幅
読み書きする番地
入力
adrs
32
書き込みデータ
入力
wd
32
読み出しデータ
出力
rd
32
書き込み要求(1のとき要求)
入力
MemWrite
1
読み出し要求(1のとき要求)
入力
MemRead
1
PC
MemRead MemWrite
命令メモリ
アドレス
命令
書込みデータ
読出しデータ
レジスタ番号
レジスタ番号
読出しデータ
レジスタ番号
adrs
wd
レジスタファイル
32
データメモリ
32
32
ALU
データメモリ
アドレス
読出しデータ
書込みデータ
rd
九州大学工学部電気情報工学科
部品の準備(レジスタファイル 1/2)
レジスタファイル:複数のレジスタにより構成
信号の意味
入出力
信号名
ビット幅
レジスタの読み出し値1
出力
rd1
32
レジスタの読み出し値2
出力
rd2
32
レジスタの書き込み値
入力
wd
32
rd1 に値を出力するレジスタを選択
入力
rreg1
5
rd2 に値を出力するレジスタを選択
入力
rreg2
5
wd の値を書き込むレジスタを選択
入力
wreg
5
レジスタに書き込みを行うとき1
入力
RegWrite
1
5
rreg1
5
rreg2
wreg 5
wd 32
RegWrite
PC
rd1
レジスタ
ファイル
32
rd2
32
命令メモリ
アドレス
命令
書込みデータ
読出しデータ
レジスタ番号
レジスタ番号
読出しデータ
レジスタ番号
レジスタファイル
ALU
データメモリ
アドレス
読出しデータ
書込みデータ
九州大学工学部電気情報工学科
部品の準備(レジスタファイル 2/2)
5
rreg1
5
rreg2
wreg 5
wd 32
RegWrite
rd1
レジスタ
ファイル
32
rd2
32
rreg1
RegWrite
wreg
0
1
C
30
31
D
Decoder
Register 0
D
C
Register 1
M
u
x
rd1
M
u
x
rd2
C
Register 30
D
C
wd
rreg2
Register 31
D
九州大学工学部電気情報工学科
部品の準備(ALU)
ALU:指定された算術論理演算を実行
信号の意味
入出力
信号名
ビット幅
演算対象となる入力オペランド
入力
a
32
演算対象となる入力オペランド
入力
b
32
演算結果出力
出力
y
32
ゼロ判定(結果が 0 のときに 1)
出力
zero
1
ALU制御(000: AND,001: OR,
010: +,110: –,111: slt)
入力
ALUctrl
3
ALUctrl
b
32
3
ALU
a
32
PC
命令メモリ
アドレス
命令
32
zero
y
書込みデータ
読出しデータ
レジスタ番号
レジスタ番号
読出しデータ
レジスタ番号
レジスタファイル
ALU
データメモリ
アドレス
読出しデータ
書込みデータ
九州大学工学部電気情報工学科
プログラムカウンタ周りの設計
プログラムカウンタ(PC): 次に実行する命令の番地を記憶
命令を実行するたびに PC を更新
 分岐命令以外: 次の命令 PC ← PC + 4
 分岐命令の場合:
 分岐条件成立時: PC ← 分岐先命令の番地
 分岐条件非成立時: 次の命令 PC ← PC + 4
4
+
32
P
C
命令メモリ
32
九州大学工学部電気情報工学科
算術論理演算命令用データパスの設計(1)
op
rs
rt
rd
shamt
funct
6bit
5bit
5bit
5bit
5bit
6bit
op
rs
rt
rd
shamt
funct
add $○, $△, $□
000000
$△
$□
$○
00000
100000
sub $○, $△, $□
000000
$△
$□
$○
00000
100010
slt $○, $△, $□
000000
$△
$□
$○
00000
101010
and $○, $△, $□
000000
$△
$□
$○
00000
100100
or $○, $△, $□
000000
$△
$□
$○
00000
100101
R形式
命令
九州大学工学部電気情報工学科
算術論理演算命令用データパスの設計(2)
31
26 25 21 20 16 15 11 10
op
+
rs
rt
6 5
0
rd shamt funct
4
RegWrite
25-21
20-16
P
命令メモリ inst
C adrs
15-11
rreg1
rreg2
rd1
レジスタ
ファイル
wreg
rd2
a
b
A
L
U
y
wd
ALUctrl
命令区分
算術論理演算
命令の内容
add, sub,
and, or, slt
例
意味
add $s1, $s2, $s3 $s1 = $s2 + $s3
九州大学工学部電気情報工学科
lw/sw命令用データパスの設計(1)
I形式
op
rs
rt
address/immediate
6bit
5bit
5bit
16bit
命令
op
rs
rt
address/immediate
lw $○, n($△)
100011
$△
$○
n
sw $○, n($△)
101011
$△
$○
n
九州大学工学部電気情報工学科
lw/sw命令用データパスの設計(2)
31
26 25 21 20 16 15
op
+
rs
0
rt
Offset
4
RegWrite
MemRead
25-21
20-16
rreg1
rreg2
P
命令メモリ inst
C adrs
a
rd1
レジスタ
ファイル
wreg
b
rd2
A
L
U
y
adrs
データメモリ
wd
wd
15-0
lwの場合
符号拡張
16
命令区分
命令の内容
データ転送
ロードワード
32
例
lw $s1, 100($s2)
MemWrite
rd
ALUctrl
意味
$s1に,メモリの[$s2+100]番地のワード
データを読込み
九州大学工学部電気情報工学科
lw/sw命令用データパスの設計(3)
31
26 25 21 20 16 15
op
+
rs
0
rt
Offset
4
RegWrite
MemRead
25-21
20-16
rreg1
rreg2
P
命令メモリ inst
C adrs
a
rd1
レジスタ
ファイル
wreg
b
rd2
A
L
U
y
adrs
データメモリ
wd
wd
15-0
swの場合
命令区分
データ転送
符号拡張
16
命令の内容
32
例
ストアワード sw $s1, 100($s2)
MemWrite
rd
ALUctrl
意味
メモリの[$s2+100]番地に,$s1のワード
九州大学工学部電気情報工学科
データを書込み
beq 命令用データパスの設計(1)
PC相対アドレッシング: beq, bne 命令の分岐先番地
PC
I形式
00
op
rs
rt
address
address を符号拡張
+
00
整列化制約: 命令の
番地は常に4の倍数.
分岐先(Label の番地)
00
九州大学工学部電気情報工学科
beq 命令用データパスの設計(2)
31
26 25 21 20 16 15
op
rs
rt
Offset
+
4
RegWrite
25-21
20-16
rreg1
rreg2
P
命令メモリ inst
C adrs
+
2bit
左シフト
zero
a
rd1
レジスタ
ファイル
wreg
0
b
rd2
A
L
U
wd
15-0
符号拡張
16
命令区分
分岐
命令の内容
条件付
32
例
beq $s1, $s2, L
ALUctrl
意味
もし、$s1==$s2ならラベルLへ分岐
九州大学工学部電気情報工学科
各命令用のデータパス
add, sub, and,
or, slt
+
4
lw
+
4
RegWrite
RegWrite
25-21
20-16
rreg1
rreg2
P
命令メモリ inst
C adrs
15-11
a
rd1
レジスタ
ファイル
wreg
A
L
U
b
rd2
MemRead
25-21
20-16
rreg1
rreg2
P
命令メモリ inst
C adrs
y
rd1
レジスタ
ファイル
wreg
A
L
U
b
rd2
y
adrs
データメモリ
wd
wd
wd
15-0
ALUctrl
符号拡張
16
MemWrite
a
rd
ALUctrl
32
sw
+
4
+
4
RegWrite
MemRead
25-21
20-16
rreg1
rreg2
P
命令メモリ inst
C adrs
rd1
b
rd2
A
L
U
y
P
命令メモリ inst
C adrs
adrs
32
ALUctrl
rd
+
2bit
左シフト
zero
a
rd1
レジスタ
ファイル
wreg
wd
符号拡張
16
rreg1
rreg2
データメモリ
wd
15-0
25-21
20-16
a
レジスタ
ファイル
wreg
MemWrite
RegWrite
b
rd2
A
L
U
wd
15-0
符号拡張
16
32
beq
ALUctrl
九州大学工学部電気情報工学科
データパスの統合
+
4
RegWrite
25-21
20-16
P
命令メモリ inst
C adrs
rreg1
rreg2
MemRead
zero
wreg
b
rd2
A
L
U
y
adrs
データメモリ
wd
wd
15-0
マルチプレクサ
(選択回路)
符号拡張
16
MemWrite
a
rd1
レジスタ
ファイル
15-11
+
2bit
左シフト
32
rd
ALUctrl
九州大学工学部電気情報工学科
 Created by Tsuneo Nakanishi, 2002-2004 (R1.00)
 Updated by Koji Inoue, 2005 (R1.01)
 Updated by Koji Inoue, 2007 (R1.02)
九州大学工学部電気情報工学科