... | ... | @@ -4,11 +4,10 @@ |
|
|
CPU の性能を測るために Coremark という標準ベンチマークソフトを動かしてみましょう。Coremark は様々な計算処理を含んでおり、この Coremark の開始から終了までにかかった時間を計測することで、作った CPU の性能を評価することができます。
|
|
|
|
|
|
## 前提条件
|
|
|
Coremark はRISC-V の命令セットを適切に実行できるだけではなく,サイクル数を計測する[ハードウェアカウンタ](Hardwarecounter)及び[シリアル出力](serialOutput)も実装されている必要があります.
|
|
|
|
|
|
|
|
|
Coremark はRISC-V の命令セットを適切に実行できるだけではなく,サイクル数を計測する[ハードウェアカウンタ](Hardwarecounter)及び[シリアル出力](serialOutput)も実装されている必要があります.
|
|
|
|
|
|
## FPGA へのプログラム書き込み
|
|
|
## ベンチマークプログラムの用意
|
|
|
|
|
|
b3exp/benchmarks/Coremark_for_Synthesis の中に Coremark のソースが用意してあります。
|
|
|
この中で
|
... | ... | @@ -25,11 +24,24 @@ CLOCKS_PER_SEC = 100000000 |
|
|
|
|
|
を自分が変更した値へと書き換えてから `make` コマンドでプログラムを生成してください。
|
|
|
|
|
|
|
|
|
Coremark の実行をすべてシミュレーションで確認するのは時間がかかるので、 10,000 us 程度まで確認して問題がなければ実機での動作確認へと移りましょう。
|
|
|
Coremark の実行をすべて Vivado のシミュレーションで確認するのは非常に時間がかかるので注意してください。
|
|
|
|
|
|
実機への書き込み方法は他のプログラムと同様です。
|
|
|
|
|
|
## FPGA を使う前に
|
|
|
|
|
|
FPGA に焼くのは、シミュレータでのデバッグが十分完了してからにしましょう。なぜなら、バグっている場合、FPGA に焼いても「なぜか動かない」という結果が得られるだけでデバッグに役立つ情報が得られないからです。最低でも以下の二つを確認してから FPGA に焼いたほうが、開発のサイクルも速くなります。
|
|
|
|
|
|
### Coremark のトレースを使ったデバッグ
|
|
|
|
|
|
b3exp/benchmarks/Coremark 内で `make` コマンドを打つことにより生成される.hexファイルを利用してシミュレーションした場合の、実行されるPCと機械語命令・デスティネーションレジスタ番号とそこに書き込まれた値・メモリアクセスに関する情報をダンプしたトレースを[内部用wiki](http://exp.mtl.t.u-tokyo.ac.jp/2021/b3exp-internal/wikis/home)に用意しています(※ b3exp/benchmarks/Coremark_for_Synthesis 内のプログラムとは内容が異なります)。
|
|
|
|
|
|
自分の作った CPU でも同様の出力を`$display`や`$write`等で出力し、`(vim)diff`コマンドや`cut`コマンド等を組み合わせて、一致しているかを確認することでデバッグしてみましょう。
|
|
|
|
|
|
### Verilator を使ったデバッグ
|
|
|
|
|
|
b3exp/benchmarks/Coremark_for_Synthesis 内のプログラムを Verilator を使ってシミュレーションしてみましょう。書いたコードにもよりますが、およそ10分ほどで30秒間のシミュレーションが可能です。
|
|
|
正しく出力を得られるか確認しましょう。
|
|
|
|
|
|
## GTKTERM のインストール
|
|
|
|
... | ... | @@ -67,18 +79,8 @@ Iterations/Sec が Coremark スコアの値です。また、これを動作周 |
|
|
[公式サイト](https://www.eembc.org/coremark/scores.php)に様々な商用プロセッサの Coremark スコアが掲載されているので、今回作った CPU の値と比較してみましょう。
|
|
|
|
|
|
|
|
|
## デバッグ
|
|
|
|
|
|
|
|
|
## CoreMarkプログラムのトレース
|
|
|
|
|
|
コアマークのトレースを[内部用wiki](http://exp.mtl.t.u-tokyo.ac.jp/2021/b3exp-internal/wikis/home)に用意します。各行には、実行されるPCと機械語命令・デスティネーションレジスタ番号とそこに書き込まれた値・メモリアクセスに関する情報、が書かれています。
|
|
|
|
|
|
デバッグに役立ててください。
|
|
|
`$display`や`$write`と`(vim)diff/cut`などを組み合わせて使えばデバグが捗るかもしれません。
|
|
|
|
|
|
なお、このトレースと比較する際は、 b3exp/benchmarks/Coremark 内で `make` コマンドを打つことにより生成される.hexファイルを利用してシミュレーションしてください。b3exp/benchmarks/Coremark_for_Synthesis 内のプログラムとは内容が異なります。
|
|
|
## 実機の問題の切り分け
|
|
|
|
|
|
## Uartのテストプログラム
|
|
|
### Uartのテストプログラム
|
|
|
|
|
|
/benchmarks/tests/Uart 内のプログラムを使って UART が正しく動作しているかどうか確認することができます。FPGA 実機に書き込んで `CPU_RESET` を押すとターミナル上に 'A' という文字が表示されるはずです。上手くいかない場合は、 UART モジュールとプロセッサとの接続部の記述や、UART モジュール内での周波数設定の記述をもう一度見直してみましょう。 |
|
|
\ No newline at end of file |
|
|
/benchmarks/tests/Uart 内のプログラムを使って UART が正しく動作しているかどうか確認することができます。FPGA 実機に書き込んで `CPU_RESET` を押すとターミナル上に 'A' という文字が表示されるはずです。上手くいかない場合は、 UART モジュールとプロセッサとの接続部の記述や、UART モジュール内での周波数設定の記述をもう一度見直してみましょう。 |
|
|
\ No newline at end of file |