FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

オープンソースRISC-VコアHummingBirdについて調査(1. ダウンロードとビルド)

RISC-Vの実装であるHummingBirdを調査していくことにした。

https://camo.githubusercontent.com/f393ca23a6df9f640c1e4a43b78f2a503fdc47e8/68747470733a2f2f66647661643032316173666438712e6f73732d636e2d68616e677a686f752e616c6979756e63732e636f6d2f4c696368656554616e672f626f6f6b7069632e6a7067

HummingBirdの概要

HummingBirdは中国の大学で開発されたRISC-Vコアで、正式にはE203という名前が付けられている。GitHubのページを参照すると、このHummingBirdを開発した目的はRISC-Vの人気を向上させ、中国でのIoT設計におけるRISC-Vの普及を目指すために開発したと書いてある。

いくつかのアーキテクチャとの違い

これはHummingBirdの解説本(中国語)から引用してみる。

ARM Cortex-M0 ARM Cortex-M0+ ARM Cortex-M3 E201 E203 E205
Dhrystone(DMIPS/MHz) 0.84(標準) / 1.21(最適化時) 0.94 / 1.31 1.25 1.171 1.23 1.355
Coremark (Coremark/MHz) 2.33 2.42 3.32 1.352 2.14 3.327
最小ゲート数 12K 12K 36K 10K 12K 20K
パイプライン長 3 2 3 2 2 2
乗算器 あり あり あり なし あり あり
除算器 なし なし あり なし あり あり
ITCM / DTCM なし なし なし あり あり あり
拡張性 なし なし なし あり あり あり

ダウンロード

git clone https://github.com/SI-RISCV/e200_opensource.git

シミュレーションを実行する

現在HummigBirdのシミュレーションはiverilogが対応していると書いてある。

sudo apt install iverilog
cd vsim
make run TESTCASE=$PWD/../riscv-tools/fpga_test4sim/dhrystone4sim/dhrystone4sim

なんだ実行できない。Makefileを確認する。

  • vsim/bin/run.makefile
#SIM_EXEC      := #To-ADD: to add the simulatoin executable
#SIM_EXEC      := vvp ${RUN_DIR}/vvp.exec -none # The free vvp is tooooo slow...
SIM_EXEC      := echo "Test Result Summary: PASS" # This is a fake run to just ...

なんか良く分からないが、Dummyの実行ファイルが指定されているので、2番目のvvpというファイルを実行するように変更してみる。

#SIM_EXEC      := #To-ADD: to add the simulatoin executable
SIM_EXEC      := vvp ${RUN_DIR}/vvp.exec -none # The free ...
#SIM_EXEC      := echo "Test Result Summary: PASS" # This is a fake run to just direct...

再実行。

cd dhrystone4sim; vvp /home/msyksphinz/work/riscv/e200_opensource/vsim/run/vvp.exec -none  +DUMPWAVE=1 +TESTCASE=/home/msyksphinz/work/riscv/e200_opensource/vsim/../riscv-tools/fpga_test4sim/dhrystone4sim/dhrystone4sim 2>&1 tee dhrystone4sim.log; cd /home/msyksphinz/work/riscv/e200_opensource/vsim/run;
/home/msyksphinz/work/riscv/e200_opensource/vsim/run/../install/tb/tb_top.v:245: Error: $value$plusargs() is a system function, it cannot be called as a task.
/home/msyksphinz/work/riscv/e200_opensource/vsim/run/vvp.exec: Program not runnable, 1 errors.
make[1]: Leaving directory '/home/msyksphinz/work/riscv/e200_opensource/vsim/run'

えええ?iverilogって$value$plusargs()サポートしていないのかしら...?Verilatorとかで流せないかな...あるいはもうシミュレーションは実行せずに、中身だけ見てみようかな...