Go to file
Anzo c1608a0392
EMU Test / Changes Detection (push) Waiting to run Details
EMU Test / Generate Verilog (push) Blocked by required conditions Details
EMU Test / EMU - Basics (push) Blocked by required conditions Details
EMU Test / EMU - CHI (push) Blocked by required conditions Details
EMU Test / Docker Build (push) Blocked by required conditions Details
EMU Test / EMU - Performance (push) Blocked by required conditions Details
EMU Test / EMU - MC (push) Blocked by required conditions Details
EMU Test / SIMV - Basics (push) Blocked by required conditions Details
EMU Test / Upload Artifacts (push) Blocked by required conditions Details
EMU Test / Check Submodules (push) Blocked by required conditions Details
EMU Test / Check Format (push) Blocked by required conditions Details
Release Jobs / build-xsdev-image (push) Waiting to run Details
fix(VSegmentUnit): flush sbuffer until sbuffer is empty (#4853)
In the previous design, AtomicsUnit sends out sbuffer flush request only
under `s_tlb_and_flush_sbuffer_req` state. The request sets sbuffer
under `x_drain_all` state. Sbuffer returns to `x_idle` state when it is
empty. However StoreQueue may not be fully cleared at this point because
there could be committed stores that haven't yet entered sbuffer. After
these stores eventually enter sbuffer, sbuffer remains in `x_idle` state
and will not flush them into DCache. This results in sbuffer being
unable to drain completely, therefore the atomic instruction gets into
deadlock.

This commit fixes this bug by continuously request sbuffer flush until
sbuffer is fully drained.

---

I directly copied the description of the previous relevant
modifications.
See as follows: 
https://github.com/OpenXiangShan/XiangShan/pull/4487
2025-07-02 17:27:13 +08:00
.github misc: add instructions on the requirements for compilation configuration (#4761) 2025-06-04 09:45:09 +08:00
ChiselAIA@458f94be4c submodule(ChiselAIA):bump ChiselAIA to fix lose interrupt (#4732) 2025-05-26 19:44:38 +08:00
coupledL2@5ab646e995 submodule(CoupledL2): bump CoupledL2 (#4834) 2025-06-24 17:38:28 +08:00
debug bump difftest & mkdir for wave/perf for local-ci script's run-mode (#1927) 2023-02-21 12:49:41 +08:00
difftest@75aae95790 submodule(difftest): use ExecutionGuide trigger hardware error exception (#4785) 2025-06-06 08:46:45 +08:00
fudian@e1bd4695ca chore: bump chisel 6.0.0 (#2654) 2024-01-19 15:05:34 +08:00
huancun@7c9d4cbb2a fix(ResetGen): sync 3 cycles by default (#4733) 2025-05-26 18:36:51 +08:00
images docs(readme): update kunminghu architecture graph (#3910) 2024-11-21 16:24:27 +08:00
macros/src/main/scala NewCSR: fix unprivileged CSRs and permission check 2024-07-17 10:42:14 +08:00
openLLC@e41f5393d3 feat: support parameterized addr width with `CHI_ADDR_WIDTH` (#4620) 2025-04-27 10:51:51 +08:00
project update sbt version 2019-03-03 16:54:26 +08:00
ready-to-run@31254e6f1d submodule(ready-to-run): bump nemu ref in ready-to-run (#4835) 2025-06-24 21:03:42 +08:00
rocket-chip@bcf2051a45 submodule(rocket-chip): bump rocket-chip to fix dm_extTrigger (#4801) 2025-06-15 21:42:17 +08:00
scripts chore(xiangshan.py): add make-threads arg for `make -j` (#4837) 2025-06-27 18:51:37 +08:00
src fix(VSegmentUnit): flush sbuffer until sbuffer is empty (#4853) 2025-07-02 17:27:13 +08:00
tools/readmemh misc: update PCL information (#899) 2021-07-24 23:26:38 +08:00
utility@8ef84f1239 fix(ResetGen): sync 3 cycles by default (#4733) 2025-05-26 18:36:51 +08:00
yunsuan@cadd3c2f43 submodule(yunsuan): bump yunsuan 2025-01-17 17:13:18 +08:00
.dockerignore fix(docker): fix docker image build by moving MILL_OUTPUT_DIR to tmpfs (#4679) 2025-05-10 14:22:26 +08:00
.gitignore feat(build): Build docker image for XiangShan development 2025-05-09 21:02:02 +08:00
.gitmodules misc(submodule): correct case seneitivity in url (#4585) 2025-04-18 10:34:02 +08:00
.mill-version build: bump mill to 0.12.3 (#3933) 2024-11-26 16:12:10 +08:00
.scalafmt.conf style(Frontend): use scalafmt formatting frontend (#3370) 2024-10-25 23:08:56 +08:00
Dockerfile fix(docker): fix docker image build by moving MILL_OUTPUT_DIR to tmpfs (#4679) 2025-05-10 14:22:26 +08:00
LICENSE Add MulanPSL-2.0 License (#824) 2021-06-04 09:06:35 +08:00
Makefile fix(build): Always re-generated test-jar target by mill 2025-05-22 15:12:45 +08:00
Makefile.test test: add example of chiseltest's unit-test and generating verilog for xs' module (#1890) 2023-02-14 09:52:51 +08:00
README.md docs(README): update output files in generate verilog section (#4657) 2025-05-20 14:54:52 +08:00
build.sbt Add sbt build support (#857) 2021-07-03 09:34:31 +08:00
build.sc feat(build): Add `make deps` target to resolve chisel/firtool dependencies 2025-05-09 21:02:02 +08:00
readme.zh-cn.md docs(README): update output files in generate verilog section (#4657) 2025-05-20 14:54:52 +08:00
scalastyle-config.xml chore(scalastyle): allow ([a-z][0-9]|perf|debug)_ prefix (#4838) 2025-06-27 18:52:10 +08:00
scalastyle-test-config.xml chore(scalastyle): allow ([a-z][0-9]|perf|debug)_ prefix (#4838) 2025-06-27 18:52:10 +08:00

README.md

XiangShan

XiangShan (香山) is an open-source high-performance RISC-V processor project.

中文说明在此

Documentation

XiangShan's documentation is available at docs.xiangshan.cc.

The microarchitecture documentation on docs.xiangshan.cc is currently outdated for the latest version (Kunminghu). An updated version is in progress.

XiangShan User Guide has been published separately. You can find it at XiangShan-User-Guide/releases.

Publications

MICRO 2022: Towards Developing High Performance RISC-V Processors Using Agile Methodology

Our paper introduces XiangShan and the practice of agile development methodology on high performance RISC-V processors. It covers some representative tools we have developed and used to accelerate the chip development process, including design, functional verification, debugging, performance validation, etc. This paper is awarded all three available badges for artifact evaluation (Available, Functional, and Reproduced).

Artifacts Available Artifacts Evaluated — Functional Results Reproduced

Paper PDF | IEEE Xplore | BibTeX | Presentation Slides | Presentation Video

Follow us

Wechat/微信:香山开源处理器

Zhihu/知乎:香山开源处理器

Weibo/微博:香山开源处理器

You can contact us through our mailing list. All mails from this list will be archived here.

Architecture

The first stable micro-architecture of XiangShan is called Yanqihu (雁栖湖) and is on the yanqihu branch, which has been developed since June 2020.

The second stable micro-architecture of XiangShan is called Nanhu (南湖) and is on the nanhu branch.

The current version of XiangShan, also known as Kunminghu (昆明湖), is still under development on the master branch.

The micro-architecture overview of Kunminghu (昆明湖) is shown below.

xs-arch-kunminghu

Sub-directories Overview

Some of the key directories are shown below.

.
├── src
│   └── main/scala         # design files
│       ├── device         # virtual device for simulation
│       ├── system         # SoC wrapper
│       ├── top            # top module
│       ├── utils          # utilization code
│       └── xiangshan      # main design code
│           └── transforms # some useful firrtl transforms
├── scripts                # scripts for agile development
├── fudian                 # floating unit submodule of XiangShan
├── huancun                # L2/L3 cache submodule of XiangShan
├── difftest               # difftest co-simulation framework
└── ready-to-run           # pre-built simulation images

IDE Support

bsp

make bsp

IDEA

make idea

Generate Verilog

  • Run make verilog to generate verilog code. This generates multiple .sv files in the build/rtl/ folder (e.g., build/rtl/XSTop.sv).
  • Refer to Makefile for more information.

Run Programs by Simulation

Prepare environment

  • Set environment variable NEMU_HOME to the absolute path of the NEMU project.
  • Set environment variable NOOP_HOME to the absolute path of the XiangShan project.
  • Set environment variable AM_HOME to the absolute path of the AM project.
  • Install mill. Refer to the Manual section in this guide.
  • Clone this project and run make init to initialize submodules.

Run with simulator

  • Install Verilator, the open-source Verilog simulator.
  • Run make emu to build the C++ simulator ./build/emu with Verilator.
  • Refer to ./build/emu --help for run-time arguments of the simulator.
  • Refer to Makefile and verilator.mk for more information.

Example:

make emu CONFIG=MinimalConfig EMU_THREADS=2 -j10
./build/emu -b 0 -e 0 -i ./ready-to-run/coremark-2-iteration.bin --diff ./ready-to-run/riscv64-nemu-interpreter-so

Troubleshooting Guide

Troubleshooting Guide

Acknowledgement

The implementation of XiangShan is inspired by several key papers. We list these papers in XiangShan document, see: Acknowledgements. We very much encourage and expect that more academic innovations can be realised based on XiangShan in the future.

LICENSE

Copyright © 2020-2025 Institute of Computing Technology, Chinese Academy of Sciences.

Copyright © 2021-2025 Beijing Institute of Open Source Chip

Copyright © 2020-2022 by Peng Cheng Laboratory.

XiangShan is licensed under Mulan PSL v2.