RV-STAR

Coremark

基础示例 系统:baremetal 更新:2026-05-31

RuyiSDK 基础示例

说明:Nuclei RV-STAR 硬件驱动依赖 Nuclei 官方 SDK 和专用工具链。本示例中,RuyiSDK 仅用于虚拟环境管理、源码获取和编辑,编译烧录仍使用 make 和 openocd 命令。

可直接在开发板上进行编译和运行的示例,适合初学者快速上手。

安装依赖包


sudo apt update; sudo apt install -y wget tar zstd xz-utils git build-essential

安装 ruyi 包管理器


wget https://mirror.iscas.ac.cn/ruyisdk/ruyi/tags/0.47.0/ruyi-0.47.0.riscv64

chmod +x ruyi-0.47.0.riscv64

sudo cp -v ruyi-0.47.0.riscv64 /usr/local/bin/ruyi

创建 RuyiSDK 虚拟环境


ruyi update

ruyi venv -t gnu-plct generic ./ruyi-venv

source ruyi-venv/bin/activate

克隆 Nuclei SDK


git clone https://github.com/Nuclei-Software/nuclei-sdk.git

cd nuclei-sdk

下载 Nuclei 专用 GCC 工具链


wget https://download.nucleisys.com/upload/files/toolchain/gcc/nuclei_riscv_newlibc_prebuilt_linux64_nuclei-2024.tar.bz2
tar -xjvf nuclei_riscv_newlibc_prebuilt_linux64_nuclei-2024.tar.bz2

下载 Nuclei OpenOCD


wget https://download.nucleisys.com/upload/files/toolchain/openocd/nuclei-openocd-2024.02.28-linux-x64.tgz
tar -xzvf nuclei-openocd-2024.02.28-linux-x64.tgz

设置环境变量


export PATH=~/nuclei-sdk/gcc/bin:$PATH
export PATH=~/nuclei-sdk/Nuclei/openocd/2024.02.28/bin:$PATH

在终端1启动 OpenOCD


sudo openocd -f ~/nuclei-sdk/SoC/gd32vf103/Board/gd32vf103v_rvstar/openocd_gd32vf103.cfg

Coremark (GCC版)

编译Coremark


cd nuclei-sdk/application/baremetal/benchmark/coremark

make SOC=gd32vf103 BOARD=gd32vf103v_rvstar TOOLCHAIN=nuclei_gnu clean
make SOC=gd32vf103 BOARD=gd32vf103v_rvstar TOOLCHAIN=nuclei_gnu all

在终端2执行烧录


sudo chmod 666 /dev/ttyUSB1

riscv64-unknown-elf-gdb coremark.elf -ex "target extended-remote localhost:3333" -ex "monitor reset halt" -ex "load" -ex "monitor resume" -ex "quit"

minicom -D /dev/ttyUSB1 -b 115200

正常情况下,终端会看到类似如下输出:


Nuclei SDK BNuclei SDK Build Time: May 31 2026, 17:11:34 Time: May 31 2026, 17:11:34
Download Mode: FLASHXIP
CPU Frequency 108000000 Hz
Start to run coremark for 800 iterations
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 237323748
Total time (secs): 2.197440
Iterations/Sec   : 364.059997
ERROR! Must execute for at least 10 secs for a valid result!
Iterations       : 800
Compiler version : GCC13.1.1 20230713
Compiler flags   : -Ofast -fno-code-hoisting -fno-common -finline-functions -falign-fu1
Memory location  : STACK
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0xcc42
Errors detected


Print Personal Added Addtional Info to Easy Visual Analysis

     (Iterations is: 800
     (total_ticks is: 237323748
 (*) Assume the core running at 1 MHz
     So the CoreMark/MHz can be calculated by:
     (Iterations*1000000/total_ticks) = 3.370923 CoreMark/MHz


CSV, Benchmark, Iterations, Cycles, CoreMark/MHz
CSV, CoreMark, 800, 237323748, 3.370
IPC = Instret/Cycle = 187415138/237323748 = 0.789

Coremark (LLVM版)

编译Coremark


cd ~/nuclei-sdk/application/baremetal/benchmark/coremark

make SOC=gd32vf103 BOARD=gd32vf103v_rvstar TOOLCHAIN=nuclei_llvm clean
make SOC=gd32vf103 BOARD=gd32vf103v_rvstar TOOLCHAIN=nuclei_llvm all

在终端2执行烧录:


sudo chmod 666 /dev/ttyUSB1

riscv64-unknown-elf-gdb coremark.elf -ex "target extended-remote localhost:3333" -ex "monitor reset halt" -ex "load" -ex "monitor resume" -ex "quit"

minicom -D /dev/ttyUSB1 -b 115200

正常情况下,终端会看到类似如下输出:

CSV, Benchmark, Iterations, Cycles, CoreMark/MHz
CSV, CoreMark, 800, 1366745084, 0.585
IPC = Instret/Cycle = 904435054/1366745084 = 0.661
Nuclei SDK Build Time: May 31 2026, 17:35:03
DownNuclei SDK Build Time: Nuclei SDK Build TimNuclei SDK Build Time: May 31 2026, 17:9
Download Mode: FLASHXIP
CPU Frequency 108000000 Hz
Start to run coremark for 800 iterations
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 396216119
Total time (secs): 3.668667
Iterations/Sec   : 218.062840
ERROR! Must execute for at least 10 secs for a valid result!
Iterations       : 800
Compiler version : GCCClang 17.0.2 (git@gito.corp.nucleisys.com:software/devtools/llvm)
Compiler flags   : -O3 -flto -DITERATIONS=800 -DPERFORMANCE_RUN=1
Memory location  : STACK
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0xcc42
Errors detected


Print Personal Added Addtional Info to Easy Visual Analysis

     (Iterations is: 800
     (total_ticks is: 396216119
 (*) Assume the core running at 1 MHz
     So the CoreMark/MHz can be calculated by:
     (Iterations*1000000/total_ticks) = 2.019100 CoreMark/MHz


CSV, Benchmark, Iterations, Cycles, CoreMark/MHz
CSV, CoreMark, 800, 396216119, 2.019
IPC = Instret/Cycle = 307677732/396216119 = 0.776