SoC | Rocket SoC 圣地巡游

❗️此坑还没填完

最近 Chisel 改用 CIRCT 的 firtool 作为 FIRRTL 的编译后端,不仅生成 Verilog 可读性上升一大截,速度也快上不少[1]。据说新版本 VCS 也支持 Chisel 了。UC Berkey 技能树点得真是猛

来圣地巡游学习一下著名的 RocketChip 项目

环境搭建

本机环境 WSL2 Ubuntu 20.04

按照官方仓库[2]教程安装。注意这里不需要安装 rocket-tools 本体只需要安装 Ubuntu Packages。接着安装 Mill 和 OpenJDK,再根据 build.sc 里寻找对应 firtool 版本 [3] 安装。在编译时 Chisel 会自动安装。

Chisel 6.0.0 版本后会自动管理 firrtl 版本,build.sc 里有俩个版本 3.6.0 和 5.0.0 的 Chisel 调用,很显然 Rocket 核没有那么新。不知道这俩个版本具体怎么交互的,firrtl 只涉及 FIRRTL 到 Verilog 的编译,和 Chisel 仿真应该没关系,我这里选用了对应 chisel 5.0.0 的 1.40.0 版本

安装完进入 rocket-chip 目录,执行 make verilog 就会开始编译了,但是编译很慢(可能编译了一小时?)。RocketChip 现在使用 mill 构建,即使修改了镜像源也无济于事 [4]

顺利运行即可在 out/emulator/freechips.rocketchip.system.TestHarness/freechips.rocketchip.system.DefaultConfig/mfccompiler/compile.dest 下看到编译好的 Verilog 文件啦。

编译 Config

传递 Config 过程详情看 makefile。

Config 选项在 src/main/scala/system/Configs.scala

class BaseConfig extends Config(
  new WithDefaultMemPort ++
  new WithDefaultMMIOPort ++
  new WithDefaultSlavePort ++
  new WithTimebase(BigInt(1000000)) ++ // 1 MHz
  new WithDTS("freechips,rocketchip-unknown", Nil) ++
  new WithNExtTopInterrupts(2) ++
  new BaseSubsystemConfig
)

云里雾里,主要根据修改 SoC 系统而不是改 Core 配置。放着这个坑。。


  1. https://xiangshan-doc.readthedocs.io/zh-cn/latest/tools/compile-and-sim/ ↩︎

  2. https://github.com/chipsalliance/rocket-chip ↩︎

  3. https://www.chisel-lang.org/docs/appendix/versioning ↩︎

  4. https://mill-build.com/mill/Scala_Module_Config.html#_repository_config ↩︎

posted @ 2024-04-23 21:11  DevilXXL  阅读(101)  评论(0编辑  收藏  举报