UnityChipForXiangShan/.github
yaozhicheng 5f66112dcc draft zh desc 2024-09-29 13:14:09 +08:00
..
image draft zh desc 2024-09-29 13:14:09 +08:00
README.md draft zh desc 2024-09-29 13:14:09 +08:00

README.md

万众一芯之香山处理器

中文|English

本项目旨在通过开源众包的方式对香山处理器的昆明湖架构进行单元Unit Test验证。该项目选择Python作为主要的验证语言参与验证你将学习到以下内容

  1. 电路的运行特性:从软件的角度观察电路的运行特性,深入了解电路设计的原理。
  2. 高性能处理器设计学习Chisel硬件描述语言研读相关代码和论文掌握最新的架构设计理念。
  3. 芯片验证的基本流程熟悉规范文档Spec文档学习如何进行UT验证并评估验证结果的合理性。
  4. Python芯片验证掌握异步编程、回调等高级编程模式利用Python进行芯片验证。
  5. Linux开发环境学习基础的Linux操作命令搭建验证环境。

本项目欢迎多方面的贡献,并将在一定期限内以特定方式给予奖励(如奖金、证书、实习机会等)。具体贡献类型包括:

  • 贡献一编写验证文档包括设计对象Design Under TestDUT的规范文档、说明文档、功能描述文档等。
  • 贡献二:开发测试用例,包括针对各个功能点的测试代码与注释,以及相关的说明文档。
  • 贡献三发现并报告香山处理器中的bug并提供原因分析和修复建议。
  • 贡献四:其他方面的贡献,例如为本项目提供的工具增加新功能等。

万众一芯项目地址:https://open-verify.cc

期待你的参与!

整体状态

验证进度

当前各个DUT的验证状态包括功能点个数、代码行覆盖率、Bug数等请查看 https://open-verify.cc/UnityChipForXiangShan/

其他内容快捷连接:

本项目中的统计信息根据commit等数据自动更新参与者可以提交issue写明任务内容预计完成时间等同步正在进行的任务。

准备环境

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

  1. Linux操作系统。建议WSL2下安装Ubuntu22.04。
  2. Python。建议Python3.11。
  3. picker。按照快速开始中的提示安装最新版本。
  4. mlvp。可通过pip3 install mlvp@git+https://github.com/XS-MLVP/mlvp安装最新版本。

环境配置完成后clone仓库

git clone https://github.com/XS-MLVP/UnityChipForXiangShan.git

下载RTL代码

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

cd UnityChipForXiangShan
make rtl    # 该命下载最新的rtl代码并解压至rtl目录并创建软连接
# 可通过target指定版本
make rtl target=2024092701/openxiangshan-kmh-97e37a2237-24092701.tar.gz

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

编译DUT

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

# 调用scripts目录中的Makefile.build_ut_<name>创建待验证的Python版DUT
make dut target=<name>
# 例如:
make dut target=backend_ctrlblock_decode
# 调用scripts目录中所有的Makefile.build_ut_*文件创建所有DUT。
make dut_all

make dut target=backend_ctrlblock_decode为例命令执行完成后会在dut目录下生成对应的Python包

dut/
├── __init__.py
├── decodestage
├── predecode
└── rvcexpander

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

from dut.predecode.UT_PreDecode import DUTPreDecode
dut = DUTPreDecode()

运行测试

本项目基于mlvp验证框架进行验证mlvp基于Pytest测试框架。运算测试时测试框架自动搜索所有以test_*.py文件,并自动执行其中所有以test_开头的测试用例Test Case

# 执行所有ut_*目录中的test case
make test_all
# 执行指定目录下的test case
make test target=<dir>
# 例如:
# 执行ut_backend/ut_decode目录中所有的test case
make test target=ut_backend/ut_decode

运行完成后在out目录会生成html版本的测试报告可通过浏览器直接打开查看VS Code IDE建议安装Open In Default Browser插件)。

添加测试

添加一个全新的DUT测试用例需要完成以下三部分内容

  1. 添加编译脚本scripts目录下编写对应的rtlpython的编译Makefile文件例如Makefile.build_ut_backend_ctrlblock_decode,必须以Makefile.build_ut_开头)以及对应的目录(目录中包含必要的输入文件,例如rtlfilelist,需要导出的内部信号等)。
  2. 添加测试用例 在对应的ut_*目录中创建对应的python模块(例如ut_backend/ctrl_block/decode,在该模块中需要包含以test_*.py的测试用例。用例的目录结构请按照昆明湖层级架构图进行添加,以确保收集测试结果时能与层级图对应。测试用例的编写方法请参考Pytest官方文档
  3. 添加依赖模块 如果有需要的话,可以在tools、comm等模块中添加该DUT测试需要的基础工具。如果该工具不够通用请添加到对应的ut_模块中,且不能以test_前缀进行命名(例如参考模型可以是ut_backend/ctrl_block/decode/reference.py

如果是在已有的DUT测试中增加内容按原有目录结构添加即可。

*目录或文件名称需要合理,能通过其命名知晓其具体含义。

如何通过picker和mlvp库进行Python芯片验证请参考https://open-verify.cc/mlvp/docs

添加文档

本项目的DUT文档通过docsy编写,文档内容位于documents/content目录,分enzh-cn两种语言。具体文档编写语法,所用工具等,请参考docsy文档hugo文档

可以通过以下命令查看效果hugo安装documents/README.md

$cd documents
$hugo server
# 找到类似输出:
Web Server is available at //localhost:1313/ (bind address 127.0.0.1)

通过浏览器访问http://127.0.0.1:1313即可查看文档。

目录结构

├── comm               # 公共函数模块,例如日志、环境配置等
├── docs               # 文档在线部署目录web + doc请不要修改
├── documents          # DUT docsy 文档
│   ├── content
│   │   ├── en
│   │   │   └── docs   # DUT 英文文档
│   │   └── zh-cn
│   │       └── docs   # DUT 中文文档 提交PR时中英文都需要
│   └── static         # DUT 静态目录插入的图片按content中的目录结构放该目录
├── dut                # DUT的Python模块自动生成
├── out                # 输出
│   └── report         # 输出的测试报告
├── rtl                # RTL文件目录
├── scripts            # DUT转Python的编译脚本
├── tools              # 公共工具模块
├── ut_backend         # 后端测试集合
├── ut_frontend        # 前端测试集合
├── ut_mem_block       # 访存测试集合
└── ut_misc            # 其他访存测试集合

参与本项目

本项目欢迎任何人以Fork + PR的方式参与。

若测试过程中发现bug提交流程如下

  1. 参与者编写测试用例自测完成后提交PR
  2. 如果发现有未pass的测试分析bug原因然后在本仓库提交 issue关联对应PR并赋予bugc标签
  3. 香山开放者确认bug修改标签为bug
  4. 参与者在香山官方仓库上提交issue附上本仓库的issue确认连接

*请在issue中对bug进行详细描述方便加速确认

万众一芯QQ交流群