MIPS ver 2 public class MIPS public MIPS
MIPS クラス(ver. 2) public class MIPS { public MIPS() { : i. Mem. set. Inst(0 x 04000000, 命令 1); i. Mem. set. Inst(0 x 04000004, 命令 2); : } public void run() { // for文で実行回数を指定 for (int i = 0; i < 2; i++) { pc. run(); : adder 1. run(); pc. run(); // 新しいPCの値を書き込む } } }
Sign. Extender クラス public class Sign. Extender { public Sign. Extender(Bus a, Bus b) { : } public void run() { // バスaの信号をバスbの 0〜 15本目に設定 // バスaの 15本目の信号をバスbの 16〜 31本目に設定 } } a 0 a 15 : : b 0 b 15 b 16 : b 31
MUX_bus クラス ctl // バス版の2入力マルチプレクサ public class MUX_bus { public MUX_bus(Path ctl, Bus a, Bus b, Bus c) { // MUXを 32個作ってつなぐ } public void run() { : } } a 0 b 0 0 1 c 0 a 1 b 1 0 1 c 1 : a 31 b 31 0 1 MUX c 31
オフセットの計算 loop: 0 x 04000000 0 x 04000004 0 x 04000008 0 x 0400000 c xxx beq $t 0, $t 1, next xxx next: 0 x 04000010 0 x 04000014 0 x 04000018 offset=2 xxx beq $t 2, $t 3, loop xxx spim のオフセット計算はなぜか PC の位置から ジャンプする命令数になっているので注意 offset=-6
Shifter 2 クラス // 2ビット左シフト public class Shifter 2 { public Shifter 2(Bus a, Bus b) { : } public void run() { // aiの信号をbi+2に設定 // bの下位2ビットは 0にする } } 0 0 a 1 b 0 b 1 b 2 b 3 : : a 29 a 30 a 31 b 31
- Slides: 20