最近 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 配置。放着这个坑。。