香山开源高性能处理器核项目经过“雁栖湖”“南湖”和“昆明湖”三代,收获到了国内外的众多关注,小编经常遇到不少小伙伴想要跃跃欲试,希望和“香山”有一番亲密接触,然而,从入门到放弃的原因竟然是搭建不起 Chisel 的开发环境。如今,香山开源社区贡献了 docker[1]镜像,提供了 Chisel 生成 verilog 和 verilator 仿真两大支持。具体如何使用且听小编道来。
预备动作
获取“香山”代码后,如果没有梯子,可以参考之前公众号文章《2025 完整香山代码库下载解决方案全攻略》(https://mp.weixin.qq.com/s/pRU9BgSG_tm0P-9rZ1xRxg)点击链接直达原文,获取代码。
使用 Docker 生成 XiangShan 的 Verilog 代码
仅需两步,跟着我们的节奏继续学习吧。
获取最新容器
香山开源社区已经准备好了 docker 容器,基础 Docker 镜像命名为ghcr.io/openxiangshan/xsdev
,基于OpenXiangShan/xs-env仓库的ghcr.io/openxiangshan/xs-env:latest
镜像构建,并集成了“香山”项目生成 RTL 所需的 Chisel/Mill 环境。
安装 docker 后可以通过如下命令获取
docker pull ghcr.io/openxiangshan/xsdev:master
或
make pull-image
获取后确认已经是最新版本
在容器内生成 verilog
同样在“香山”代码目录,根据自己需要生成 verilog,只要看到 "Switching to Docker environment..." 说明已经在容器构建啦!
make emu 包含 make verilog 的命令。
仿真
根据如上步骤生成 verilog 代码后就可以仿真。划重点:“香山”项目默认采用 verilator 完成仿真,后者在容器中构建完成。其中 verilog 生成 c++文件在容器里面,c++文件编译为可执行文件在主机(容器外)。
容器环境说明
容器中本身不包含“香山”代码,其中目录映射关系如下:
● 只读挂载:
/work
目录→ 项目源码目录$srctree
● 读写挂载:
/work/out
目录→ 项目目录下的.docker-mill-out
(用于隔离Docker内Mill的中间文件)
/work/build
目录→ 项目构建目录build
默认源码目录以只读模式挂载,防止误修改。构建输出目录build
和Mill中间目录.docker-mill-out
则挂载为可写模式。
容器中专门使用了 .docker-mill-out,代替 out 目录,避免和容器外的 mill 输出相互干扰。
问题解决
测试获取的容器是否可用
假设“香山”代码所在路径是
~/works/source/XiangShan/XiangShan
可以在该目录通过`make sh`进入容器:
进入 docker 后再编译