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 285986560eSYinan Xu 295986560eSYinan Xu 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 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