1 / 37

マイクロプロセッサ

マイクロプロセッサ. 第 8 回. プロセッサ:データパスと制御(その 2 ) HDL の導入. 関根 優年 田向 権. R 形式命令とメモリ参照命令用のデータパス統合. ALU 操作. 3. MemtoReg. 読出 reg 1. 読出 reg 1. レジスタ. ゼロ判定. 命令. MemWrite. 読出 reg2. ALUSrc. ALU. ALU 結果. M U X. 読出 reg2. 読出 データ. データ メモリ. M U X. 書込 reg. アドレス. 書込 データ. 書込 データ.

Download Presentation

マイクロプロセッサ

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. マイクロプロセッサ 第8回 プロセッサ:データパスと制御(その2) HDLの導入 関根 優年 田向 権

  2. R形式命令とメモリ参照命令用のデータパス統合R形式命令とメモリ参照命令用のデータパス統合 ALU操作 3 MemtoReg 読出 reg1 読出 reg1 レジスタ ゼロ判定 命令 MemWrite 読出 reg2 ALUSrc ALU ALU結果 M U X 読出 reg2 読出 データ データ メモリ M U X 書込 reg アドレス 書込 データ 書込 データ RegWrite 符号 拡張 MemRead 32 16

  3. 命令フェッチ部分の追加 加算 4 命令 メモリ 命令アドレス PC ALU操作 3 MemtoReg 読出 reg1 読出 reg1 レジスタ ゼロ判定 MemWrite 命令 読出 reg2 ALUSrc ALU ALU結果 M U X 読出 reg2 読出 データ データ メモリ M U X 書込 reg アドレス 書込 データ 書込 データ RegWrite 符号 拡張 MemRead 32 16

  4. MIPSアーキテクチャの単純なデータパス PCSrc M U X 加算 4 加算 2ビット 左に シフト 命令 メモリ 命令アドレス PC ALU操作 3 MemtoReg 読出 reg1 読出 reg1 レジスタ ゼロ判定 MemWrite 命令 ALUSrc 読出 reg2 ALU ALU結果 M U X 読出 reg2 読出 データ データ メモリ M U X 書込 reg アドレス 書込 データ 書込 データ RegWrite 符号 拡張 MemRead 32 16 条件分岐のデータパスを追加

  5. ALUの制御 6ビット 5ビット 5ビット 6ビット 5ビット 5ビット 主制御部で opコードからALUop(2ビット)を作る ALU op(2ビット) 00:(load,store),01:beq, 10:機能コードfunctの演算(6ビット) キャリーイン a 複数レベルによる デコード法 0 入力 結果 1 b + 0 2 1 3 より小 セット オーバー フロー オーバーフロー 検出 最上位ビットの1ビットALU

  6. ALU制御ユニット ALU制御ビットの構成

  7. ALU制御ユニット ALUの制御入力とその機能 X : don’t care

  8. 主制御ユニットの設計 R形式 31-2625-2120-1615-1110-65-0 ロード/ストア 31-2625-2120-1615-0 分岐 31-2625-2120-1615-0 • 命令操作コード(opecode) :31-26 • 読み出しレジスタ: rsとrt:(25-21), (20-16) • ロード/ストアのベースアドレス: 25-21 • Beqのオフセットは15-0 • Dest(書き込み先)は20-16(ロード),15-11(rd)

  9. マルチプレクサとALU制御線を加えたデータパスマルチプレクサとALU制御線を加えたデータパス PCSrc M U X 0 加算 4 加算 2ビット 左に シフト 1 命令 メモリ 命令アドレス PC RegWrite 命令 [25:21] MemtoReg 読出 reg1 読出 reg1 レジスタ ゼロ判定 命令 [20:16] MemWrite ALUSrc 読出 reg2 命令[31:0] ALU 0 ALU結果 M U X M U X 読出 reg2 読出 データ データ メモリ M U X 書込 reg 0 アドレス 0 ALU操作 1 書込 データ 1 3 命令 [15:11] 1 書込 データ 符号 拡張 RegDst 命令 [15:0] MemRead 32 16 ALU 制御 命令 [5:0] ALUOp

  10. 制御ユニットを加えたデータパス 加算 M U X 4 0 RegDst 制御 Branch 加算 MemRead 命令 [31:26] 2ビット 左に シフト 1 MemtoReg ALUOp 命令 メモリ 命令アドレス MemWrite PC AND ALUSrc RegWrite 命令 [25:21] 読出 reg1 読出 reg1 レジスタ ゼロ判定 命令 [20:16] 読出 reg2 命令[31:0] 1 ALU ALU結果 M U X M U X 読出 reg2 読出 データ データ メモリ M U X 書込 reg 0 アドレス 0 ALU操作 1 書込 データ 0 3 命令 [15:11] 1 書込 データ 符号 拡張 命令 [15:0] 32 16 ALU 制御 命令 [5:0]

  11. 他の制御信号について 命令操作コードと制御信号 Branch : 条件分岐を起こすかどうかを指定する制御信号。ALUからのゼロ判定との論理和をPCSrcへ

  12. RegDst R形式 31-2625-2120-1615-1110-65-0 ロード/ストア 31-2625-2120-1615-0 分岐 31-2625-2120-1615-0 命令 メモリ 命令アドレス 命令 [25:21] 読出 reg1 読出 reg1 レジスタ 命令 [20:16] 読出 reg2 M U X 読出 reg2 書込 reg 命令[31:0] 0 1 書込 データ 命令 [15:11] RegDst 命令 [15:0] 16

  13. RegWrite R形式 31-2625-2120-1615-1110-65-0 ロード/ストア 31-2625-2120-1615-0 分岐 31-2625-2120-1615-0 命令 メモリ RegWrite 命令アドレス 命令 [25:21] 読出 reg1 読出 reg1 レジスタ rd で指定されたレジスタ に書き込みを行う 命令 [20:16] 読出 reg2 M U X 読出 reg2 書込 reg 命令[31:0] 0 1 書込 データ 命令 [15:11] RegDst 命令 [15:0] 16

  14. ALUSrc R形式 31-2625-2120-1615-1110-65-0 ロード/ストア 31-2625-2120-1615-0 分岐 31-2625-2120-1615-0 命令 メモリ RegWrite 命令アドレス 命令 [25:21] 読出 reg1 読出 reg1 レジスタ ALUSrc 命令 [20:16] 読出 reg2 ALU結果 ALU M U X 0 M U X 読出 reg2 書込 reg 命令[31:0] 0 ALU操作 1 R形式の演算か 実行アドレス 計算をするか 3 書込 データ 1 命令 [15:11] 符号 拡張 RegDst 命令 [15:0] 16

  15. MIPS命令の形式 I

  16. MIPS命令の形式 II R形式(算術命令) I形式 J形式

  17. R形式命令の最初の実行ステップ 加算 加算 M U X M U X 4 4 0 0 RegDst RegDst 制御 制御 Branch Branch 加算 加算 MemRead MemRead 命令 [31:26] 命令 [31:26] 2ビット 左に シフト 2ビット 左に シフト 1 1 MemtoReg MemtoReg ALUOp ALUOp 命令 メモリ 命令 メモリ 命令アドレス 命令アドレス MemWrite MemWrite PC PC AND AND ALUSrc ALUSrc RegWrite RegWrite 命令 [25:21] 命令 [25:21] 命令 [25:21] 読出 reg1 読出 reg1 読出 reg1 読出 reg1 レジスタ レジスタ ゼロ判定 ゼロ判定 命令 [20:16] 命令 [20:16] 読出 reg2 読出 reg2 命令[31:0] 命令[31:0] 1 ALU ALU 1 ALU結果 ALU結果 M U X M U X M U X M U X 読出 reg2 読出 reg2 読出 データ 読出 データ データ メモリ データ メモリ M U X M U X 書込 reg 書込 reg 0 0 アドレス アドレス 0 0 ALU操作 ALU操作 1 1 書込 データ 書込 データ 0 0 3 3 命令 [15:11] 命令 [15:11] 1 1 書込 データ 書込 データ 符号 拡張 符号 拡張 命令 [15:0] 命令 [15:0] 32 32 16 16 ALU 制御 ALU 制御 命令 [5:0] 命令 [5:0] 命令メモリからのフェッチとPCの繰り上げ

  18. R形式命令の2番目の実行ステップ 加算 M U X 4 0 RegDst 制御 Branch 加算 MemRead 命令 [31:26] 2ビット 左に シフト 1 MemtoReg ALUOp 命令 メモリ 命令アドレス MemWrite PC AND ALUSrc RegWrite 命令 [25:21] 読出 reg1 読出 reg1 レジスタ ゼロ判定 命令 [20:16] 読出 reg2 命令[31:0] 1 ALU ALU結果 M U X M U X 読出 reg2 読出 データ データ メモリ M U X 書込 reg 0 アドレス 0 ALU操作 1 書込 データ 0 3 命令 [15:11] 1 書込 データ 符号 拡張 命令 [15:0] 32 16 ALU 制御 命令 [5:0] 加算 M U X 4 0 RegDst 制御 Branch 加算 MemRead 命令 [31:26] 2ビット 左に シフト 1 MemtoReg ALUOp 命令 メモリ 命令アドレス MemWrite PC AND ALUSrc RegWrite 命令 [25:21] 読出 reg1 読出 reg1 レジスタ ゼロ判定 命令 [20:16] 読出 reg2 命令[31:0] 1 ALU ALU結果 M U X M U X 読出 reg2 読出 データ データ メモリ M U X 書込 reg 0 アドレス 0 ALU操作 1 書込 データ 0 3 命令 [15:11] 1 書込 データ 符号 拡張 命令 [15:0] 32 16 ALU 制御 命令 [5:0] レジスタファイルからの2つのソースレジスタの読出し

  19. R形式命令の3番目の実行ステップ 加算 M U X 4 0 RegDst 制御 Branch 加算 MemRead 命令 [31:26] 2ビット 左に シフト 1 MemtoReg ALUOp 命令 メモリ 命令アドレス MemWrite PC AND ALUSrc RegWrite 命令 [25:21] 読出 reg1 読出 reg1 レジスタ ゼロ判定 命令 [20:16] 読出 reg2 命令[31:0] ALU 1 ALU結果 M U X M U X 読出 reg2 読出 データ データ メモリ M U X 書込 reg 0 アドレス 0 1 書込 データ 0 3 命令 [15:11] 1 書込 データ 符号 拡張 命令 [15:0] 32 16 ALU 制御 命令 [5:0] レジスタデータに対するALU演算

  20. R形式命令の最後の実行ステップ 加算 M U X 4 0 RegDst 制御 Branch 加算 MemRead 命令 [31:26] 2ビット 左に シフト 1 MemtoReg ALUOp 命令 メモリ 命令アドレス MemWrite PC AND ALUSrc RegWrite 命令 [25:21] 読出 reg1 読出 reg1 レジスタ ゼロ判定 命令 [20:16] 読出 reg2 命令[31:0] 1 ALU ALU結果 M U X M U X 読出 reg2 読出 データ データ メモリ M U X 書込 reg 0 アドレス 0 1 書込 データ 0 3 命令 [15:11] 1 書込 データ 符号 拡張 命令 [15:0] 32 16 ALU 制御 命令 [5:0] 結果の書込み

  21. ロード命令でのデータパス 加算 M U X 4 0 RegDst 制御 Branch 加算 MemRead 命令 [31:26] 2ビット 左に シフト 1 MemtoReg ALUOp 命令 メモリ 命令アドレス MemWrite PC AND ALUSrc RegWrite 命令 [25:21] 読出 reg1 読出 reg1 レジスタ ゼロ判定 命令 [20:16] 読出 reg2 命令[31:0] 1 ALU ALU結果 M U X M U X 読出 reg2 読出 データ データ メモリ M U X 書込 reg 0 アドレス 0 1 書込 データ 0 3 命令 [15:11] 1 書込 データ 符号 拡張 命令 [15:0] 32 16 ALU 制御 命令 [5:0]

  22. Branch-on-equal命令用のデータパス 加算 M U X 4 0 RegDst 制御 Branch 加算 MemRead 命令 [31:26] 2ビット 左に シフト 1 MemtoReg ALUOp 命令 メモリ 命令アドレス MemWrite PC AND ALUSrc RegWrite 命令 [25:21] 読出 reg1 読出 reg1 レジスタ ゼロ判定 命令 [20:16] 読出 reg2 命令[31:0] 1 ALU ALU結果 M U X M U X 読出 reg2 読出 データ データ メモリ M U X 書込 reg 0 アドレス 0 1 書込 データ 0 3 命令 [15:11] 1 書込 データ 符号 拡張 命令 [15:0] 32 16 ALU 制御 命令 [5:0]

  23. 制御ユニットの仕上げ 制御関数の真理値表

  24. ジャンプ命令の追加 ジャンプ先のアドレス[27-0] 2ビット 左に シフト ジャンプ先のアドレス[31-28] || [27-0] 命令[25-0] 26 28 PC+4[31-28] 1 M U X M U X 4 加算 0 RegDst Jump 制御 Branch 加算 MemRead 命令 [31:26] 2ビット 左に シフト 0 1 MemtoReg ALUOp 命令 メモリ 命令アドレス MemWrite PC AND ALUSrc RegWrite 命令 [25:21] 命令 [25:21] 読出 reg1 読出 reg1 レジスタ ゼロ判定 命令 [20:16] 読出 reg2 命令[31:0] ALU 1 ALU結果 M U X M U X 読出 reg2 読出 データ データ メモリ M U X 書込 reg 0 アドレス 0 ALU操作 1 書込 データ 0 3 命令 [15:11] 1 書込 データ 符号 拡張 命令 [15:0] 32 16 ALU 制御 命令 [5:0]

  25. 回路図から記述へ • ブロック図,論理回路図:作成が大変 • 回路の動作は明記されていない • 動作を読み解く必要がある. • 同時に多数のブロックの動作理解が必要 • ソフトの様に記述したい • 逐次的な動作順序の記述 • 並列的な動作の記述 • 階層的な記述 • データーの流れを記述

  26. Hardware Description Language(HDL) • LSI設計を計算機で処理するために考案されてきた • 1960年頃,大型計算機の設計時に提案された.Design Description Language (DDL)  ⇒ 当時は,計算機の能力が乏しく提案だけで終わってしまった. • 1980年代,LSI設計自動化ツールに使用され急速に発展 • 配置配線ツール,論理合成,RTLシミュレータ • ソフトからの高位合成,テスト生成 • 各企業毎に独自の言語,  • 例)Hierarchical Hardware Design Language(H2DL) 東芝 • Verilog-HDL, VHDL: • 90年代,米国のEDAベンダーが市場を席捲.2つの言語が支配. 技術的理由より政治的,経済的に米国製言語が選択された.

  27. モジュールの記述(Verilog) • 回路は入力出力があり,内部と外部との境界が必ずある. module LSI_A (in1, in2, in3, …, out1,out2,out3,…,); input in1,in2,in3,…, ; output out1,out2,out3,…,;     内部の回路構造の記述 endmodule

  28. 抽象レベルの異なる記述方法 module AND2 (in1, in2, out); input in1,in2; output out; wire in1, in2, out; //---------------------------------------------------// and u1 ( out, in1, in2 ); // 構造記述 //---------------------------------------------------// assign out = in1 & in2 ;//Register Transfer Level 記述   //---------------------------------------------------// reg out; always @(in1, in2) //Behavior (動作) 記述  out = in1 & in2 ; //---------------------------------------------------// endmodule;

  29. 4bit 加算器の例 module adder4( in1, in2, sum, zero); endmodule input [3:0] in1, in2; output [4:0] sum; output zero; reg [4:0] sum; assign zero = (sum == 0)? 1 : 0; initial sum = 0; always @(in1 or in2) // in1またはin2が変化したら sum = in1 + in2;

  30. Half Adder module half_adder (iX, iY, oS, oC); endmodule input iX, iY; // 二つの1ビット入力 output oS, oC; // Sum, Carry,二つの1ビット出力 assign oS = iX ^ iY; // iX xor iY を oSに代入 assign oC = iX & iY; // iX and iY を oCに代入 harf_adder iX oS oC iY

  31. Full Adder module full_adder (iX, iY, iC, oS, oC); endmodule input iX, iY; // 二つの1ビット入力 input iC; // Carry 入力 output oS, oC; // Sum, Carry,二つの1ビット出力 assign oS = 0; // 右辺を正しい論理式にせよ assign oC = 0; full_adder iX oS iY oC iC

  32. half_adder half_adder u2 u1 iX iX oS oS oC oC iY iY Half Adderを組み合わせて作ったFull Adder module full_adder (iX, iY, iC, oS, oC); endmodule input iX, iY; // 二つの1ビット入力 input iC; // Carry 入力 output oS, oC; // Sum, Carry,二つの1ビット出力 wire s1, c1, c2; half_adder u1 (.iX(iX), .iY(iY), .oS(s1), .oC(c1)); half_adder u2 (.iX(s1), .iY(iC), .oS(oS), .oC(c2)); assign oC = c1 | c2; // c1 or c2 full_adder iC oS c2 s1 iX oC c1 iY

  33. 4bit adder 構造記述 module adder4( in1, in2, sum, zero); endmodule input [3:0] in1, in2; output [4:0] s; output zero; reg [4:0] s; wire c0, c1, c2; Full adderをカスケード接続し, 4ビット加算器を完成せよ. ※in1[1] // in1の1ビット目を指定 half_adder u1( .iX(in1[0]), .iY(in2[0]), .oC(c0), .oS(s[0])); full_adder u2 ( .iX( ), .iY( ), .iC( ), .oC( ), .oS( )); full_adder u3 ( .iX( ), .iY( ), .iC( ), .oC( ), .oS( )); full_adder u4 ( .iX( ), .iY( ), .iC( ), .oC( ), .oS( )); nor u5 ( zero, s[0], s[1], s[2], s[3], s[4] ); // zero = s[0] nor s[1] nor s[2] nor s[3] nor s[4]

  34. マルチプレクサの例 module mult4to1( in1, in2, in3, in4, sel, out); endmodule input [31:0] in1, in2, in3, in4; // 32bit 入力4つ input [1:0] sel; // セレクタ信号 output reg [31:0] out; // 32bit 出力 always @ (in1, in2, in3, in4, sel) case (sel) // 4対1マルチプレクサ 0: out <= in1; 1: out <= in2; 2: out <= in3; default: out <= in4; // 0~2のどれでもない場合 endcase

  35. 32ビットALU ALU操作 a ゼロ判定 結果 オーバーフロー b キャリーアウト 冬休み課題 必須課題 • 以下は,これまでに説明したMIPSアーキテクチャ・データパスに含まれるALUである.  このALUをVerilog HDLを用いて記述せよ. ※モジュールや信号名は適当に設定せよ. 配点上,未提出者は単位取得が困難になるので,全員必ず提出すること.

  36. 冬休み課題 挑戦課題 • 次ページに示す,MIPSアーキテクチャについて,可能な限りVerilog HDLで記述してみよ.提出は任意. 以下注意事項(必須,挑戦課題共通) • モジュール単位で部品を設計すること • ソースコードのみではなく,読みやすいように適宜コメントを入れること • 文法ミスや細かい記述ミスによる減点は行わない • 加点方式で評価するので,Verilogでの記述が分からない場合でも,どのような設計を行いたいのかを記すと良い • ワープロ可であるが友人やネットからのコピペは絶対禁止,発覚した際には試験のカンニングと同様の対応を取る • 提出日:2012年1月12日

  37. 制御ユニットを加えたデータパス 加算 M U X 4 0 RegDst 制御 Branch 加算 MemRead 命令 [31:26] 2ビット 左に シフト 1 MemtoReg ALUOp 命令 メモリ 命令アドレス MemWrite PC AND ALUSrc RegWrite 命令 [25:21] 読出 reg1 読出 reg1 レジスタ ゼロ判定 命令 [20:16] 読出 reg2 命令[31:0] 1 ALU ALU結果 M U X M U X 読出 reg2 読出 データ データ メモリ M U X 書込 reg 0 アドレス 0 ALU操作 1 書込 データ 0 3 命令 [15:11] 1 書込 データ 符号 拡張 命令 [15:0] 32 16 ALU 制御 命令 [5:0]

More Related