22
計計計計計 計 3 計 計計計計計 計計計計計計計計 計計計計 14‐19 29‐35 計計計計計 計計計計

計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

  • Upload
    ellema

  • View
    73

  • Download
    0

Embed Size (px)

DESCRIPTION

計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35. 情報工学科 天野英晴. Y. S. A. B. ALU で色々な演算ができる. しかし、 2 つの入力データに限定される. X + Y. 110. X. Y. Y. Y. Y. S. S. S. A. A. A. B. B. B. たくさん ALU を使う方法 →大変だし一般性がない. X+Y-W+Z. 111. X + Y. W ー Z. 110. 111. X. Y. W. Z. Q. Q. Q. D. D. D. - PowerPoint PPT Presentation

Citation preview

Page 1: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

計算機構成 第 3 回データパス:計算をするところ

テキスト 14‐19 、 29‐35情報工学科

天野英晴

Page 2: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

ALU で色々な演算ができる

• しかし、 2 つの入力データに限定される

A B

YS

X Y

110

X+ Y

Page 3: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

たくさん ALU を使う方法→大変だし一般性がない

A B

YS

A B

YS

A B

YS

X Y W Z

X+ Y Wー Z

X+Y-W+Z

110

111

111

Page 4: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

レジスタへのデータの書き込み

レジスタ

書き込み 書き込み 書き込み

新しいデータ新しいデータ新しいデータclk

入力データ

clk

clkの立ち上がり(立下り)に同期して書き込む→CPUの状態は clkに同期して変化する

途中結果を蓄えるためにレジスタを導入レジスタ= D.F.Fの集合

D

Q

D

Q

D

Q

D

Q

D

Q

D

Q…

Page 5: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

レジスタの利用

A B

YS

ACC

S B ACC の内容

001 X X

110 Y X+Y

111 W X+Y-W

110 Z X+Y-W+Z

ACC:アキュムレータ結果を蓄えるレジスタ

clk

Page 6: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

メモリの構成

ACCを使った構造も万能ではない→ ( SL  X)+( SL  Y)はうまく行かないメモリに、入力データ、中間結果を溜めておくためのメモリ

メモリのモデル

DI

DO

we

Address

8bitならば

0 1 2

255

幅メモリは幅 wbit, 深さ 2この例は w=16, n=8

n

深さ 2   =256(本当はもっとずっと多数のデータを格納する)

clk

8

Page 7: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

メモリからの読み出し

メモリのモデル

DI

DO

we

Address

0 1 2

256

Address =1ならば1のところに格納された 11001010 が DO から読み出される

1100101010100001

clk

1100101010100001

Page 8: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

メモリへの書き込み

メモリのモデル

DI

DO

we=1

Address

2

0 1 2

256

we=1の時、 Address= 2 ならば 2番地にclkが 0→1の変化時に DIからの値が書き込まれる

タイミングはレジスタと同じ

clk

1100101010100001

1100101010100001

Page 9: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

メモリ付きのデータパスでの計算(p.18 例題 2-3)

A B

YS

ACC

we

Address

clk

clk

com

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

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

0

001THB

Page 10: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

メモリ付きのデータパス

A B

YS

ACC

we

Address

clk

clk

com

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

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

1

110ADD

+

Page 11: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

メモリ付きのデータパス

A B

YS

ACC

we=1

Address

clk

clk

com

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

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

2

000THA

+

Page 12: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

メモリ付きのデータパス(p.18 例題 2-4)

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 13: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

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

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

操作を表す部分: op-codeオプコード操作対象を表す部分: operandオペランド

0000 NOP0001 LD  ( Load )メモリから ACC にデータを読み込む0010   AND  0011   OR0100   SL  この時はオペランドは何でも良い0101   SR  この時はオペランドは何でも良い0110   ADD0111   SUB1000   ST  ( Store )メモリへ ACC からデータを書き込む

分かりやすい記号で書く:ニーモニックと呼ぶ

Page 14: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

プログラムの形にする0番地に X、 1番地に Yが入っているX+Yを計算して 2番地に格納せよ

we com Address 0 001 00000000    LD 0 0 110 00000001    ADD 1 1 000 00000010    ST 2

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

we com Address 0 001 00000000  LD 0 0 100 00000000  SL  1 000 00000010  ST 2 0 001 00000001  LD 1 0 100 00000000  SL 0 110 00000010  ADD 2 1 000 00000010  ST 2

アセンブラ表記

機械語

Page 15: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

レジスタの Verilog記述

reg [15:0] accum;

assign accout = accum;

always @(posedge clk or negedge rst_n) begin if(!rst_n) accum <= 16’b0; else accum <= alu_y; end

宣言

読み出しクロックの立ち上げ同

期して書き込み

rst_nが 0になると初期化(非同期リセッ

ト)

Page 16: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

always 文

always @(posedge clk or negedge rst_n)

begin

if(!rst_n) accum <= 16’b0;

else accum <= alu_y;

end

initial 文は最初の一回のみ実行され、通常テストベンチにのみ用いる

always文は@以下の条件が成り立つときに常に実行されるposedge 立ち上がり  negedge 立ち上がりor, and はここだけで使う特殊な条件指定論理

決まった形式以外は使わない!

レジスタに対する値の書き込みは<=を使っ

てalways 文の中で行う

always 文中では if 文やcase 文が使える

なぜか?レジスタに対する代入だから→プログラム言語の変数と同じで代入されない場合

の値が決まっている

Page 17: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

メモリの記述reg [15:0] dmem [0:255];

assign do = dmem[daddr];

always @(posedge clk) if(we) dmem[daddr] <= ddataout;

2番地の上位 8ビットは?dmem[2][15:8]

メモリは通常、合成の対象としない→テストベンチで記述

幅 16 ビット、深さ256 のメモリ宣言

アドレス daddrからのデータ読み出

しwe=1 の時のクロック立ち上がりでデータの書き込み

Page 18: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

データパスの Verilog記述

A B

YS

ACC

we

Address

clk

clk

com

この部分をdatapathで記述

メモリはテストベンチに記述

Page 19: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

データパスの Verilog記述module datapath( input clk, input rst_n, input[15:0] datain, input [2:0] com, output[15:0] accout); reg [15:0] accum; wire [15:0] alu_y;

assign accout = accum;wire [15:0] alu_y;

assign accout = accum;alu alu_1( .a(accum), .b(datain), .s(com), .y(alu_y));

always @(posedge clk or negedge rst_n) begin if(!rst_n) accum <= 16’b0; else accum <= alu_y; end

ALU を実体化

アキュムレータへのかきこみ

Page 20: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

テストベンチの Verilog記述 1`timescale 1ns/1psmodule test;parameter STEP =10; …reg[15:0] dmem[0:255];always @(posedge clk) begin if(we) dmem[addr] <= accout; end

always #(STEP/2) begin clk <= ~clk;enddatapath datapath_1(.clk(clk), .rst_n(rst_n), .com(com), .datain(dmem[addr], .accout(accout));….

clkの生成

データパスの実体化

メモリの宣言

Page 21: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

テストベンチの Verilog記述 2initial begin… $readmemh(“dmem.dat”,dmem);ファイル dmem.datからメモリ dmemにデータを設定する$readmemb →  2進数でファイル中にデータを書く$readmemh→16進数でファイル中にデータを書く

{we,com,addr}<= {`DISABLE,`ALU_THB,`ADDR_W’h00};…

連結、バス化{X,Y,Z} まとめてバスとして扱える右辺にも左辺にも使える

Page 22: 計算機構成 第 3 回 データパス:計算をするところ テキスト 14‐19 、 29‐35

演習課題• 35 ページ演習 2-9

– A を 0 番地、 B を 1 番地のデータとして (SR A) OR (SR B) のデータを 2 番地にしまう命令の実行をシミュレーションせよ

• 35 ページ演習 2-10– A,B を上記と同じとし、( A+B) OR (A-B) の

結果を 2 番地にしまう命令の実行をシミュレーションせよ

• 1から6まで数えて、 stop 入力で停止するサイコロ dice を設計せよ