計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

21
計計計計計 計4計 計計計計計計計計計計 計計計計計 3 計 計計計計計 計計計計

Upload: eden

Post on 09-Jan-2016

108 views

Category:

Documents


0 download

DESCRIPTION

計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章. 情報工学科 天野英晴. Y. S. A. B. メモリ付きのデータパス. 0番地に X 、 1 番地に Y が入っている ( SL X ) + ( SL Y )を計算して 2 番地に 格納せよ we com Address 0 001 00000000 0 100 00000000 1 000 00000010 0 001 00000001 0 100 00000000 0 110 00000010 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

計算機構成 第 4 回アキュムレータマシン

テキスト第 3 章情報工学科天野英晴

Page 2: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

メモリ付きのデータパス

A B

YS

ACC

we

Address

clk

clk

com

0番地に X 、 1 番地に Y が入っている( SL X ) + ( SL Y )を計算して 2 番地に格納せよ

we com Address 0 001 00000000 0 100 00000000 1 000 00000010 0 001 00000001 0 100 00000000 0 110 00000010 1 000 00000010

命令(制御信号)を各クロックで外から与える必要があった。

Page 3: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

アキュムレータマシン

A B

YS

ACC

weclk

clk

com

PC

+1

clk

命令メモリ

命令

命令メモリから命令を読み出し(フェッチ: Fetch)実行( Execution) する

Page 4: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

命令の実行

A B

YS

ACC

weclk

clk

com

PC

+1

clk

命令メモリ

命令

0番地に X 、 1 番地に Y が入っているX+Y を計算して 2 番地に格納せよ

we com Address 0 001 00000000     0 番地 0 110 00000001     1 番地 1 000 00000010     2 番地

0 001 00000000

0

0

001THB

00000000

1

Page 5: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

命令の実行

A B

YS

ACC

weclk

clk

com

PC

+1

clk

命令メモリ

命令

0番地に X 、 1 番地に Y が入っているX+Y を計算して 2 番地に格納せよ

we com Address 0 001 00000000     0 番地 0 110 00000001     1 番地 1 000 00000010     2 番地

0 110 00000001

1

0

110ADD

00000001

2+

Page 6: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

命令の実行

A B

YS

ACC

we=1clk

clk

com

PC

+1

clk

命令メモリ

命令

0番地に X 、 1 番地に Y が入っているX+Y を計算して 2 番地に格納せよ

we com Address 0 001 00000000     0 番地 0 110 00000001     1 番地 1 000 00000010     2 番地

1 000 00000010

2

1

000THA

00000010

3

Page 7: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

分岐命令の導入• ACC の内容によって PC の内容を変更する

– 制御命令:分岐( Branch) と呼ぶ

BEZ X Branch Equal Zero if ACC==0 PC←X1001XXXXXXXX →opcode は適当に決めた( 例)  100100000001 ACC が 0 ならば PC は 1 にな

る→次は 1 番地の命令を実行→ 1 番地に「飛ぶ」BNZ X Branch Not equal Zero if ACC!=0 PC←X

1010XXXXXXXX→opcode は適当に決めた( 例) 101000000001 ACC が 0 でなければ PC は 1 に

なる→次は 1 番地の命令を実行→ 1 番地に「飛ぶ」

オペランドは飛び先(命令メモリの番地)を示す:今までの命令と全く違うことに注意!

Page 8: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

分岐命令によるアルゴリズムの実行

答←答 +m

n  ←  n -1

n=0?No

Yes

0001 00000000    LD   0 0110 00000001    ADD 1  1000 00000010 ST 0 0001 00000010 LD 2 0111 00000011 SUB 3 1000 00000010 ST 2 1010 00000000 BNZ 0 1001 00000111 BEZ 7  

0 番地  03 番地  1

1 番地  m2 番地  n  

ここは停止( ダイナミックストップ)

繰り返しによりアルゴリズムの実行が可能→  プログラム格納型( Stored Program) 方式

Page 9: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

A B

YS

ACC

we=0clk

clk

com

PC

+1

clk

命令メモリ

命令

0001 00000000    LD   0 0110 00000001    ADD 1  1000 00000010 ST 0 0001 00000010 LD 2 0111 00000011 SUB 3 1000 00000010 ST 2 1010 00000000 BNZ 0 1001 00000111 BEZ 7   

0001 00000000

0

0

001THA

00000000

1

0231

Page 10: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

A B

YS

0

we=0clk

clk

com

PC

+1

clk

命令メモリ

命令

0001 00000000    LD   0 0110 00000001    ADD 1  1000 00000010 ST 0 0001 00000010 LD 2 0111 00000011 SUB 3 1000 00000010 ST 2 1010 00000000 BNZ 0 1001 00000111 BEZ 7   

0110 00000001

1

0

110ADD

00000001

2

0231

Page 11: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

A B

YS

2

we=1clk

clk

com

PC

+1

clk

命令メモリ

命令

0001 00000000    LD   0 0110 00000001    ADD 1  1000 00000000 ST 0 0001 00000010 LD 2 0111 00000011 SUB 3 1000 00000010 ST 2 1010 00000000 BNZ 0 1001 00000111 BEZ 7   

1000 00000000

2

1

110ADD

00000000

3

0231

Page 12: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

A B

YS

2

we=0clk

clk

com

PC

+1

clk

命令メモリ

命令

0001 00000000    LD   0 0110 00000001    ADD 1  1000 00000000 ST 0 0001 00000010 LD 2 0111 00000011 SUB 3 1000 00000010 ST 2 1010 00000000 BNZ 0 1001 00000111 BEZ 7   

0001 00000010

3

0

001THB

00000010

4

2231

Page 13: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

A B

YS

3

we=0clk

clk

com

PC

+1

clk

命令メモリ

命令

0001 00000000    LD   0 0110 00000001    ADD 1  1000 00000010 ST 0 0001 00000010 LD 2 0111 00000011 SUB 3 1000 00000010 ST 2 1010 00000000 BNZ 0 1001 00000111 BEZ 7   

0111 00000011

4

0

111SUB

00000011

5

2231

Page 14: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

A B

YS

2

we=1clk

clk

com

PC

+1

clk

命令メモリ

命令

0001 00000000    LD   0 0110 00000001    ADD 1  1000 00000000 ST 0 0001 00000010 LD 2 0111 00000011 SUB 3 1000 00000010 ST 2 1010 00000000 BNZ 0 1001 00000111 BEZ 7   

1000 00000010

5

1

000ST

00000010

6

0231

Page 15: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

A B

YS

2

we=0clk

clk

com

PC

+1

clk

命令メモリ

命令

0001 00000000    LD   0 0110 00000001    ADD 1  1000 00000000 ST 0 0001 00000010 LD 2 0111 00000011 SUB 3 1000 00000010 ST 2 1010 00000000 BNZ 0 1001 00000111 BEZ 7   

1010 00000000

6

0

---

7

0231

en=0

=0?Dec.

00000000

operand

1010

BNZ 命令の実行

マルチプレクサ

データを選択

命令デコーダ1010 を検出

ACC=0 の結果でマルチプレクサを制

Page 16: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

マルチプレクサと命令デコーダ

A BY

S

S=0 : Y ←AS=1 : Y←B

Y = S?A : B;条件構文(マルチプレクサ文)

命令デコーダ

opcode

=0?ACC

zero PC+1 operand

PC

opcode==1001 &zero |opcode==1010&~zero

ACC の en 信号メモリの we 信号もついでに制御させてしまおう!

Page 17: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

アキュムレータマシンの Verilog 記述

入出力とレジスタ、ワイヤの宣言`include “def.h”module accum( input clk, input rst_n, input [`OPCODE_W-1:0] opcode, input[`ADDR_W-1:0] operand, input[`DATA_W-1:0] ddatain, output we, output [`ADDR_W-1:0] pcout, output [`DATA_W-1:0] accout);reg[`DATA_W-1:0] accum;reg[`ADDR_W-1:0] pc;wire [`DATA_W-1:0] alu_y;wire op_st, op_bez, op_bnz;

命令メモリ

データメモリ

命令メモリのアドレス

命令のデコード信号

Page 18: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

アキュムレータマシンの Verilog 記述

デコードと入出力、 ALU の接続assign op_st = opcode== `OP_ST; assign op_bez = opcode== `OP_BEZ;assign op_bnz = opcode==`OP_BNZ;

assign we = op_st;assign accout = accum;assign pcout = pc;alu alu_1(.a(accum), .b(datain), .s(opcode[`SEL_W-1:0], .y(alu_y));

def.h

`define OP_ST 4’b1000`define OP_BEZ 4’b1001`define OP_BNZ 4’b1010…

Page 19: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

アキュムレータマシンの Verilog 記述

レジスタの制御always @(posedge clk or negedge rst_n) begin if(!rst_n) pc <=0; else if (op_bez & (accum==0) | op_bnz & (accum!=0)) pc <= oprand; else pc <= pc+1; end

always @(posedge clk or negedge rst_n) begin if(rst_n) accum <=0; else if(!op_st & !op_bnz & !op_bnz) accum <= alu_y; end

endmodule

pc の制御

acc の制御

Page 20: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

テストベンチでのメモリの記述reg [`DATA_W-1:0] dmem[0:`DEPTH-1];

reg [`INST_W-1:0] imem[0:`DEPTH-1];

….

assign {opcode, operand} = imem[pcout];

….

initial begin

….

$readmemh(“dmem.dat”,dmem);

$readmemb(“imem.dat”,imem);

0001_000000000110_000000011000_000000000001_000000100111_000000111000_00000010…

imem.dat:12bit

0000000200030001…

dmem.dat:16bit

Page 21: 計算機構成 第 4 回 アキュムレータマシン テキスト第 3 章

演習課題

演習1– A を 0 番地、 B を 1 番地のデータとして (SR

A) + (SR B) のデータを 2 番地にしまうプログラムを実行せよ

• 48 ページ演習 3-5– 1番地に X が格納されている。 X+(X-1)+(X-

2)+…2+1 を計算するプログラムを実行せよ• 提出物は imem.dat