HiFive1でベンチマークプログラムや一般的なプログラムを動作させるのはそこまで難しい話ではなくて、SiFiveもプログラム開発用のツールセットを公開している。
freedom-e-sdkというリポジトリは、RISC-V向けプログラムのコンパイル環境を提供しており、Coremarkをコンパイルして動作させるまでのフローも公開してある。これをなぞってみよう。
Freedom-e-sdkを使ってCoremarkをコンパイルする
Coremarkのコンパイル方法は、githubのリポジトリに書いてある通り、Coremark本体をダウンロードして当該ディレクトリに配置し、コンパイルするだけだ。
この際、freedom-e-sdkに付属しているRISC-V向けGCCを再度コンパイルするのが面倒だったので、パスを差し替えて既存のGCCを指すように変更した。
diff --git a/bsp/env/common.mk b/bsp/env/common.mk index 74f5582..ecb194d 100644 --- a/bsp/env/common.mk +++ b/bsp/env/common.mk @@ -23,7 +23,8 @@ INCLUDES += -I$(BSP_BASE)/drivers/ INCLUDES += -I$(ENV_DIR) INCLUDES += -I$(PLATFORM_DIR) -TOOL_DIR = $(BSP_BASE)/../toolchain/bin +# TOOL_DIR = $(BSP_BASE)/../toolchain/bin +TOOL_DIR = /home/msyksphinz/riscv32/bin CC := $(TOOL_DIR)/riscv32-unknown-elf-gcc AR := $(TOOL_DIR)/riscv32-unknown-elf-ar
あと、OpenOCDが当該パスに必要なので、それだけcloneしてビルドしておく。
git submodule init
git submodule update openocd --recursive
make openocd
あとは、指示通りにビルドしてプログラムを書き込むだけだ。UARTの速度は115200に設定しておく。
- シリアル受信側
screen /dev/ttyUSB1 115200
- ビルド&アップロード側
以下のコマンドを実行する。
make software PROGRAM=coremark make upload PROGRAM=coremark
以下のような出力が得られた。
core freq at 274192793 Hz 2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 798820 Total time (secs): 24.375000 Iterations/Sec : 410.256410 Iterations : 10000 Compiler version : GCC6.1.0 Compiler flags : -O2 -fno-common -funroll-loops -finline-functions --param max-inline-insns-auto=20 -falign-functions=4 -falign-jumps=4 -falign-loops=4 Memory location : STACK seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x988c Correct operation validated. See readme.txt for run and reporting rules. CoreMark 1.0 : 410.256410 / GCC6.1.0 -O2 -fno-common -funroll-loops -finline-functions --param max-inline-insns-auto=20 -falign-functions=4 -falign-jumps=4 -falign-loops=4 / STACK Progam has exited with code:0x00000000
Coremark/MHzを測定すると、 となる。