28
計計計計計 計5計 RISC 計計計計計計計計計計計計計 計計計計計 4 計 計計計計計 計計計計

計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

  • Upload
    gzifa

  • View
    57

  • Download
    0

Embed Size (px)

DESCRIPTION

計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章. 情報工学科 天野英晴. 利点:単純、オペランドが1つ 欠点:レジスタが1つで不便 メモリへのポインタができない → 他の命令セットへ  . アキュムレータマシン. operand. 00000000. +. 7. com. 1. ---. Y. S. A. B. =0?. clk. Dec. PC. 1010. en=0. 2. clk. 6. 命令. 1010 00000000. 0. 2. 3. 1. …. …. 0. 命令メモリ. - PowerPoint PPT Presentation

Citation preview

Page 1: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

計算機構成 第 5 回RISC の命令セットアーキテク

チャテキスト第 4 章

情報工学科天野英晴

Page 2: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

A B

YS

2

we=0clk

clk

com

PC

+1

clk

命令メモリ

命令

利点:単純、オペランドが1つ欠点:レジスタが1つで不便メモリへのポインタができない→  他の命令セットへ  

1010 00000000

6

0

---

7

0231

en=0

=0?Dec.

00000000

operand

1010

アキュムレータマシン

Page 3: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

命令セットアーキテクチャ(Instruction Set Architecture: ISA )

とは?• ソフトウェアとハードウェアのインタフェース

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

– ハードウェアは ISA が動けば共通のプログラムが動く

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

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

Page 4: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

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 5: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

汎用レジスタマシンの分類• オペランド中にメモリの指定をいくつ許すか?

一つも許さない: 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 6: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

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 7: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

A B

YS

weclk

メモリ同士の演算が可能(もちろんレジスタとの間でも可能)

ADD 2,1,0

一命令で複雑な操作が実行可能高級言語との間のギャップ( Semantic Gap) が小さい命令長が可変複雑CISC(Complex Instruction SetComputer )

memory-memory 型のデータパス

Page 8: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

A B

YS

weclk

メモリとレジスタの演算は可能LD R0,0ADD R0,1ST R0,2

命令長は可変だが memory-memory よりは簡単

アキュムレータマシンの自然な発展形

register-memory 型のデータパス

Page 9: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

各型の消長

アキュムレータマシン

スタックマシン

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 10: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

教育用 RISC   POCO

• 16 bit の register-register 型– 命令メモリ、データメモリのアドレス、データ共に

16bit(64K×16 ビット)• レジスタ 8 本 ( r0-r7)• 2 オペランド命令     ADD   r0,r1 r0 ←   r0+r1           左: destination operand           右: source operand (IBM/Intel 方式)• 前身の PICO をさらに簡単化

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

Page 11: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

メモリの読み書き• レジスタ間接指定

LD r0,(r1)   r1 の中身の番地のデータを読み出して r0 に転送

ST r0,(r1) r1 の中身の番地に、 r0 を書き込む• 実効アドレス(実際に読み書きされるアドレス)=レジスタの内容

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

– しかしこれは POCO では持っていない

Page 12: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

基本演算命令

• レジスタ同士でしか演算はできない– 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              何もしない

( NoOperation)

Page 13: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

イミーディエイト命令

• 命令コード中の数字 (直値)がそのまま演算に使われる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 14: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

プログラム例• 0 番地の内容と 1 番地の内容を加算して 2 番地に格納せよLDI r0,#0 // r0: ポインタLD r1,(r0) // 0 番地から読み出しADDI r0,#1     // ポインタを先に進める LDI r0,#1 でもい

いLD r2,(r0)      // 1 番地から読み出しADD r1,r2      // 加算ADDI r0,#1     // ポインタを先に進める LDI r0,#2 でもい

いST r1,(r0)      // 結果を 2 番地にしまう

LDI の代わりに LDIU 、 ADDI の代わりに ADDIU でも良い

Page 15: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

命令のフィールド決め• 16 ビット長

opcode rd Immediate7 08101115

00000 rd

7 08101115

I 形式 ADDI ADDIU LDI LDIU

R 形式 LD ST ADD 他演算命令

例  ADDI r2,#5    00110_010_00000101

例  ADD r2,r3    00000_010_011_00110

rs

4

funct.

5 funct を第

2opcode として利用

opcode で命令を判別

opcode は常に 0

Immediate は 8 ビット

Page 16: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

レジスタファイル

Address A

A

A ポート B ポート

B

Address B

Address C

C ポート

clk rwe

Address A で与えた番号のレジスタがA ポートから出てくる

Address B で与えた番号のレジスタがB ポートから出てくる

rwe=1 の時 Address C で与えた番号のレジスタに対して次のclk の立上りで C ポートのデータが書き込まれる

3ポートメモリr0-r7まで 8 個入っているAddress は 3 ビット入出力は 16 ビット→ 要するにレジスタの集合体

Page 17: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

A B

YS

we

POCO の構成

PC

+1

命令メモリ データメモリ

ext ext0

rwe

00 01 10

0 1rf_csel

badr

aadr

cadr

alu_bsel

daddrddataout

ddatain

rf_c

rf_a rf_b

10:8

7:0

7:5

01

00

10

2:0

ADD

THB

comsel

iaddr

idatain

Page 18: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

A B

YS

we

LDI r1,#0 の実行

PC

+1

命令メモリ データメモリ

ext ext0

rwe=1

00 01 10

0 1rf_csel=0

badr

aadr

cadr

alu_bsel=01

daddrddataout

ddatain

rf_c

rf_a rf_b

10:8

7:0

7:5

01

00

10

2:0

ADD

THB

comsel=01

iaddr

idatain01000_001_00000000

00000000001

Page 19: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

A B

YS

we

LD r2,(r0) の実行

PC

+1

命令メモリ データメモリ

ext ext0

rwe=1

00 01 10

0 1rf_csel=1

badr

aadr

cadr

alu_bsel

daddrddataout

ddatain

rf_c

rf_a rf_b

10:8

7:0

7:5

01

00

10

2:0

ADD

THB

comsel

iaddr

idatain00000_010_000_01001

010

000

Page 20: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

A B

YS

we=1

ST r2,(r0) の実行

PC

+1

命令メモリ データメモリ

ext ext0

rwe=0

00 01 10

0 1rf_csel=1

badr

aadr

cadr

alu_bsel

daddrddataout

ddatain

rf_c

rf_a rf_b

10:8

7:0

7:5

01

00

10

2:0

ADD

THB

comsel

iaddr

idatain00000_010_000_01000

010

000

Page 21: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

A B

YS

we

ADD r1,r2 の実行

PC

+1

命令メモリ データメモリ

ext ext0

rwe=1

00 01 10

0 1rf_csel=0

badr

aadr

cadr

alu_bsel=00

daddrddataout

ddatain

rf_c

rf_a rf_b

10:8

7:0

7:5

01

00

10

2:0

ADD

THB

comsel=01

iaddr

idatain01000_001_010_00110

001

110

010

Page 22: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

POCO の Verilog記述module poco( input clk, rst_n, input [15:0] idatain, input [15:0] ddatain, output [15:0] iaddr, daddr, output [15:0] ddataout, output we);reg [15:0] pc;wire [15:0] rf_a, rf_b, rf_c, alu_b, alu_y;wire [4:0] opcode, func;wire [2:0] rs,rd;wire [2:0] com;wire [7:0] imm;wire rwe;wire st_op,addi_op, ld_op,alu_op,ldi_op,ldiu_op,addiu_op;

入出力は図通り

命令の分離

デコード信号

データパスの中間信号

Page 23: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

POCO の Verilog記述assign ddataout = rf_a;assign iaddr = pc;assign daddr = rf_b;assign {opcode,rd,rs,func} = idatain;assign imm=idatain[7:0];assign st_op=(opcode==`OP_REG)&(func==`F_ST);assign ld_op=(opcode==`OP_REG)&(func==`F_LD);assign ldi_op=(opcode==`OP_LDI);assign ldiu_op=(opcode==`OP_LDIU);assign addi_op=(opcode==`OP_ADDI);assign addiu_op=(opcode==`OP_ADDIU);

assign we = st_op;assign alu_b = (addi_op|addiu_op)?{ {8{imm[7]}},imm} : (addiu_op | ldiu_op)?{8’b0,imm}: rf_b;

命令の分離

命令デコード

符号拡張

ゼロ拡張

Page 24: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

符号拡張とゼロ拡張

n{x} はxを n 回繰り返して並べることを意味する

{ {8{imm[7]}},imm} →  符号ビットを 8ビット並べ、 imm と連結→ 符号拡張

{8’b0,imm} → 0 を 8 個と imm を連結→                    

 ゼロ拡張

Page 25: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

POCO の Verilog記述assign com = (addi_op|laddiu_op) ? `ALU_ADD: (ldi_op|ldiu_op)?`ALU_LD: func[2:0];assign rf_c = ld_op ? ddatain : alu_y;assign rwe = ld_op | alu_op | ldi_op | ldiu_op | addi_op | addiu_op;

alu alu_1(.a(rf_a), .b(alu_b), .s(com), .y(alu_y);

rfile rfile_1(.clk(clk), .a(rf_a), .aadr(rd), .b(rf_b), .badr(rs), .c(rf_c), .cadr(rd), .we(rwe));

always @(posedge clk or negedge rst_n)begin if(!rst_n) pc <=0; else pc<=pc+1;

マルチプレクサ図を参照

ALU

レジスタファイル

答をレジスタに書き込む命令全

PC のカウントアッ

Page 26: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

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

R 型命令一覧

Page 27: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

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

I 型命令一覧

Page 28: 計算機構成 第 5 回 RISC の命令セットアーキテクチャ テキスト第 4 章

演習

• 演習1: 0 番地に A 、 1 番地に B がある場合、( A+B) OR (A-B) をプログラムして実行せよ

• 演習2: LDHI ( opcode: 01010) を実装せよ–上位 8 ビットに Immediate の数字を入れ下位を 0

にする– LHDI r0,#5

r0 00000101 00000000

いつでも 0