RISC-Vの実装であるHummingBirdを調査していくことにした。
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とかで流せないかな...あるいはもうシミュレーションは実行せずに、中身だけ見てみようかな...