You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rocket Core CPU全局变量0值初始化失败问题求助

Rocket Core Coremark测试中全局变量0值初始化失败问题

问题描述

在对Rocket Core CPU进行Coremark基准测试时,测试失败,经调试定位到volatile全局变量0值初始化失败:部分本该初始化为0x0的volatile全局变量,实际被赋予了随机值。

复现环境

  • 编译环境:Ubuntu 22.04,gcc 11.4.0
  • 交叉编译器:riscv32-unknown-elf-gcc (g2ee5e430018) 12.2.0(来自rocket-tools仓库04a559f版本)
  • 编译选项:项目内Makefile
  • 测试程序:项目内test.c
  • 链接脚本:项目内common目录下文件
  • UART打印模块:项目内uart目录下文件
  • Rocketchip仓库版本:0586532
  • Rocketchip配置:RV32imac架构,1核,无调试模块,带2个GPIO、1个UART,仿真SRAM 256MB
  • 仿真环境:CentOS 7.9,Synopsys VCS R-2020.12-SP1

仿真流程

  1. 编译生成.hex文件:
$ make clean
$ make bmarks=test
$ riscv32-unknown-elf-objcopy -O binary test.riscv test.bin
$ hexdump -v -e/'4 "%08x\n" ' test.bin > test.hex
$ chmod 755 test.hex
  1. 将生成的test.hex写入testbench.v中定义的SRAM
  2. 编译生成仿真可执行文件并运行

预期与实际行为

预期行为

设置PERFORMANCE_RUN=1后,全局seed变量和局部num变量应初始化如下:

seed1_volatile=0x0
seed2_volatile=0x0
seed3_volatile=0x66
seed4_volatile=0xa
seed5_volatile=0
num1=0x0
num2=0x0
num3=0x0
num4=0x0
num5=0x0

实际行为

调试输出显示,本该初始化为0的全局seed变量被赋了随机值,其余变量值符合预期:

seed1_volatile=0xdd232eba
seed2_volatile=0xedd684db
seed3_volatile=0x66
seed4_volatile=0xa
seed5_volatile=0xf870bef0
num1=0x0
num2=0x0
num3=0x0
num4=0x0
num5=0x0

已做调试尝试

  • 验证UART打印功能正常,各类格式输出均符合预期
  • 确认PERFORMANCE_RUN标志值设置正确
  • 通过Dhrystone测试验证Rocket Core运行状态正常
  • 确认程序内存地址分配在预期范围(0x80000000 - 0x90000000)

已发现的现象

  • 汇编代码显示:全局变量通过lw a1,offset(a1)或lw a1,offset(gp)指令从内存加载;局部变量则通过li a1,0指令加载立即数0
  • .hex文件中:非零的初始化值会被写入SRAM,但值为0的初始化项未被存储

求助方向

目前不清楚如何确保全局变量正确初始化为0,恳请各位指点可能的原因或后续调试方向。


内容的提问来源于stack exchange,提问作者Jasminy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:48:12