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