データパスの構築Ⅰ ~シングルサイクル・データパス~ プロセッサの構成:データパスと制御 MIPS命令セットを実現するプロセッサを設計する! ただし,以下の命令セットに限定 算術論理演算命令:add,sub,and,or,slt メモリ参照命令:lw,sw 分岐命令:beq 命令区分 算術論理演算 データ転送 分岐 命令の内容 例 意味 加算 add $s1, $s2, $s3 $s1 = $s2 + $s3 減算 sub $s1, $s2, $s3 $s1 = $s2 – $s3 論理積 and $s1, $s2, $s3 $s1 = $s2 and $s3 (ビット毎の論理積) 論理和 or $s1, $s2, $s3 $s1 = $s2 or $s3 (ビット毎の論理和) 比較(セット) slt $s1, $s2, $s3 もし、$s2<$s3なら$s1=1, $s2>=$s3なら$s1=0 ロードワード lw $s1, 100($s2) $s1に,メモリの[$s2+100]番地のワードデータを読込み ストアワード sw $s1, 100($s2) メモリの[$s2+100]番地に,$s1のワードデータを書込み 条件付 beq $s1, $s2, L もし、$s1==$s2ならラベルLへ分岐 九州大学工学部電気情報工学科 命令実行の基本動作 PCの指す番地から命令 を取得. 命令取得 命令解読 命令実行 命令語の各フィールドを 検査して,実行する命 令と必要なパラメータを 特定する. 全ての命令で共通の処理 命令によって異なる処理 九州大学工学部電気情報工学科 命令実行の基本動作(add命令) (sub, and, or, slt も同様) 000000 rs rt rd 00000 100000 命令取得 命令解読 rs,rt の指定するレジスタの値 を ALU に転送 命令実行 ALUで演算実行 結果を rd の指定するレジスタ に転送 PC ← PC + 4 九州大学工学部電気情報工学科 命令実行の基本動作(lw命令) 100011 rs 即値 rt 命令取得 命令解読 命令実行 rs の指定するレジスタの値と即 値を ALU に転送 加算実行 加算結果の番地の値を rt の指 定するレジスタに転送 PC ← PC + 4 九州大学工学部電気情報工学科 各命令実行で必要な処理 命令の 種類 命令 命令実行で必要となる処理 Step1 算術論 理演算 add/sub/ and/or/slt データ 転送 lw sw beq 分岐 レジスタファイルより rsとrtを読出し レジスタファイルより rsを読出し 命令より即値を選択 レジスタファイルより rsとrtを読出し 命令より即値を選択 レジスタファイルより rsとrtを読出し 命令より分岐先オフ セットを選択 Step2 ALUでの演算 ALUでのアドレ ス計算(+) ALUでのアドレ ス計算(+) ALUでの一致 判定(-) Step3 Step4 演算結果をrdへ 書き込み メモリから値を読 出し(ロード) メモリへrtの値を 書込み Step5 PCの更新 (+4) ロード値を rtへ書込み PCの更新 (+4) PCの更新 (+4) PCの更新(分岐 先の値) 九州大学工学部電気情報工学科 データパスの概観 PC 命令メモリ アドレス 命令 書込みデータ 読出しデータ レジスタ番号 レジスタ番号 読出しデータ レジスタ番号 レジスタファイル 命令取得 命令解読 ALU データメモリ アドレス 読出しデータ 書込みデータ 命令実行 九州大学工学部電気情報工学科 部品の準備(命令メモリ) 命令メモリ:実行対象となる命令(プログラム)を格納 信号の意味 入出力 信号名 ビット幅 読み出す命令の番地 入力 adrs 32 読み出された命令 出力 inst 32 PC 命令メモリ アドレス 命令 書込みデータ 読出しデータ レジスタ番号 レジスタ番号 読出しデータ レジスタ番号 レジスタファイル adrs 命令メモリ 32 32 ALU データメモリ アドレス 読出しデータ 書込みデータ inst 九州大学工学部電気情報工学科 部品の準備(データメモリ) データメモリ:プログラム実行において必要となるデータを格納 信号の意味 入出力 信号名 ビット幅 読み書きする番地 入力 adrs 32 書き込みデータ 入力 wd 32 読み出しデータ 出力 rd 32 書き込み要求(1のとき要求) 入力 MemWrite 1 読み出し要求(1のとき要求) 入力 MemRead 1 PC MemRead MemWrite 命令メモリ アドレス 命令 書込みデータ 読出しデータ レジスタ番号 レジスタ番号 読出しデータ レジスタ番号 adrs wd レジスタファイル 32 データメモリ 32 32 ALU データメモリ アドレス 読出しデータ 書込みデータ rd 九州大学工学部電気情報工学科 部品の準備(レジスタファイル 1/2) レジスタファイル:複数のレジスタにより構成 信号の意味 入出力 信号名 ビット幅 レジスタの読み出し値1 出力 rd1 32 レジスタの読み出し値2 出力 rd2 32 レジスタの書き込み値 入力 wd 32 rd1 に値を出力するレジスタを選択 入力 rreg1 5 rd2 に値を出力するレジスタを選択 入力 rreg2 5 wd の値を書き込むレジスタを選択 入力 wreg 5 レジスタに書き込みを行うとき1 入力 RegWrite 1 5 rreg1 5 rreg2 wreg 5 wd 32 RegWrite PC rd1 レジスタ ファイル 32 rd2 32 命令メモリ アドレス 命令 書込みデータ 読出しデータ レジスタ番号 レジスタ番号 読出しデータ レジスタ番号 レジスタファイル ALU データメモリ アドレス 読出しデータ 書込みデータ 九州大学工学部電気情報工学科 部品の準備(レジスタファイル 2/2) 5 rreg1 5 rreg2 wreg 5 wd 32 RegWrite rd1 レジスタ ファイル 32 rd2 32 rreg1 RegWrite wreg 0 1 C 30 31 D Decoder Register 0 D C Register 1 M u x rd1 M u x rd2 C Register 30 D C wd rreg2 Register 31 D 九州大学工学部電気情報工学科 部品の準備(ALU) ALU:指定された算術論理演算を実行 信号の意味 入出力 信号名 ビット幅 演算対象となる入力オペランド 入力 a 32 演算対象となる入力オペランド 入力 b 32 演算結果出力 出力 y 32 ゼロ判定(結果が 0 のときに 1) 出力 zero 1 ALU制御(000: AND,001: OR, 010: +,110: –,111: slt) 入力 ALUctrl 3 ALUctrl b 32 3 ALU a 32 PC 命令メモリ アドレス 命令 32 zero y 書込みデータ 読出しデータ レジスタ番号 レジスタ番号 読出しデータ レジスタ番号 レジスタファイル ALU データメモリ アドレス 読出しデータ 書込みデータ 九州大学工学部電気情報工学科 プログラムカウンタ周りの設計 プログラムカウンタ(PC): 次に実行する命令の番地を記憶 命令を実行するたびに PC を更新 分岐命令以外: 次の命令 PC ← PC + 4 分岐命令の場合: 分岐条件成立時: PC ← 分岐先命令の番地 分岐条件非成立時: 次の命令 PC ← PC + 4 4 + 32 P C 命令メモリ 32 九州大学工学部電気情報工学科 算術論理演算命令用データパスの設計(1) op rs rt rd shamt funct 6bit 5bit 5bit 5bit 5bit 6bit op rs rt rd shamt funct add $○, $△, $□ 000000 $△ $□ $○ 00000 100000 sub $○, $△, $□ 000000 $△ $□ $○ 00000 100010 slt $○, $△, $□ 000000 $△ $□ $○ 00000 101010 and $○, $△, $□ 000000 $△ $□ $○ 00000 100100 or $○, $△, $□ 000000 $△ $□ $○ 00000 100101 R形式 命令 九州大学工学部電気情報工学科 算術論理演算命令用データパスの設計(2) 31 26 25 21 20 16 15 11 10 op + rs rt 6 5 0 rd shamt funct 4 RegWrite 25-21 20-16 P 命令メモリ inst C adrs 15-11 rreg1 rreg2 rd1 レジスタ ファイル wreg rd2 a b A L U y wd ALUctrl 命令区分 算術論理演算 命令の内容 add, sub, and, or, slt 例 意味 add $s1, $s2, $s3 $s1 = $s2 + $s3 九州大学工学部電気情報工学科 lw/sw命令用データパスの設計(1) I形式 op rs rt address/immediate 6bit 5bit 5bit 16bit 命令 op rs rt address/immediate lw $○, n($△) 100011 $△ $○ n sw $○, n($△) 101011 $△ $○ n 九州大学工学部電気情報工学科 lw/sw命令用データパスの設計(2) 31 26 25 21 20 16 15 op + rs 0 rt Offset 4 RegWrite MemRead 25-21 20-16 rreg1 rreg2 P 命令メモリ inst C adrs a rd1 レジスタ ファイル wreg b rd2 A L U y adrs データメモリ wd wd 15-0 lwの場合 符号拡張 16 命令区分 命令の内容 データ転送 ロードワード 32 例 lw $s1, 100($s2) MemWrite rd ALUctrl 意味 $s1に,メモリの[$s2+100]番地のワード データを読込み 九州大学工学部電気情報工学科 lw/sw命令用データパスの設計(3) 31 26 25 21 20 16 15 op + rs 0 rt Offset 4 RegWrite MemRead 25-21 20-16 rreg1 rreg2 P 命令メモリ inst C adrs a rd1 レジスタ ファイル wreg b rd2 A L U y adrs データメモリ wd wd 15-0 swの場合 命令区分 データ転送 符号拡張 16 命令の内容 32 例 ストアワード sw $s1, 100($s2) MemWrite rd ALUctrl 意味 メモリの[$s2+100]番地に,$s1のワード 九州大学工学部電気情報工学科 データを書込み beq 命令用データパスの設計(1) PC相対アドレッシング: beq, bne 命令の分岐先番地 PC I形式 00 op rs rt address address を符号拡張 + 00 整列化制約: 命令の 番地は常に4の倍数. 分岐先(Label の番地) 00 九州大学工学部電気情報工学科 beq 命令用データパスの設計(2) 31 26 25 21 20 16 15 op rs rt Offset + 4 RegWrite 25-21 20-16 rreg1 rreg2 P 命令メモリ inst C adrs + 2bit 左シフト zero a rd1 レジスタ ファイル wreg 0 b rd2 A L U wd 15-0 符号拡張 16 命令区分 分岐 命令の内容 条件付 32 例 beq $s1, $s2, L ALUctrl 意味 もし、$s1==$s2ならラベルLへ分岐 九州大学工学部電気情報工学科 各命令用のデータパス add, sub, and, or, slt + 4 lw + 4 RegWrite RegWrite 25-21 20-16 rreg1 rreg2 P 命令メモリ inst C adrs 15-11 a rd1 レジスタ ファイル wreg A L U b rd2 MemRead 25-21 20-16 rreg1 rreg2 P 命令メモリ inst C adrs y rd1 レジスタ ファイル wreg A L U b rd2 y adrs データメモリ wd wd wd 15-0 ALUctrl 符号拡張 16 MemWrite a rd ALUctrl 32 sw + 4 + 4 RegWrite MemRead 25-21 20-16 rreg1 rreg2 P 命令メモリ inst C adrs rd1 b rd2 A L U y P 命令メモリ inst C adrs adrs 32 ALUctrl rd + 2bit 左シフト zero a rd1 レジスタ ファイル wreg wd 符号拡張 16 rreg1 rreg2 データメモリ wd 15-0 25-21 20-16 a レジスタ ファイル wreg MemWrite RegWrite b rd2 A L U wd 15-0 符号拡張 16 32 beq ALUctrl 九州大学工学部電気情報工学科 データパスの統合 + 4 RegWrite 25-21 20-16 P 命令メモリ inst C adrs rreg1 rreg2 MemRead zero wreg b rd2 A L U y adrs データメモリ wd wd 15-0 マルチプレクサ (選択回路) 符号拡張 16 MemWrite a rd1 レジスタ ファイル 15-11 + 2bit 左シフト 32 rd ALUctrl 九州大学工学部電気情報工学科 Created by Tsuneo Nakanishi, 2002-2004 (R1.00) Updated by Koji Inoue, 2005 (R1.01) Updated by Koji Inoue, 2007 (R1.02) 九州大学工学部電気情報工学科
© Copyright 2024 ExpyDoc