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 7e05e6e4fSXu, Zefan## Documentation 840adeb5aSwangkaifan 9e05e6e4fSXu, ZefanXiangShan's documentation is available at [docs.xiangshan.cc](https://docs.xiangshan.cc). 1057bb43b5Swakafa 11e05e6e4fSXu, 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. 12e05e6e4fSXu, Zefan 13e05e6e4fSXu, ZefanXiangShan User Guide has been published separately. You can find it at [XiangShan-User-Guide/releases](https://github.com/OpenXiangShan/XiangShan-User-Guide/releases). 1440adeb5aSwangkaifan 155986560eSYinan Xu## Publications 165986560eSYinan Xu 175986560eSYinan Xu### MICRO 2022: Towards Developing High Performance RISC-V Processors Using Agile Methodology 185986560eSYinan Xu 195986560eSYinan XuOur paper introduces XiangShan and the practice of agile development methodology on high performance RISC-V processors. 205986560eSYinan XuIt covers some representative tools we have developed and used to accelerate the chip development process, including design, functional verification, debugging, performance validation, etc. 215986560eSYinan XuThis paper is awarded all three available badges for artifact evaluation (Available, Functional, and Reproduced). 225986560eSYinan Xu 235986560eSYinan Xu 245986560eSYinan Xu 255986560eSYinan Xu 265986560eSYinan Xu 27e2aeeb1fSYinan 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) 285986560eSYinan Xu 29708ceed4SYinan Xu## Follow us 30708ceed4SYinan Xu 31708ceed4SYinan XuWechat/微信:香山开源处理器 32708ceed4SYinan Xu 33708ceed4SYinan Xu<div align=left><img width="340" height="117" src="images/wechat.png"/></div> 34708ceed4SYinan Xu 35708ceed4SYinan XuZhihu/知乎:[香山开源处理器](https://www.zhihu.com/people/openxiangshan) 36708ceed4SYinan Xu 37708ceed4SYinan XuWeibo/微博:[香山开源处理器](https://weibo.com/u/7706264932) 38708ceed4SYinan Xu 39521bb218SRishikeshan 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]/). 40770ded88SLingrui98 4140adeb5aSwangkaifan## Architecture 4240adeb5aSwangkaifan 43521bb218SRishikeshan 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. 448815ed52SYinan Xu 45521bb218SRishikeshan 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). 468815ed52SYinan Xu 478815ed52SYinan XuThe current version of XiangShan, also known as Kunminghu (昆明湖), is still under development on the master branch. 4840adeb5aSwangkaifan 496639e9a4STang HaojinThe micro-architecture overview of Kunminghu (昆明湖) is shown below. 5040adeb5aSwangkaifan 516639e9a4STang Haojin 5240adeb5aSwangkaifan 5340adeb5aSwangkaifan 5440adeb5aSwangkaifan 5540adeb5aSwangkaifan## Sub-directories Overview 5640adeb5aSwangkaifan 5740adeb5aSwangkaifanSome of the key directories are shown below. 5840adeb5aSwangkaifan 5940adeb5aSwangkaifan``` 6040adeb5aSwangkaifan. 6157bb43b5Swakafa├── src 6257bb43b5Swakafa│ └── main/scala # design files 6357bb43b5Swakafa│ ├── device # virtual device for simulation 6457bb43b5Swakafa│ ├── system # SoC wrapper 6557bb43b5Swakafa│ ├── top # top module 6657bb43b5Swakafa│ ├── utils # utilization code 675931ace3STang Haojin│ └── xiangshan # main design code 685931ace3STang Haojin│ └── transforms # some useful firrtl transforms 6940adeb5aSwangkaifan├── scripts # scripts for agile development 7057bb43b5Swakafa├── fudian # floating unit submodule of XiangShan 7157bb43b5Swakafa├── huancun # L2/L3 cache submodule of XiangShan 7257bb43b5Swakafa├── difftest # difftest co-simulation framework 7357bb43b5Swakafa└── ready-to-run # pre-built simulation images 7440adeb5aSwangkaifan``` 7540adeb5aSwangkaifan 760af3f746SJiawei Lin## IDE Support 770af3f746SJiawei Lin 780af3f746SJiawei Lin### bsp 790af3f746SJiawei Lin``` 800af3f746SJiawei Linmake bsp 810af3f746SJiawei Lin``` 820af3f746SJiawei Lin 830af3f746SJiawei Lin### IDEA 840af3f746SJiawei Lin``` 850af3f746SJiawei Linmake idea 860af3f746SJiawei Lin``` 8740adeb5aSwangkaifan 8840adeb5aSwangkaifan 8940adeb5aSwangkaifan## Generate Verilog 9040adeb5aSwangkaifan 9140adeb5aSwangkaifan* Run `make verilog` to generate verilog code. The output file is `build/XSTop.v`. 9240adeb5aSwangkaifan* Refer to `Makefile` for more information. 9340adeb5aSwangkaifan 9440adeb5aSwangkaifan 9540adeb5aSwangkaifan 9640adeb5aSwangkaifan## Run Programs by Simulation 9740adeb5aSwangkaifan 9840adeb5aSwangkaifan### Prepare environment 9964fc9c9dSZihao Yu 100a2ba9cdcSYinan Xu* Set environment variable `NEMU_HOME` to the **absolute path** of the [NEMU project](https://github.com/OpenXiangShan/NEMU). 101a2ba9cdcSYinan Xu* Set environment variable `NOOP_HOME` to the **absolute path** of the XiangShan project. 102a2ba9cdcSYinan Xu* Set environment variable `AM_HOME` to the **absolute path** of the [AM project](https://github.com/OpenXiangShan/nexus-am). 103ab012286SHao* 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). 10440adeb5aSwangkaifan* Clone this project and run `make init` to initialize submodules. 10564fc9c9dSZihao Yu 10640adeb5aSwangkaifan### Run with simulator 10705f23f57SWilliam Wang 108a2ba9cdcSYinan Xu* Install [Verilator](https://verilator.org/guide/latest/), the open-source Verilog simulator. 109a2ba9cdcSYinan Xu* Run `make emu` to build the C++ simulator `./build/emu` with Verilator. 110a2ba9cdcSYinan Xu* Refer to `./build/emu --help` for run-time arguments of the simulator. 111a2ba9cdcSYinan Xu* Refer to `Makefile` and `verilator.mk` for more information. 11205f23f57SWilliam Wang 11305f23f57SWilliam WangExample: 1148c0a01afSClSlaid 115a2ba9cdcSYinan Xu```bash 1161545277aSYinan Xumake emu CONFIG=MinimalConfig EMU_THREADS=2 -j10 1172f256e1dSwakafa./build/emu -b 0 -e 0 -i ./ready-to-run/coremark-2-iteration.bin --diff ./ready-to-run/riscv64-nemu-interpreter-so 1185c647eb5SZihao Yu``` 1195c647eb5SZihao Yu 1202d02df72SWilliam Wang## Troubleshooting Guide 1212d02df72SWilliam Wang 1222d02df72SWilliam Wang[Troubleshooting Guide](https://github.com/OpenXiangShan/XiangShan/wiki/Troubleshooting-Guide) 1230080a7d3SHaoyuan Feng 1240080a7d3SHaoyuan Feng## Acknowledgement 1250080a7d3SHaoyuan Feng 1260080a7d3SHaoyuan 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. 127*2a03c3bdSXu, Zefan 128*2a03c3bdSXu, Zefan## LICENSE 129*2a03c3bdSXu, Zefan 130*2a03c3bdSXu, ZefanCopyright © 2020-2025 Institute of Computing Technology, Chinese Academy of Sciences. 131*2a03c3bdSXu, Zefan 132*2a03c3bdSXu, ZefanCopyright © 2021-2025 Beijing Institute of Open Source Chip 133*2a03c3bdSXu, Zefan 134*2a03c3bdSXu, ZefanCopyright © 2020-2022 by Peng Cheng Laboratory. 135*2a03c3bdSXu, Zefan 136*2a03c3bdSXu, ZefanXiangShan is licensed under [Mulan PSL v2](LICENSE). 137