1 / 22

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

計算機構成 第 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.

ellema
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 計算機構成 第3回データパス:計算をするところテキスト14‐19、29‐35計算機構成 第3回データパス:計算をするところテキスト14‐19、29‐35 情報工学科 天野英晴

  2. Y S A B ALUで色々な演算ができる • しかし、2つの入力データに限定される X+Y 110 X Y

  3. 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

  4. Q Q Q D D D レジスタへのデータの書き込み 途中結果を蓄えるためにレジスタを導入 レジスタ=D.F.Fの集合 clk レジスタ clk 新しいデータ 新しいデータ 新しいデータ 入力データ 書き込み 書き込み 書き込み Q Q Q … clkの立ち上がり(立下り)に同期して書き込む →CPUの状態はclkに同期して変化する D D D

  5. Y S A B レジスタの利用 clk ACC ACC:アキュムレータ 結果を蓄えるレジスタ

  6. メモリの構成 ACCを使った構造も万能ではない→ (SLX)+(SLY)はうまく行かない メモリに、入力データ、中間結果を溜めておくためのメモリ DO 幅 n メモリは幅wbit, 深さ2 この例はw=16, n=8 0 1 8 深さ2=256 (本当はもっとずっと多数のデータを 格納する) 2 Address 8bitならば … 255 DI clk we メモリのモデル

  7. メモリからの読み出し 1100101010100001 DO 幅 0 1 1100101010100001 Address=1ならば1のところに格納 された11001010がDOから読み出される 2 Address 1 … 256 DI clk we メモリのモデル

  8. メモリへの書き込み DO 幅 0 1 we=1の時、Address=2 ならば2番地に clkが0→1の変化時にDIからの値が 書き込まれる タイミングはレジスタと同じ 1100101010100001 2 Address 2 … 256 DI clk we=1 1100101010100001 メモリのモデル

  9. Y S A B メモリ付きのデータパスでの計算(p.18 例題2-3) 0番地にX、1番地にYが入っている X+Yを計算して2番地に格納せよ we com Address 0 001 00000000 0 110 00000001 1 000 00000010 001 THB com clk ACC 0 Address … clk we

  10. Y S A B メモリ付きのデータパス 0番地にX、1番地にYが入っている X+Yを計算して2番地に格納せよ we com Address 0 001 00000000 0 110 00000001 1 000 00000010 110 ADD com + clk ACC 1 Address … clk we

  11. Y S A B メモリ付きのデータパス 0番地にX、1番地にYが入っている X+Yを計算して2番地に格納せよ we com Address 0 001 00000000 0 110 00000001 1 000 00000010 000 THA com + clk ACC 2 Address … clk we=1

  12. Y S A B メモリ付きのデータパス(p.18 例題2-4) 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 com clk ACC Address … clk we

  13. 命令の形にする 0番地にX、1番地にYが入っている X+Yを計算して2番地に格納せよ we com Address 0 001 00000000 0 110 00000001 1 000 00000010 操作を表す部分:op-code オプコード 操作対象を表す部分:operand オペランド 分かりやすい記号で書く:ニーモニックと呼ぶ 0000 NOP 0001 LD ( Load)メモリからACCにデータを読み込む 0010AND 0011OR 0100SL この時はオペランドは何でも良い 0101SR この時はオペランドは何でも良い 0110ADD 0111SUB 1000ST (Store)メモリへACCからデータを書き込む

  14. プログラムの形にする 0番地にX、1番地にYが入っている X+Yを計算して2番地に格納せよ we com Address 0 001 00000000LD 0 0 110 00000001ADD 1 1 000 00000010ST 2 0番地にX、1番地にYが入っている (SL X)+(SL Y)を計算して2番地に 格納せよ we com Address 0 001 00000000LD 0 0 100 00000000SL 1 000 00000010ST 2 0 001 00000001LD 1 0 100 00000000SL 0 110 00000010ADD 2 1 000 00000010ST 2 機械語 アセンブラ表記

  15. レジスタの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になると初期化(非同期リセット)

  16. always文 initial文は最初の一回のみ実行され、通常テストベンチにのみ用いる always @(posedge clk or negedge rst_n) begin if(!rst_n) accum <= 16’b0; else accum <= alu_y; end • always文は@以下の条件が成り立つときに常に実行される • posedge 立ち上がり negedge 立ち上がり • or, and はここだけで使う特殊な条件指定論理 • 決まった形式以外は使わない! レジスタに対する値の書き込みは<=を使って always文の中で行う always文中ではif文やcase文が使える なぜか? レジスタに対する代入だから→プログラム言語の変数と同じで代入されない場合の値が決まっている

  17. メモリの記述 幅16ビット、深さ256のメモリ宣言 reg [15:0] dmem [0:255]; assign do = dmem[daddr]; always @(posedge clk) if(we) dmem[daddr] <= ddataout; 2番地の上位8ビットは? dmem[2][15:8] メモリは通常、合成の対象としない→テストベンチで記述 アドレスdaddrからのデータ読み出し we=1の時のクロック立ち上がりでデータの書き込み

  18. Y S A B データパスのVerilog記述 com この部分を datapath で記述 clk ACC Address メモリはテストベンチに 記述 … clk we

  19. データパスの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を実体化 アキュムレータへのかきこみ

  20. テストベンチのVerilog記述1 `timescale 1ns/1ps module 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; end datapath datapath_1(.clk(clk), .rst_n(rst_n), .com(com), .datain(dmem[addr], .accout(accout)); …. メモリの宣言 clkの生成 データパスの実体化

  21. テストベンチのVerilog記述2 initial begin … $readmemh(“dmem.dat”,dmem); ファイルdmem.datからメモリdmemにデータを設定する $readmemb →2進数でファイル中にデータを書く $readmemh→16進数でファイル中にデータを書く {we,com,addr}<= {`DISABLE,`ALU_THB,`ADDR_W’h00}; … 連結、バス化 {X,Y,Z} まとめてバスとして扱える 右辺にも左辺にも使える

  22. 演習課題 • 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を設計せよ

More Related