- 16 10月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
This commit removes flush IO for every module. Flush now re-uses redirect ports to flush the instructions.
-
- 11 10月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
* bump chisel to 3.5.0-RC1 We don't want to use SNAPSHOT version any more because we don't know what will happen when we wake up in the morning. * misc: remove TMA_* to avoid conflicts
-
- 10 10月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
This commit optimizes RenameTable's timing. Read addresses come from instruction buffer directly and has best timing. So we let data read at decode stage and bypass write data from this clock cycle to the read data at next cycle. For write, we latch the write request and process it at the next cycle.
-
- 28 9月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
* rename Roq to Rob * remove trailing whitespaces * remove unused parameters
-
- 19 9月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
This commit adds timer counters for some important pipeline stages, including rename, dispatch, dispatch2, select, issue, execute, commit. We add performance counters for different types of instructions to see the latency in different pipeline stages.
-
- 13 9月, 2021 1 次提交
-
-
由 YikeZhou 提交于
-
- 09 9月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
This commit adds some simple instruction fusion cases in decode stage. Currently we only implement instruction pairs that can be fused into RV64GCB instructions. Instruction fusions are detected in the decode stage by FusionDecoder. The decoder checks every two instructions and marks the first instruction fused if they can be fused into one instruction. The second instruction is removed by setting the valid field to false. Simple fusion cases include sh1add, sh2add, sh3add, sexth, zexth, etc. Currently, ftq in frontend needs every instruction to commit. However, the second instruction is removed from the pipeline and will not commit. To solve this issue, we temporarily add more bits to isFused to indicate the offset diff of the two fused instruction. There are four possibilities now. This feature may be removed later. This commit also adds more instruction fusion cases that need changes in both the decode stage and the funtion units. In this commit, we add some opcode to the function units and fuse the new instruction pairs into these new internal uops. The list of opcodes we add in this commit is shown below: - szewl1: `slli r1, r0, 32` + `srli r1, r0, 31` - szewl2: `slli r1, r0, 32` + `srli r1, r0, 30` - byte2: `srli r1, r0, 8` + `andi r1, r1, 255` - sh4add: `slli r1, r0, 4` + `add r1, r1, r2` - sr30add: `srli r1, r0, 30` + `add r1, r1, r2` - sr31add: `srli r1, r0, 31` + `add r1, r1, r2` - sr32add: `srli r1, r0, 32` + `add r1, r1, r2` - oddadd: `andi r1, r0, 1`` + `add r1, r1, r2` - oddaddw: `andi r1, r0, 1`` + `addw r1, r1, r2` - orh48: mask off the first 16 bits and or with another operand (`andi r1, r0, -256`` + `or r1, r1, r2`) Furthermore, this commit adds some complex instruction fusion cases to the decode stage and function units. The complex instruction fusion cases are detected after the instructions are decoded into uop and their CtrlSignals are used for instruction fusion detection. We add the following complex instruction fusion cases: - addwbyte: addw and mask it with 0xff (extract the first byte) - addwbit: addw and mask it with 0x1 (extract the first bit) - logiclsb: logic operation and mask it with 0x1 (extract the first bit) - mulw7: andi 127 and mulw instructions. Input to mul is AND with 0x7f if mulw7 bit is set to true.
-
- 06 9月, 2021 1 次提交
-
-
由 YikeZhou 提交于
* backend, rename: support elimination of mv inst whose lsrc=0 [known bug] instr page fault not properly raised after sfence.vma * backend, roq: [bug fix] won't label me with exception as writebacked
-
- 02 9月, 2021 1 次提交
-
-
由 YikeZhou 提交于
MEFreeList: remove useless code + give specified (instead of DontCare) value to phy reg allocated port
-
- 25 8月, 2021 2 次提交
-
-
由 YikeZhou 提交于
decode: slightly change def of `isMove` [TODO] handle mv inst with lsrc=0
-
由 Yinan Xu 提交于
* Refactor print control transform * Adda tilelink bus pmu * Add performance counters for dispatch, issue, execute stages * Add more counters in bus pmu * Insert BusPMU between L3 and L2 * add some TMA perfcnt Co-authored-by: NLinJiawei <linjiawei20s@ict.ac.cn> Co-authored-by: NWilliam Wang <zeweiwang@outlook.com> Co-authored-by: Nwangkaifan <wangkaifan@ict.ac.cn>
-
- 23 8月, 2021 1 次提交
-
-
由 YikeZhou 提交于
(finish refactoring) [TODO] remove useless code
-
- 22 8月, 2021 2 次提交
-
-
由 YikeZhou 提交于
"trait" was used to improve code style parameters: use EnableIntMoveElim to control code generation [WIP] EnableIntMoveElim=false hasn't been tested
-
由 YikeZhou 提交于
* Rename: add perf counter for move elimination [NOTE] There are three reasons why one ME is cancelled: 1. counter reaching max value 2. RAW dependency with former instruction 3. 2 move instruction with same psrc in 1 cycle * Rename: add debug log + fix perf bug for move elim cancelation * AlternativeFreeList: parameterize width of counter * Rename:[bug fix] RAW conflict in meEnable decision (suppose former inst=i while latter inst=j, i does not have to be move instruction)
-
- 21 8月, 2021 1 次提交
-
-
由 YikeZhou 提交于
* Bundle, Rename: Add some comments FreeList, RenameTable: Comment out unused variables * refcnt: Implement AdderTree for reference counter * build.sc: add testOne method for unit test * AdderTest: add testbench for Adder (passed) * AdderTree: Add testbench for AdderTree (passed) * ReferenceCounter: implement a 2-bit counter * Rename: remove redundant code * Rename: prepared for move elimination [WIP] * Roq: add eliminated move bit in roq entry; label elim move inst as writebacked AlternativeFreeList: new impl for int free list Rename: change io of free list Dispatch1: (todo) not send move to intDq Bundle: add eliminatedMove bit in roqCommitInfo, uop and debugio ReferenceCounter: add debug print msg * Dispatch1: [BUG FIX] not send move inst to IntDq * DecodeUnit: [BUG FIX] differentiate li from mv * Bug fix: 1. Dispatch1: should not label pdest of move as busy in busy table 2. Rename: use psrc0 to index bit vec isMax 3. AlternativeFreeList: fix maxVec calculation logic and ref counter increment logic Besides, more debug info and assertions were added. * AlternativeFreeList Bug Fix: 1. add redirect input - shouldn't allocate reg when redirect is valid 2. handle duplicate preg in roqCommits in int free list * AlternativeFreeList: Fix value assignment race condition * Rename: Fix value assignment race condition too * RenameTable: refactor spec/arch table write process * Roq: Fix debug_exuData of move(addi) instruction (it was trash data before because move needn't enter exu) * Rename: change intFreeList's redirect process (by setting headPtr back) and flush process * ME: microbench & coremark & linux-hello passed 1. DecodeUnit: treat `mv x,x` inst as non-move 2. AlternativeFreeList: handle duplicate walk req correctly 3. Roq: fix debug_exuData bug (make sure writeback that updates debug_exuData happens before ME instruction in program order) * AlternativeFreeList: License added build.sc: remove unused config Others: comments added * package rename: remove unused modules * Roq: Replace debug_prf with a cleaner fix method * Disp1/AltFL/Rename: del unnecessary white spaces * build.sc: change stack size AlternativeFreeList: turn off assertions * build.sc: change stack size for test
-
- 24 7月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
XiangShan is jointly released by ICT and PCL.
-
- 04 6月, 2021 1 次提交
-
-
由 Lemover 提交于
In this commit, we add License for XiangShan project.
-
- 01 5月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
This commit uses Vec for lsrc, psrc, srcState and srcType in MicroOp bundle. This makes uop easier to access.
-
- 19 4月, 2021 1 次提交
-
-
由 Jiawei Lin 提交于
* difftest: use DPI-C to refactor difftest In this commit, difftest is refactored with DPI-C calls. There're a few reasons: (1) From Verilator's manual, DPI-C calls should be more efficient than accessing from dut_ptr. (2) DPI-C is cross-platform (Verilator, VCS, ...) (3) difftest APIs are splited from emu.cpp to possibly support more backend platforms (NEMU, Spike, ...) The performance at this commit is quite slower than the original emu. Performance issues will be fixed later. * [WIP] SimTop: try to use 'XSTop' as soc * CircularQueuePtr: ues F-bounded polymorphis instead implict helper * Refactor parameters & Clean up code * difftest: support basic difftest * Support diffetst in new sim top * Difftest; convert recode fmt to ieee754 when comparing fp regs * Difftest: pass sign-ext pc to dpic functions && fix exception pc * Debug: add int/exc inst wb to debug queue * Difftest: pass sign-ext pc to dpic functions && fix exception pc * Difftest: fix naive commit num limit Co-authored-by: NYinan Xu <xuyinan1997@gmail.com> Co-authored-by: NWilliam Wang <zeweiwang@outlook.com>
-
- 25 3月, 2021 1 次提交
-
-
由 Allen 提交于
XSPerfAccumulate: sum up performance values. XSPerfHistogram: count the occurrence of performance values, split them into bins, so that we can estimate their distribution. XSPerfMax: get max of performance values.
-
- 11 3月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
In this commit, we add support for a simpler version of move elimination. The original instruction sequences are: move r1, r0 add r2, r1, r3 The optimized sequnces are: move pr1, pr0 add pr2, pr0, pr3 # instead of add pr2, pr1, pr3 In this way, add can be issued once r0 is ready and move seems to be eliminated.
-
- 08 3月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
-
- 23 2月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
-
- 26 1月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
-
- 25 1月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
-
- 21 1月, 2021 1 次提交
-
-
由 LinJiawei 提交于
-
- 31 12月, 2020 1 次提交
-
-
由 Yinan Xu 提交于
-
- 21 12月, 2020 1 次提交
-
-
由 Yinan Xu 提交于
-
- 14 12月, 2020 1 次提交
-
-
由 Yinan Xu 提交于
-
- 13 12月, 2020 2 次提交
- 12 12月, 2020 2 次提交
- 10 12月, 2020 1 次提交
-
-
由 Yinan Xu 提交于
-
- 09 12月, 2020 1 次提交
-
-
由 Yinan Xu 提交于
-
- 30 11月, 2020 1 次提交
-
-
由 Yinan Xu 提交于
Rename now provides vectors indicating whether there're matches between lsrc1/lsrc2/lsrc3/ldest and previous instructions' ldest. Dispatch1 updates uops' psrc1/psrc2/psrc3/old_pdest with previous instructions pdest. This method optimizes rename' timing.
-
- 27 11月, 2020 1 次提交
-
-
由 Yinan Xu 提交于
-
- 18 11月, 2020 1 次提交
-
-
由 Yinan Xu 提交于
-
- 26 10月, 2020 2 次提交
-
-
由 William Wang 提交于
-
由 William Wang 提交于
-