コンピュータアーキテクチャ 第 1 回 ガイダンスと poco の命令セット

27
コココココココココココココ コ 1 コ ココココココ POCO ココココ ココ ココ [email protected]

Upload: lovie

Post on 12-Jan-2016

118 views

Category:

Documents


0 download

DESCRIPTION

コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット. 天野  [email protected]. 授業計画. RISC 命令セットと Verilog の復習 …2 回 入出力と割り込み …4 回 パイプライン処理 …3 回 命令レベル並列処理 …3 回 マルチコアアーキテクチャ …2 回 上記は目安なので注意! テキスト:天野、西村「作りながら学ぶコンピュータアーキテクチャ」培風館 http://www.am.ics.keio.ac.jp 上に資料を掲示. 計算機構成. コンピュータの構成. Disk. CPU. Key. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

コンピュータアーキテクチャ第 1 回 ガイダンスとPOCO の命令セット天野  [email protected]

Page 2: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

授業計画

RISC 命令セットと Verilog の復習… 2 回 入出力と割り込み… 4 回 パイプライン処理… 3 回 命令レベル並列処理… 3 回 マルチコアアーキテクチャ… 2 回上記は目安なので注意!

テキスト:天野、西村「作りながら学ぶコンピュータアーキテクチャ」培風館

http://www.am.ics.keio.ac.jp上に資料を掲示

Page 3: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

コンピュータの構成

CPU

MemorySystem

Bridge

Disk

Key

Display

SystemBus

I/O   Bus

コンピュータの3要素

計算機構成

Page 4: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

重要な入出力( I/O )

バスブリッジを介して I/O バスと接続 メモリと同様な番地付けをする場合が多い 

( Memory-mapped   I/O) マルチメディア化により範囲が広がる

ディスク、テープ、 CD 、 DVD などの補助記憶 Ethernet などのネットワーク ビットマップディスプレイ、 CDC ビデオ入力 キーボード、マウス等の入力装置 音声出力、入力

Page 5: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

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 で加算を行う

Page 6: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

高速化の流れ

1980 1990 2000

RISC の登場パイプライン化

パイプラインを細かく(スーパーパイプライン)周波数の向上

命令の動的スケジュール

複数命令の同時発行(スーパースカラ)

マルチコア化

マルチコア革命2003-2004

命令レベルの高速化

スレッドレベルの高速化 Simultaneous

Multithreading

Page 7: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

授業の流れ1:CPU 性能向上のための技法

コンピュータアーキテクチャ( 3 年春)

パイプライン処理命令レベル並列処理マルチコア

マイクロプロセッサ特論(大学院) 命令レベル並列処理スーパースカラVLIWSMT  

コンピュータアーキテクチャ特論(大学院)

マルチプロセッサクラスタコンピューティング再構成可能プロセッサ

Page 8: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

授業の流れ2:メモリシステムと入出力

コンピュータアーキテクチャ ( 3 年春)

メモリシステム 入出力

仮想記憶記憶管理

I/O の接続割り込みDMA ( Direct  MemoryAccess)

情報工学実験 ( 3 年秋) マイクロプロセッサ実験FPGA 上に CPU を実現入出力プログラム

オペレーティングシステム(3年秋)

マルチコアのメモリシステム

Page 9: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

評価方法

毎回の演習 今年はコンピュータ部屋を使わない時がある Web 上の掲示に注意!

設計コンテスト 上位入賞者は試験免除で A

期末試験

Page 10: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

POCO の命令セットアーキテクチャ(Instruction Set Architecture: ISA ) ソフトウェアとハードウェアのインタフェース

プログラムは ISA を対象にすれば個々のハードウェアは気にしなくてもいい

ハードウェアは ISA が動けば共通のプログラムが動く IBM360 開発時に明確になった概念

それまでは開発したマシン毎にソフトウェアを作っていた 様々な性能、価格のモデルが同じ ISA を共通できた→   IBM のメインフレームでの覇権を確立した

Intel の IA32 、 ARM 、 SPARC 、 MIPS などが長期間に渡って拡張され、利用されている

Page 11: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

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

現在のマシンは全てここに分類される

Page 12: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

汎用レジスタマシンの分類

オペランド中にメモリの指定をいくつ許すか?

一つも許さない: 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)など

Page 13: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

A B

YS

weclk

必ずレジスタに持ってきてから演算を行う

LD   R0,0LD R1,1ADD R1,R0ST   R1,2

固定長命令が可能だが命令数が増えるLD/ST ばかりやる→ load/store マシン簡単な命令で構成RISC(Reduced Instruction Set Computer)

register-register 型のデータパス

Page 14: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

各型の消長

アキュムレータマシン

スタックマシン

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 に!

見た目は全盛

Page 15: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

教育用 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 をさらに簡単化

とにかく実装が楽になるように

Page 16: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

メモリの読み書き

レジスタ間接指定LD r0,(r1)   r1 の中身の番地のデータを読み出して r0 に転送ST r0,(r1) r1 の中身の番地に、 r0 を書き込む

実効アドレス(実際に読み書きされるアドレス)=レジスタの内容

他にもアドレッシングモード(実効アドレスを決める方法)は色々あるが POCO はレジスタ間接指定しか持って居ない アキュムレータマシンの際の LD   0 は、直接指定と呼ぶ しかしこれは POCO では持っていない

Page 17: コンピュータアーキテクチャ 第 1 回 ガイダンスと 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)

Page 18: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

イミーディエイト命令

命令コード中の数字 (直値)がそのまま演算に使われる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)

Page 19: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

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) になる

Page 20: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

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

Page 21: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

Jump と JR

JMP   X    pc ←   pc+1+X    Jump10100 XXXXXXXXXXX 無条件に相対指定で X 分飛ぶ レジスタ指定がない分遠くに飛べる

-1024 ~ +1023

JR   rd pc←rd   Jump Register00000 ddd --- 01010 絶対指定 16 ビットのアドレス空間のどこにでも飛べる サブルーチンコールのリターン(来週) テーブルジャンプ

Page 22: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

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 にしまうのは命令の直交性を損ねる(格好わる

い)

Page 23: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

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 型命令一覧

Page 24: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

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 型命令一覧

Page 25: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

JMP   #X pc←pc+X+1 10100XXXXXXXXXXX

JAL   #X pc←pc+X+1, r7←pc+1

10101XXXXXXXXXXX

J 型命令一覧

Page 26: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

すべてを忘れた人のために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 なので注意!

Page 27: コンピュータアーキテクチャ 第 1 回 ガイダンスと POCO の命令セット

演習

0番地から 8 つの正の整数が並んでいる。このうち 10 より大きい( 10 は含まない)ものの個数を調べるプログラムを書け