xref: /XiangShan/README.md (revision e05e6e4ff34afa1beef54a4dad870791cb76ab77)
105f23f57SWilliam Wang# XiangShan
264fc9c9dSZihao Yu
340adeb5aSwangkaifanXiangShan (香山) is an open-source high-performance RISC-V processor project.
464fc9c9dSZihao Yu
5f1d6f360SZibo Huang中文说明[在此](readme.zh-cn.md)。
664fc9c9dSZihao Yu
757bb43b5SwakafaCopyright 2020-2022 by Institute of Computing Technology, Chinese Academy of Sciences.
864fc9c9dSZihao Yu
957bb43b5SwakafaCopyright 2020-2022 by Peng Cheng Laboratory.
10f320e0f0SYinan Xu
11*e05e6e4fSXu, Zefan## Documentation
1240adeb5aSwangkaifan
13*e05e6e4fSXu, ZefanXiangShan's documentation is available at [docs.xiangshan.cc](https://docs.xiangshan.cc).
1457bb43b5Swakafa
15*e05e6e4fSXu, ZefanThe microarchitecture documentation on [docs.xiangshan.cc](https://docs.xiangshan.cc) is currently outdated for the latest version (Kunminghu). An updated version is in progress.
16*e05e6e4fSXu, Zefan
17*e05e6e4fSXu, ZefanXiangShan User Guide has been published separately. You can find it at [XiangShan-User-Guide/releases](https://github.com/OpenXiangShan/XiangShan-User-Guide/releases).
1840adeb5aSwangkaifan
195986560eSYinan Xu## Publications
205986560eSYinan Xu
215986560eSYinan Xu### MICRO 2022: Towards Developing High Performance RISC-V Processors Using Agile Methodology
225986560eSYinan Xu
235986560eSYinan XuOur paper introduces XiangShan and the practice of agile development methodology on high performance RISC-V processors.
245986560eSYinan XuIt covers some representative tools we have developed and used to accelerate the chip development process, including design, functional verification, debugging, performance validation, etc.
255986560eSYinan XuThis paper is awarded all three available badges for artifact evaluation (Available, Functional, and Reproduced).
265986560eSYinan Xu
275986560eSYinan Xu![Artifacts Available](https://github.com/OpenXiangShan/XiangShan-doc/raw/main/publications/images/artifacts_available_dl.jpg)
285986560eSYinan Xu![Artifacts Evaluated — Functional](https://github.com/OpenXiangShan/XiangShan-doc/raw/main/publications/images/artifacts_evaluated_functional_dl.jpg)
295986560eSYinan Xu![Results Reproduced](https://github.com/OpenXiangShan/XiangShan-doc/raw/main/publications/images/results_reproduced_dl.jpg)
305986560eSYinan Xu
31e2aeeb1fSYinan Xu[Paper PDF](https://github.com/OpenXiangShan/XiangShan-doc/blob/main/publications/micro2022-xiangshan.pdf) | [IEEE Xplore](https://ieeexplore.ieee.org/abstract/document/9923860) | [BibTeX](https://github.com/OpenXiangShan/XiangShan-doc/blob/main/publications/micro2022-xiangshan.bib) | [Presentation Slides](https://github.com/OpenXiangShan/XiangShan-doc/blob/main/publications/micro2022-xiangshan-slides.pdf) | [Presentation Video](https://www.bilibili.com/video/BV1FB4y1j7Jy)
325986560eSYinan Xu
33708ceed4SYinan Xu## Follow us
34708ceed4SYinan Xu
35708ceed4SYinan XuWechat/微信:香山开源处理器
36708ceed4SYinan Xu
37708ceed4SYinan Xu<div align=left><img width="340" height="117" src="images/wechat.png"/></div>
38708ceed4SYinan Xu
39708ceed4SYinan XuZhihu/知乎:[香山开源处理器](https://www.zhihu.com/people/openxiangshan)
40708ceed4SYinan Xu
41708ceed4SYinan XuWeibo/微博:[香山开源处理器](https://weibo.com/u/7706264932)
42708ceed4SYinan Xu
43521bb218SRishikeshan Sulochana/Lavakumar (Work)You can contact us through [our mailing list](mailto:[email protected]). All mails from this list will be archived [here](https://www.mail-archive.com/[email protected]/).
44770ded88SLingrui98
4540adeb5aSwangkaifan## Architecture
4640adeb5aSwangkaifan
47521bb218SRishikeshan Sulochana/Lavakumar (Work)The first stable micro-architecture of XiangShan is called Yanqihu (雁栖湖) and is [on the yanqihu branch](https://github.com/OpenXiangShan/XiangShan/tree/yanqihu), which has been developed since June 2020.
488815ed52SYinan Xu
49521bb218SRishikeshan Sulochana/Lavakumar (Work)The second stable micro-architecture of XiangShan is called Nanhu (南湖) and is [on the nanhu branch](https://github.com/OpenXiangShan/XiangShan/tree/nanhu).
508815ed52SYinan Xu
518815ed52SYinan XuThe current version of XiangShan, also known as Kunminghu (昆明湖), is still under development on the master branch.
5240adeb5aSwangkaifan
536639e9a4STang HaojinThe micro-architecture overview of Kunminghu (昆明湖) is shown below.
5440adeb5aSwangkaifan
556639e9a4STang Haojin![xs-arch-kunminghu](images/xs-arch-kunminghu.svg)
5640adeb5aSwangkaifan
5740adeb5aSwangkaifan
5840adeb5aSwangkaifan
5940adeb5aSwangkaifan## Sub-directories Overview
6040adeb5aSwangkaifan
6140adeb5aSwangkaifanSome of the key directories are shown below.
6240adeb5aSwangkaifan
6340adeb5aSwangkaifan```
6440adeb5aSwangkaifan.
6557bb43b5Swakafa├── src
6657bb43b5Swakafa│   └── main/scala         # design files
6757bb43b5Swakafa│       ├── device         # virtual device for simulation
6857bb43b5Swakafa│       ├── system         # SoC wrapper
6957bb43b5Swakafa│       ├── top            # top module
7057bb43b5Swakafa│       ├── utils          # utilization code
715931ace3STang Haojin│       └── xiangshan      # main design code
725931ace3STang Haojin│           └── transforms # some useful firrtl transforms
7340adeb5aSwangkaifan├── scripts                # scripts for agile development
7457bb43b5Swakafa├── fudian                 # floating unit submodule of XiangShan
7557bb43b5Swakafa├── huancun                # L2/L3 cache submodule of XiangShan
7657bb43b5Swakafa├── difftest               # difftest co-simulation framework
7757bb43b5Swakafa└── ready-to-run           # pre-built simulation images
7840adeb5aSwangkaifan```
7940adeb5aSwangkaifan
800af3f746SJiawei Lin## IDE Support
810af3f746SJiawei Lin
820af3f746SJiawei Lin### bsp
830af3f746SJiawei Lin```
840af3f746SJiawei Linmake bsp
850af3f746SJiawei Lin```
860af3f746SJiawei Lin
870af3f746SJiawei Lin### IDEA
880af3f746SJiawei Lin```
890af3f746SJiawei Linmake idea
900af3f746SJiawei Lin```
9140adeb5aSwangkaifan
9240adeb5aSwangkaifan
9340adeb5aSwangkaifan## Generate Verilog
9440adeb5aSwangkaifan
9540adeb5aSwangkaifan* Run `make verilog` to generate verilog code. The output file is `build/XSTop.v`.
9640adeb5aSwangkaifan* Refer to `Makefile` for more information.
9740adeb5aSwangkaifan
9840adeb5aSwangkaifan
9940adeb5aSwangkaifan
10040adeb5aSwangkaifan## Run Programs by Simulation
10140adeb5aSwangkaifan
10240adeb5aSwangkaifan### Prepare environment
10364fc9c9dSZihao Yu
104a2ba9cdcSYinan Xu* Set environment variable `NEMU_HOME` to the **absolute path** of the [NEMU project](https://github.com/OpenXiangShan/NEMU).
105a2ba9cdcSYinan Xu* Set environment variable `NOOP_HOME` to the **absolute path** of the XiangShan project.
106a2ba9cdcSYinan Xu* Set environment variable `AM_HOME` to the **absolute path** of the [AM project](https://github.com/OpenXiangShan/nexus-am).
107ab012286SHao* Install `mill`. Refer to [the Manual section in this guide](https://mill-build.org/mill/0.11.11/Scala_Installation_IDE_Support.html#_bootstrap_scripts).
10840adeb5aSwangkaifan* Clone this project and run `make init` to initialize submodules.
10964fc9c9dSZihao Yu
11040adeb5aSwangkaifan### Run with simulator
11105f23f57SWilliam Wang
112a2ba9cdcSYinan Xu* Install [Verilator](https://verilator.org/guide/latest/), the open-source Verilog simulator.
113a2ba9cdcSYinan Xu* Run `make emu` to build the C++ simulator `./build/emu` with Verilator.
114a2ba9cdcSYinan Xu* Refer to `./build/emu --help` for run-time arguments of the simulator.
115a2ba9cdcSYinan Xu* Refer to `Makefile` and `verilator.mk` for more information.
11605f23f57SWilliam Wang
11705f23f57SWilliam WangExample:
1188c0a01afSClSlaid
119a2ba9cdcSYinan Xu```bash
1201545277aSYinan Xumake emu CONFIG=MinimalConfig EMU_THREADS=2 -j10
1212f256e1dSwakafa./build/emu -b 0 -e 0 -i ./ready-to-run/coremark-2-iteration.bin --diff ./ready-to-run/riscv64-nemu-interpreter-so
1225c647eb5SZihao Yu```
1235c647eb5SZihao Yu
1242d02df72SWilliam Wang## Troubleshooting Guide
1252d02df72SWilliam Wang
1262d02df72SWilliam Wang[Troubleshooting Guide](https://github.com/OpenXiangShan/XiangShan/wiki/Troubleshooting-Guide)
1270080a7d3SHaoyuan Feng
1280080a7d3SHaoyuan Feng## Acknowledgement
1290080a7d3SHaoyuan Feng
1300080a7d3SHaoyuan FengThe implementation of XiangShan is inspired by several key papers. We list these papers in XiangShan document, see: [Acknowledgements](https://docs.xiangshan.cc/zh-cn/latest/acknowledgments/). We very much encourage and expect that more academic innovations can be realised based on XiangShan in the future.
131