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

在Rocket-Chip SoC中运行多线程程序仅单核心执行,求指导

问题分析与解决方案

1. 运行命令的配置匹配问题

你生成的是TutorialConfig多核心SoC,但运行命令里指定的是CONFIG=TutorialStarterConfig——这两个配置并非同一套:TutorialStarterConfig是Chipyard教程默认的单核心基础配置,而你自定义的TutorialConfig才是包含Rocket+BOOM多核心的目标配置。这种不匹配会导致你实际运行的是单核心SoC,自然不会出现C1的trace输出。

解决:将运行命令的CONFIG参数改为你自定义的TutorialConfig:

make CONFIG=TutorialConfig run-binary BINARY=riscv-tests/benchmarks/mt-matmul.riscv

2. 程序端的多核心适配验证

修改crt.S核心数后,需确认以下关键细节:

  • 是否正确实现了非0号核心的唤醒逻辑:mt-matmul这类多线程基准需要在启动时触发C1从指定地址执行,crt.S中必须包含通过PLIC(平台级中断控制器)或核心间中断唤醒其他核心的代码。
  • 编译链配置是否正确:编译时需指定匹配目标架构的参数(如64位核心用-march=rv64gc),同时确保链接脚本支持多核心地址空间映射,避免程序仅加载到C0的执行域。

3. SoC配置的多核心启用确认

检查你的TutorialConfig.scala配置文件:

  • 是否同时实例化了RocketTile和BoomTile:需在BuildTop逻辑中明确添加多个核心Tile的生成代码,确保SoC物理上包含两个核心。
  • 是否启用多核心必备外设:必须包含PLIC(用于核心间中断唤醒)、共享内存/L2缓存(用于核心间数据通信)等组件。
  • 是否为每个核心分配了唯一hartid:确保C0和C1的硬件线程ID不同,这是程序识别并调度多核心的基础。

4. Trace输出的配置检查

若以上配置都正确但仍看不到C1的trace,需验证仿真trace的开启逻辑:

  • 检查配置文件中是否启用了全局trace:需添加withTrace配置项,并确保对所有核心开启trace输出。
  • 运行仿真时是否显式开启trace:部分Chipyard仿真需要通过+trace参数或在Makefile中设置TRACE=1来启用多核心trace记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:55:30