計算機構成: トップダウンの解説

コンピュータアーキテクチャ
第1回 ガイダンスとPOCOの
命令セット
天野 [email protected]
授業計画
RISC命令セットとVerilogの復習…2回
 入出力と割り込み…4回
 パイプライン処理…3回
 命令レベル並列処理…3回
 マルチコアアーキテクチャ…2回
上記は目安なので注意!

テキスト:天野、西村「作りながら学ぶコンピュータアーキテ
クチャ」培風館
http://www.am.ics.keio.ac.jp上に資料を掲示
コンピュータの構成
計算機構成
Disk
Key
CPU
Display
System
Bus
Bridge
I/O Bus
Memory
System
コンピュータの3要素
重要な入出力(I/O)



バスブリッジを介してI/Oバスと接続
メモリと同様な番地付けをする場合が多い
(Memory-mapped I/O)
マルチメディア化により範囲が広がる





ディスク、テープ、CD、DVDなどの補助記憶
Ethernetなどのネットワーク
ビットマップディスプレイ、CDCビデオ入力
キーボード、マウス等の入力装置
音声出力、入力
IFで加算を行う
IF
EX
ID
rwe
decorder st_op
ld_op
funct
3:0
rwe_id
opcode
15:11
funct
2:0
THB
0 1
ir
ADD
com_id
rd_id
0
1
0
1
alu_bsel
r0
判定
daddr
ddataout
命令メモリ
creg dreg
S Y
10
0
1
breg
01
imm 7:0
PC
ext ext0
rs 7:5
B
00
+
rd_ex
A
0
1
rwe_ex
areg
‘1’
rd 10:8
rwe_ex
st_op_id
ld_op_id
00 01 10
ext
‘0’
WB
st_op_id
we
データ
メモリ
ddatain
高速化の流れ
スレッドレベルの
高速化
Simultaneous
Multithreading
複数命令の同時発行
(スーパースカラ)
命令レベルの
高速化
RISCの登場
パイプライン化
マルチコア化
パイプラインを細かく
(スーパーパイプライン)
周波数の向上
命令の動的スケジュール
マルチコア
革命
2003-2004
1980
1990
2000
授業の流れ1:
CPU性能向上のための技法
コンピュータアーキテクチャ(3年春)
マイクロプロセッサ特論(大学院)
コンピュータアーキテクチャ特論(大学院)
パイプライン処理
命令レベル並列処理
マルチコア
命令レベル並列処理
スーパースカラ
VLIW
SMT
マルチプロセッサ
クラスタコンピューティング
再構成可能プロセッサ
授業の流れ2:メモリシステムと入出力
メモリシステム
コンピュータアーキテクチャ (3年春)
オペレーティングシステム(3年秋)
情報工学実験 (3年秋)
マルチコアの
メモリシステム
入出力
I/Oの接続
割り込み
DMA(Direct Memory
Access)
仮想記憶
記憶管理
マイクロプロセッサ実験
FPGA上にCPUを実現
入出力プログラム
評価方法

毎回の演習



設計コンテスト


今年はコンピュータ部屋を使わない時がある
Web上の掲示に注意!
上位入賞者は試験免除でA
期末試験
POCOの命令セットアーキテクチャ
(Instruction Set Architecture: ISA)

ソフトウェアとハードウェアのインタフェース



プログラムはISAを対象にすれば個々のハードウェアは気にし
なくてもいい
ハードウェアはISAが動けば共通のプログラムが動く
IBM360開発時に明確になった概念
それまでは開発したマシン毎にソフトウェアを作っていた
 様々な性能、価格のモデルが同じISAを共通できた
→ IBMのメインフレームでの覇権を確立した


IntelのIA32、ARM、SPARC、MIPSなどが長期間に
渡って拡張され、利用されている
ISAの分類

オペランド数による分類

0:スタックマシン
PUSH 0
PUSH 1
ADD
POP 2



演算スタックを使う方法
B5000、HP9000などの名機があったが80年代に絶滅→スタックを使うとパイプライン化、
複数命令発行ができない
1:アキュムレータマシン
LD 0
ADD 1
ST 2





EDSAC、EDVACなど黎明期のマシン
6800、6502など黎明期のマイクロプロセッサ
当初からインデックスレジスタは必要としていた
レジスタが増えて汎用(専用)レジスタマシンに進化し、消滅
2,3:汎用(専用)レジスタマシン
LD R0,0
ADD R1,1
ST R0,2

現在のマシンは全てここに分類される
汎用レジスタマシンの分類

オペランド中にメモリの指定をいくつ許すか?
一つも許さない:register-register型 (load/storeマシン)
RISC (Reduced Instruction Set Computer)
〇命令長が固定、各命令が簡単、高速実行可能
×命令数が多くなる
ARM、MIPS、SPARCなど
一つだけ許す:register-memory型
中間的な性質: IA32(x86)など
全て許す:memory-memory型
CISC (Complex Instruction Set Computer)
〇命令数が少なくて済む
×命令長が可変、各命令が複雑になりがち
VAX-11、PDP-11など
register-register型の
データパス
S Y
A
B
必ずレジスタに持ってきてから演算を
行う
LD R0,0
LD R1,1
ADD R1,R0
ST R1,2
固定長命令が可能だが
命令数が増える
LD/STばかりやる→load/storeマシン
簡単な命令で構成
RISC(Reduced Instruction Set
Computer)
…
clk
we
各型の消長
1950
1960
1970
1980
1990
草創期のコンピュータ
アキュムレータ
マシン
IBM360/370
register-memory
memory-memory
x86の登場
メインフレーム
PDP-8
見た目は
全盛
Pentium-II
でバイナリ変換
VAX-11で全盛期
絶滅
RISC vs. CISC論争
register-register
スタック
マシン
IBM801
RISC-I,MIPS、ARM
B5000が慶應ITCに!
絶滅
教育用RISC POCO

16bitのregister-register型




命令メモリ、データメモリのアドレス、データ共に16bit(64K×16
ビット)
レジスタ16本 (r0-r7)
2オペランド命令
ADD r0,r1 r0 ← r0+r1
左:destination operand
右:source operand
(IBM/Intel方式)
前身のPICOをさらに簡単化

とにかく実装が楽になるように
メモリの読み書き

レジスタ間接指定
LD r0,(r1) r1の中身の番地のデータを読み出してr0に転送
ST r0,(r1) r1の中身の番地に、r0を書き込む


実効アドレス(実際に読み書きされるアドレス)=レジス
タの内容
他にもアドレッシングモード(実効アドレスを決める方法)
は色々あるがPOCOはレジスタ間接指定しか持って居
ない


アキュムレータマシンの際のLD 0は、直接指定と呼ぶ
しかしこれはPOCOでは持っていない
基本演算命令

レジスタ同士でしか演算はできない








ADD r1,r2
SUB r1,r2
AND r1,r2
OR r1, r2
SL r1
SR r1
MV r1,r2
NOP
r1←r1+r2
r1←r1-r2
r1←r1 AND r2
r1←r1 OR r2
r1<<1
r1>>1
r1 ← r2 単純な移動
何もしない(NoOperation)
イミーディエイト命令

命令コード中の数字(直値)がそのまま演算に使
われる
LDI r1,#1
r1←1
ADDI r1,#5
r1←r1+5
 直値は8ビット符号付 → 演算時は16ビットに符号
拡張(sign extension)される
 符号無し命令
LDIU r1,#200 r1←200
ADDIU r1,#0xf0 r1←r1+0xf0
(ADDI r1,#0xf0ならばr1←r1-16)
POCOの条件分岐命令
BEZ rx,X: if(rx=0) PC←PC+1+X
10000 ddd XXXXXXXX
BNZ rx,X: if(rx≠0) PC←PC+1+X
10001 ddd XXXXXXXX
 PC相対指定




命令の位置+1を起点としてX分命令を飛び越す
8ビットのフィールド→ -128から127まで飛べる
局所性(Locality)があるので多くの場合大丈夫
プログラムが再配置可能(Relocatable)になる
PC相対指定による分岐
(掛け算のプログラムの例)
LDIU r0,#2
LD r1,(r0)
LDIU r0,#3
LD r2,(r0)
LDIU r3,#0
ADD r3,r1
ADDI r2,#-1
BNZ r2, -3
LHIU r0,#0
ST r3,(r0)
BEZ r2,-1
r1 ← 2番地の内容
r2 ←3番地の内容
r3は答が入るので0に初期化
r3にr1を足しこむ
r2から1を引く
0でなければループ
JumpとJR
JMP X pc ← pc+1+X Jump
10100 XXXXXXXXXXX


無条件に相対指定でX分飛ぶ
レジスタ指定がない分遠くに飛べる
-1024~+1023
JR rd
pc←rd Jump Register
00000 ddd --- 01010




絶対指定
16ビットのアドレス空間のどこにでも飛べる
サブルーチンコールのリターン(来週)
テーブルジャンプ
Jump and Link

戻り番地を最大番号のレジスタに保存


POCOの場合r7
古典的な手法でマインフレーム時代に使われた


Branch and Link命令
RISCで最も良く使われる方式
JAL X : pc←pc+1+X, r7←pc+1
10101 XXXXXXXX
飛ぶ範囲はJMPと同じく11ビット(-1024~1023)
議論1:サブルーチンの入れ子(ネスト)に対応しない
議論2:r7にしまうのは命令の直交性を損ねる(格好わるい)
R型命令一覧
00000------00000
NOP
MV rd,rs
rd← rs
00000dddsss00001
AND rd,rs
rd← rd AND rs
00000dddsss00010
OR rd,rs
rd← rd OR rs
00000dddsss00011
SL rd
rd← rd<<1
00000ddd---00100
SR rd
rd← rd>>1
00000ddd---00101
ADD rd,rs
rd← rd + rs
00000dddsss00110
SUB rd,rs
rd← rd - rs
00000dddsss00111
ST rd,(ra)
(ra)← rd
00000dddaaa01000
LD rd,(ra)
rd← (ra)
00000dddaaa01001
JR rd
pc ← rd
00000ddd---01010
I型命令一覧
LDI rd,#X
rd← X(符号拡張)
01000dddXXXXXXXX
LDIU rd,rs
rd← X(ゼロ拡張)
01001dddXXXXXXXX
ADDI rd,#X
rd←rd+X(符号拡張)
01100dddXXXXXXXX
ADDIU rd,#X
rd←rd+X(ゼロ拡張)
01101dddXXXXXXXX
LDHI rd,#X
rd←{X,0}
01010dddXXXXXXXX
BEZ rd,X
if(rd=0) pc←pc+X+1
10000dddXXXXXXXX
BNZ rd,X
if(rd≠0) pc←pc+X+1
10001dddXXXXXXXX
BPL rd,X
if(rd>=0) pc←pc+X+1
10010dddXXXXXXXX
BMI rd,X
if(rd<0) pc←pc+X+1
10011dddXXXXXXXX
J型命令一覧
JMP #X
pc←pc+X+1
10100XXXXXXXXXXX
JAL #X
pc←pc+X+1,
r7←pc+1
10101XXXXXXXXXXX
すべてを忘れた人のために
tarの解凍
tar xvf file.tar
アセンブラshapa
./shapa file.asm –o imem.dat
論理シミュレーションiverilog
iverilog *.v
vvp a.out
波形ビューアgtkwave
gtkwave file.vcd
レポート提出
[email protected] Subject: ARCWORK1 Student_number Name
いつでもARCWORK1なので注意!
演習

0番地から8つの正の整数が並んでいる。このう
ち10より大きい(10は含まない)ものの個数を調
べるプログラムを書け