1 / 36

マイクロプロセッサ

マイクロプロセッサ. 第8回. プロセッサ:データパスと制御(その1). 関根 優年. データ処理と制御. データ処理: データは経路(パス)を通っていくうちに処理される. この経路を データーパス という     または, Register Transfer Level Model  という 記憶 :   データを一時的に記憶する    レジスター,ラッチ      データを長期的に記憶する    メモリ      制御:    流れの経路の制御,処理内容の選択の制御     . 処理 2. 処理 4. 処理 1. 処理 3. 処理 5. 設計原理.

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回 プロセッサ:データパスと制御(その1) 関根 優年

  2. データ処理と制御 データ処理: データは経路(パス)を通っていくうちに処理される. この経路を データーパス という     または,Register Transfer LevelModel という 記憶:  データを一時的に記憶する    レジスター,ラッチ      データを長期的に記憶する    メモリ      制御:    流れの経路の制御,処理内容の選択の制御      処理2 処理4 処理1 処理3 処理5

  3. 設計原理 機能設計: 命令と命令セット         符号化の方式と計算方式   構造設計: システムのアーキテクチャー         処理の流れの設計 詳細設計,実現方式, 具現化(implementation):         論理素子を構成して実現する.         論理素子を配置して素子間を配線する. CMOS素子等で論理素子を実現し,         金属配線で繋ぐ ⇒ LSIパターンデータを作成 LSIを製造する         設計原理: 一般的な場合を高速化せよ 単純性は規則性につながる

  4. 命令実行の制御の概要 全ての命令に必要とされる2つのステップ 1. メモリから命令をフェッチするために、プログラムカウンタの値をコードが   保持されているメモリに送る 2. 命令のレジスタフィールドに指定されるレジスタの値を読みだす ロード・ストア命令 : メモリアドレスの計算 整数算術論理演算命令 : 演算 分岐命令 : 比較 この後は、ALUを用いた処理が 行われることがほとんど MIPS命令の実現方式の概念図 レジスタ 命令 メモリ データ PC データ・ メモリ ALU アドレス レジスタ 番号 命令 アドレス レジスタ 番号 レジスタ 番号 データ

  5. 論理要素とクロック方式 MIPSの具体的な機能ユニット データパス部: 組み合わせ論理要素(combinational element) - データの値に何らかの操作を与える               例) ALU ,PC,メモリ,レジスタ 制御部: 状態論理要素(state element) - 状態を記憶する               例) 命令・データメモリ、レジスタ レジスタ 命令 メモリ データ PC データ・ メモリ ALU アドレス レジスタ 番号 命令 アドレス レジスタ 番号 レジスタ 番号 データ 状態論理要素-最低でも入力2、出力1が必要         (データ入力、タイミング信号、データ出力)

  6. クロック方式 クロック信号: 時間を離散化する. 読出し可能・書込み可能かを定義する信号: 読出し、書込みタイミングの分離  読出し、書込みタイミングが同時だと、 両者の情報が交じり合い、不確定性を生む 組み合わせ論理回路 状態 論理要素 1 状態 論理要素 2 クロック信号

  7. エッジトリガクロック方式の利点 エッジトリガクロック方式: クロック信号のエッジのみで状態更新を行う方式                  同一クロックサイクルで、読み出し・書込みを両方行える クロック信号 状態更新 状態更新 (立ち上がり動作で、状態更新を行うとした場合) 状態論理要素 組み合わせ論理回路 書き込み 読み出し エッジ立ち上がり以外で更新(エッジ立下り,エッジ立ち上がり)

  8. always @ (posedge CLK) begin //ノンブロッキング記述 //レジスターへの値を取り込む記述 reg0<= 論理式0; //同時に代入される reg1 <= 論理式1; end always @ (posedge CLK) begin //ブロッキング記述 //レジスターへの値を取り込む記述 reg0= 論理式0;  //記述順序順に代入される reg1 = 論理式1; end

  9. データパスの構築 すべての命令:クロック・エッジから実行を開始し,次のクロックエッジまでに 実行を完了する ⇒ 一番実行時間が長い命令が実行できるように,              クロック幅を長くする.    ⇒長い実行時間の命令は複数クロックで実行するようにする.  •  各命令ごとに,データを処理する部品を逐次的に並べる.  •    処理が似たものは同じような部品の配置になる.(R形式命令,...) •  一時に,一つの命令しか実行しないので,共通に使える部品をまとめる. •  命令ごとに異なる処理は,場合わけを制御する. •    制御は後でまとめて設計することにし,データの処理手順だけに注目

  10. プログラム命令を送出するデータパス 加算 4 命令 メモリ 命令アドレス PC 命令 命令を格納し、それをアクセスするには状態論理要素が2つ、 次の命令を計算するためには加算器が一つ必要 命令アドレス 必要となる 論理要素 命令 メモリ PC 命令 加算 和 プログラムカウンタ (命令アドレス を格納する) 命令アドレスの計算 命令を格納する データパスの一部 命令フェッチRead(PC) PC=PC+4

  11. Add 4 InstMem 命令アドレス PC Inst プログラム命令を送出するデータパス always @(posedge CLK)begin if(!nReset)begin PC <= 32’b0; end else begin PC <= oS0; end end assign insAdr = PC; ALU alu0(.iA(PC), iB(32’b4), iC(0), icmd(2’b10), .oC(wC0), .oS(oS0));

  12. プログラム命令を送出するデータパス mem instMem(.iAdr(insAdr), .oData(Inst)); Inst を解読して、 レジスタA,B,を定める ALU alu1(.iA(wa), iB(wb), iC(wc), icmd(wcmd), oS(wS), oC(wC) );

  13. 算術論理演算命令のデータパス 5 5 5 R形式命令(算術論理演算命令)のデータパス  レジスタを読出し、ALUで演算し、演算結果をレジスタに書き込む 6ビット 5ビット 5ビット 6ビット 5ビット 5ビット 必要となる論理要素 rs rt データ 読出 アドレス 読出 reg1 レジスタ ALU操作 3 レジスタ 番号 ALU 読出 アドレス 読出 reg2 ゼロ判定 書込 アドレス ALU ALU結果 書込 データ acm データ RegWrite

  14. 算術論理演算命令のデータパス assign oDATA = m[PC] assign opcode = oData[31:26]; assign rs = oData[25:21]; assign rt = oData[20:16]; assign rd = oData[15:11]; assign shant = oData[10: 6]; assign func = oData[ 5: 0]; 命令メモリ(レジスタファイル) PC ⇒ 6ビット 5ビット 5ビット 6ビット 5ビット 5ビット

  15. 読出 アドレス 読出 reg1 レジスタ 読出 アドレス 書込 アドレス 読出 reg2 書込 データ RegWrite レジスター register (input [4:0] rs, rt, rd, input[31:0] wData, output [31:0] A, B, input RegWrite ); { assign A = rA; assign B = rB; reg [31:0] rFile [0:31], rA, rB; always @ (posedge CLK)begin rA <= rFile[rs]; rB <= rFile[rt]; if(RegWrite) rFile[rd] <= wData; end}

  16. データパスでの流れ 命令メモリ(レジスタファイル) PC ⇒ 6ビット 5ビット 5ビット 6ビット 5ビット 5ビット • どこかで命令が •  解読され, •  制御信号が •  出されている. • データ出力の •  ゲートを制御 •  する ALU操作 3 読出 アドレス 読出 reg1 レジスタ ゼロ判定 読出 アドレス ALU 書込 アドレス ALU結果 命令 読出 reg2 書込 データ RegWrite

  17. データパスでの流れのHDL記述 mem instMem(.iAdr(insAdr), .oData(Inst)); assign insAdr = m[PC]; assign opcode = Inst[31:26]; assign rs = Inst[25:21]; …. rt =…; rd= //Inst を解読して、 レジスタA,B,を定める register register0(.rs(rs), .rt(rt), .rd(rd), .wData(wS), .A(wa), .B(wb) , .RegWrite(RegWrite) ); ALU alu1(.iA(wa), iB(wb), iC(wc), icmd(wcmd), oS(wS), oC(wC) );

  18. データパスでの流れ PC ⇒ Inst =m[PC] ALU操作 wa 3 rs 読出 アドレス 読出 reg1 レジスタ rt ゼロ判定 読出 アドレス ALU wS 書込 アドレス wb rd 読出 reg2 書込 データ RegWrite

  19. ロード/ストア命令のデータパス 32 16 必要となる 論理要素(追加分) 符号 拡張 MemWrite 読出 アドレス 読出 データ データ メモリ 書込 アドレス 書込 データ 例) lw $t1,offset($t2)  ($t2の値)+offsetを行う際に offsetを16ビットから32ビットに符号拡張 MemRead データパス ALU操作 3 読出 reg1 読出 reg1 レジスタ 命令 MemWrite ゼロ判定 読出 reg2 ALU 読出 データ データ メモリ 書込 reg アドレス ALU結果 読出 reg2 書込 データ 書込 データ RegWrite 符号 拡張 32 16 MemRead

  20. 分岐命令のデータパス 例) beq $t0,$t1,L1; ($t0,$t1を比較、L1へ分岐) データパス PC+4(命令データパスから) PC相対アドレッシング方式 加算器 分岐先 2ビット 左に シフト ALU操作 3 読出 reg1 読出 reg1 レジスタ 読出 reg2 ゼロ判定 命令 分岐制御 論理へ ALU 書込 reg 読出 reg2 書込 データ RegWrite 符号 拡張 32 16 無条件ジャンプ命令は、下位26ビットを左にシフトした操作で実現

  21. 分岐命令のデータパス 例) beq $t0,$t1,L1; ($t0,$t1を比較、L1へ分岐) alwaus @( posedge CLK)befin if( t1 == t0 ) begin PC <= L1; end else begin PC <= PC + 32’h4; //ALU ではどう書く? end end

  22. 単純なデータパスの構築 MIPSアーキテクチャのサブセットとして、   最も単純と思われるデータパス構築を検討 load word(lw), store word(sw), branch equal(beq), 加算(add), 減算(sub), 論理積(and), 論理和(or), set less than(slt) これらの演算を可能とする単一データパスを作成 これまで挙げてきたデータパスの共有を、    マルチプレクサ(データセレクタ)回路で行う

  23. マルチプレクサ回路 Multiplexor(data selector と呼ぶ方がふさわしい) Out1 = selector& in1 + not(selector)&in2 ; 2つのANDと一つのORと一つのNOTで実現できる Nbit のMUX

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

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

  26. 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 条件分岐のデータパスを追加

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

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

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

  30. ALU制御ユニット ALUOp・機能コードによるALU制御入力の真理値表

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

  32. マルチプレクサと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

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

  34. ISE WebPack/ HDL simulator • Xilinx のサイトからダウンロード 5.6GB必要 • 論理合成,シミュレータ,配置配線,FPGA内の信号チェックChipScopeを含む • FPGAがあれば,実際に回路を動作させる事が可能 • フリーのRegistration IDが発行される • 指示に従ってインストール • Help/turotialを見て使用

  35. 制御ユニットを加えたデータパス 加算 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]

  36. RISCProcessor module mynameRisc( input in1, input [31:0] in2, …. output [31:0] out1, output out2, out3, …. inout bid1, input clk, input reset ); // module インターフェース宣言 reg [31:0] r1;// 宣言部 wire [31:0] adr; …. …..*** ここに回路記述を 書いて 年明けに提出せよ。 endmodule;

More Related