Changes between Version 12 and Version 13 of Ex08課題2016
- Timestamp:
- Jun 6, 2016 7:19:26 PM (10 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Ex08課題2016
v12 v13 1 1 トップ:http://galaxy.u-aizu.ac.jp/note/wiki/CAEX2016 2 2 3 4 3 '''以下作成中''' 5 6 4 7 5 = マルチサイクルプロセッサの制御 = … … 19 17 20 18 === 状態0では、以下の動作が同時に実施されます === 21 22 19 * メモリから現在のPCのアドレスにある命令を読み出す。 23 20 * PC+4を計算してPCを更新する。 … … 28 25 29 26 ALUの入力AにはPCの値を入力するため、それを制御する信号ALUSrcAはネゲートします。 30 ALUの入力Bには"4"を入力するので、それを制御する信号ALUSrcB( 2 bit)は"01"となり、27 ALUの入力Bには"4"を入力するので、それを制御する信号ALUSrcB(3 bit)は"001"となり、 31 28 ALUは加算をするため、それを制御する信号ALUOp(2 bit)は"00"とします。 32 29 その結果をPCレジスタに書き込むため、PCWriteはアサートされ、PCSource(2 bit)は"00"となります。 33 30 34 31 === 状態1では、以下の動作が同時に実施されます === 35 36 * 次のサイクルで計算に利用するレジスタの値を読み出す 32 * 次のサイクルで計算に利用するレジスタファイルの値を読み出す 37 33 * ジャンプ先のアドレス(PC+オフセット)を計算する 38 34 39 35 この時に必要な動作は、主としてALUでのアドレス計算です。 40 36 ALUの入力AにはPCの値を入力するため、それを制御する信号ALUSrcAはネゲートします。 41 ALUの入力Bにはアドレスのオフセットを入力するので、それを制御する信号ALUSrcB (2 bit)は"11"となります。37 ALUの入力Bにはアドレスのオフセットを入力するので、それを制御する信号ALUSrcBは"011"となります。 42 38 この時入力される値は、状態0で読み出された命令の下位16ビットを符号拡張して2ビット左シフトした値となります。 43 39 状態0と同様に、ALUは加算をするためALUOp(2 bit)は"00"とします。 40 41 またレジスタファイルから読み出された値は、A, Bレジスタに保持されます。読み出すレジスタの番号は命令の該当部分を利用します。 42 43 === 状態6では、以下の動作が同時に実施されます === 44 この場合R形式命令を実行するので、ALUでレジスタ間の演算をおこないます。 45 46 * ALUにはA, Bレジスタをそれぞれ入力する 47 * 命令に応じてALUでの演算をおこなう 48 * 結果はALUレジスタに保持される 49 50 そのためALUSrcAはアサートされ、ALUSrcBは"000"となります。ALUでのおこなう演算を制御する信号ALUOpは"10"とします。 51 52 === 状態7では、以下の動作が同時に実施されます === 53 * ALUレジスタに保持された値を指定されたレジスタに書き込む 54 55 この時、ALUは利用しません。レジスタファイルへの書き込みを制御する信号RegWriteはアサートされます。 56 また、書き込むレジスタファイルの番号を制御する信号RegDstもアサートされます。 57 レジスタファイルには、ALUレジスタの値を書き込むため、それを制御するMemtoRegはネゲートされます。 58 59 == 以上の各サイクルでR形式命令を実現できます。 == 60 61 44 62 45 63 == 制御部の設計(1) ==
