准备验证环境

基础环境需求

本项目基于Python编程语言进行UT验证,采用的工具和测试框架为pickertoffee环境需求如下:

  1. Linux操作系统。建议WSL2下安装Ubuntu22.04。
  2. Python。建议Python3.11。
  3. picker。按照快速开始中的提示安装最新版本。
  4. lcov。用于后续test阶段报告生成。使用包管理器即可下载:sudo apt install lcov

环境配置完成后,clone仓库:

git clone https://github.com/XS-MLVP/UnityChipForXiangShan.git
cd UnityChipForXiangShan
pip3 install -r requirements.txt # 安装python依赖(例如 toffee)

下载RTL代码:

默认从仓库https://github.com/XS-MLVP/UnityChipXiangShanRTLs中下载。用户也可以自行按照XiangShan文档编译生成RTL。

make rtl    # 该命下载最新的rtl代码,并解压至rtl目录,并创建软连接

可以用以下命令指定下载的rtl版本:

make rtl args="rtl.version=\'openxiangshan-kmh-fad7803d-24120901\'"

所有RTL下载包请在UnityChipXiangShanRTLs中查看。

RTL压缩包的命名规范为:名称-微架构-Git标记-日期编号.tar.gz,例如openxiangshan-kmh-97e37a2237-24092701.tar.gz。在使用时,仓库代码会过滤掉git标记和后缀,例如通过 cfg.rtl.version 访问到的版本号为:openxiangshan-kmh-24092701。压缩包内的目录结构为:

openxiangshan-kmh-97e37a2237-24092701.tar.gz
└── rtl           # 目录
    |-- *.sv      # 所有sv文件
    `-- *.v       # 所有v文件

编译DUT

该过程的目的是将RTL通过picker工具打包为Python模块。可以通过make命令指定被打包DUT,也可以一次性打包所有DUT。

如果想要自行打包某个dut,需要创建编写scripts目录中的build_ut_<name>.py脚本。这一脚本必须实现一个build方法,在打包时会被自动调用。此外还有一个line_coverage_files方法,用于指定行覆盖率参考的文件。

picker的打包支持内部信号的加入,详见picker的--internal参数,传递给其一个自定义的yaml即可。

# 调用scripts目录中的build_ut_<name>.py中的build方法,创建待验证的Python版DUT
make dut DUTS=<name>  # DUTS的值如果有多个,需要用逗号隔开,支持通配符。DUTS默认值为 "*",编译所有DUT
# 例如:
make dut DUTS=backend_ctrl_block_decode

make dut DUTS=backend_ctrl_block_decode为例,命令执行完成后,会在dut目录下生成对应的Python包:

dut/
├── __init__.py
├── DecodeStage
├── Predecode
└── RVCExpander

完成转换后,在测试用例代码中可以import对应的DUT,例如:

from dut.PreDecode import DUTPreDecode
dut = DUTPreDecode()

编辑配置

运行rtl、dut、test等命令时,默认使用configs/_default.yaml中的配置项。

当然,也可以使用自定义配置,方法如下:

# 指定自定义CFG文件
make CFG=path/to/your_cfg.yaml

类似地,可以在命令行直接指定键值对传入。目前仅有test相关阶段支持命令行配置键值对:

# 指定KV,传递命令行参数,键值对之间用空格隔开
make test KV="log.term-level=\'debug\' test.skip-tags=[\'RARELY_USED\']"
最后修改 March 31, 2025: Fix rvc appendix (#110) (73c0bf6)