Skip to content
This repository has been archived by the owner on Nov 17, 2017. It is now read-only.

Latest commit

 

History

History
82 lines (62 loc) · 3.72 KB

README.md

File metadata and controls

82 lines (62 loc) · 3.72 KB

FELIS Simulator

2016年度CPU実験B班の1stアーキテクチャFELIS用シミュレータ。

ビルド方法

$ mkdir build; cd $_
$ cmake ..
$ make

リンカエラーを起したときは、もう一回cmake ..からやり直せば通ります (make時にコード生成しているため)。

cmake 時に NO_ASSERTオプションをつけると、プログラムカウンタやメモリの範囲チェックを省略し、若干高速化します。

$ cmake -DNO_ASSERT=On ..

使いかた

simulatorは次のように、-fオプションに機械語ファイルを渡して実行します。

$ ./simulator -f test.bin

他にもいくつかオプションがあります。

  • -d -- 逆アセンブル結果を標準出力に吐いて終了します。
  • -i [file] -- IN命令で読むファイルを指定します。
  • -s [int] -- メモリ量を指定します。int32_tの配列をこの要素数だけ確保します。デフォルト値は1,000,000です。
  • -r -- HALT命令まで自動ですすめます。到達後、qで終了します。
  • -q -- -rが指定されているとき、qの入力を待たずに自動で終了します。
  • -m -- 出力する統計情報に、メモリの情報を含めます。
  • -n -- 巻き戻し機能を無効にします。-rのときは自動でこの設定が適用されます。
  • -o [file] -- OUT命令の出力先ファイル名を指定します。デフォルト値はout.logです。

-rオプションを指定しない場合、インタラクティブに実行できます。 画面は水平に四分割され、

  • 命令数や実行時間
  • レジスタの値
  • プログラムカウンタ付近の命令列と逆アセンブル結果
    • 反転しているのが、次に実行する命令
  • コマンドライン

を表示しています。

逆アセンブル結果の形式は、

  • Type R -- mnemonic, rs, rt, rd, shamt
  • Type I -- mnemonic, rs, rt, immediate(符号拡張したもの。カッコ内に符号拡張前のものを16進数で。)
  • Type J -- mnemonic, addr

となっています。

コマンドラインは、以下の入力を受け付けます。

  • run|r -- HALT命令またはbreakpointまで進めます。
  • reset -- 初期状態にリセットします。
  • (break|b) [int] <int> -- 指定したプログラムカウンタにbreakpointをはります。自然数を指定すると、その回数だけ命令を実行した後breakします。
  • pb -- breakpointを表示します。
  • db [int] -- 指定したbreakpointを削除します。
  • pm [int] -- 指定したインデックスのメモリの状態を表示します。
  • (step|s) <int> -- 命令をひとつ実行します。自然数を指定すると、その命令数だけ実行します。
  • prev|p -- 命令の実行をひとつ巻き戻します。
  • log|l -- その時点での統計情報を出力します。
  • quit|q -- 終了します。
  • help|h -- ヘルプを表示します。

統計情報

HALT命令が実行されると、以下の統計情報が出力されます。

  • call_cnt.logに、動的命令数と、プログラムカウンタごとの呼ばれた回数。
  • instruction.logに、命令ごとの呼ばれた回数。
  • register.logに、最終的なレジスタの状態。
  • memory.logに、最終的なメモリの状態。-mオプションが指定されているときのみ。
  • memory_access_cnt.logに、メモリのワードごとのアクセス回数。-mオプションが指定されているときのみ。