1. 27 6月, 2022 3 次提交
    • Y
      dp2: add a pipeline for load/store (#1597) · fa9d712c
      Yinan Xu 提交于
      * dp2: add a pipeline for load/store
      
      Load/store Dispatch2 has a bad timing because it requires the fuType
      to disguish the out ports. This brings timing issues because the
      instruction has to read busyTable after the port arbitration.
      
      This commit adds a pipeline in dp2Ls, which may cause performance
      degradation. Instructions are dispatched according to out, and at
      the next cycle it will leave dp2.
      
      * bump difftest trying to fix vcs
      fa9d712c
    • W
      dcache: do not access plru when refill (#1591) · 92816bbc
      William Wang 提交于
      * dcache: do not access plru when refill
      
      Now we have accessed plru when load miss, we should not access plru
      when refill
      
      * dcache: not not access plru when miss queue full
      
      It will help avoid invalid plru access when miss queue full
      92816bbc
    • Z
  2. 26 6月, 2022 1 次提交
    • L
      l2tlb: add counter to ptw-filter to avoid l2tlb deadlock & sync sfence to mmu (#1599) · fa9f9690
      Lemover 提交于
      fix some bugs.
      
      1. fix l2tlb dead-lock bug
      l2tlb won't merge requests at same addr. It will be blocked when having too many requests.
      PtwFilter has a bug that will send too many requests. Add a counter to avoid that.
      
      2. fix sfence sync at mmu
      different modules in mmu may get sfence at different latency, which will lost requests or some requests have no receiver.
      Sync the sfence latency manually to avoid the bug.
      
      * mmu.filter: add counter not to send to many req to l2tlb
      
      * mmu.filter: fix bug that forget counter signal when block issue and deq
      
      * mmu: set sfence/csr delay to 2 cycle, must sync in mmu
      fa9f9690
  3. 25 6月, 2022 3 次提交
    • L
      l2tlb: delay one cycle when read from sram (#1596) · 6c4dcc2d
      Lemover 提交于
      now the l2tlb page cache are divided into:
      1. stageReq: input && read sram valid && will block when sram write
      2. stageDelay: get sram data and delay one cycle
      3. stageCheck: check hit and ecc result
      4. stageResp: output
      6c4dcc2d
    • L
      tlb: divide v-select into two cycle for timing optimization (#1598) · 445d5c05
      Lemover 提交于
      Background:
      dtlb has 128 entries stored in sram. 128 sets, 1 ways.
      advantage: large volume & 1 ways means no tag match logic at data select path
      disadvantage: 128 sets means long latency at valid select, which is a Vec-Register.
      
      Optimization: divide valid select into two-cycles
      445d5c05
    • Y
      freelist: optimize timing of read and writing (#1593) · 5ef86c38
      Yinan Xu 提交于
      This commit optimizes the timing of freelist by changing the updating
      function of headPtr and tailPtr.
      
      We maintains an one-hot representation of headPtr and further uses it to
      read the free registers from the list, which should be better than the
      previous implementation where headPtr is used to indexed into the queue.
      
      The update of tailPtr and the freelist is delayed by one cycle to
      optimize the timing. Because freelist allocates new registers in the
      next cycle iff there are more than RenameWidth free registers in this
      cycle. The freed registers in this cycle will never be used in the next
      cycle. Thus, we can delay the updating of queue data to the next cycle.
      We also move the update of tailPtr to the next cycle, since PopCount
      takes a long timing and we move the last adder to the next cycle. Now
      the adder works parallely with PopCount. That is, the updating of
      tailPtr is pipelined.
      5ef86c38
  4. 22 6月, 2022 1 次提交
    • Y
      core: add buffers for function units across int/fp (#1590) · 5010f3fb
      Yinan Xu 提交于
      This commit adds a buffer after the function unit that operate across
      the integer block and the floating-point block, such as f2i and i2f.
      
      For example, previously the out.ready of f2i depends on whether
      mul/div/csr/jump has a valid instruction out, since f2i has lower
      priority than them. This ready back-propagates from the integer function
      units to the floating-point function units, and finally to the
      floating-point reservation stations (since f2i is fully pipelined).
      
      We add a buffer after the function unit to break this ready
      back-propagation. It incurs one more cycle of execution latency, but we
      leave it not-fully-optimized for now.
      
      Timing can be further optimized if we separates the int writeback and fp
      writeback in function units. In the current version, the ready of f2i
      affects the ready of f2f pipelines, which is unnecessary. This is the
      future work.
      5010f3fb
  5. 21 6月, 2022 1 次提交
  6. 20 6月, 2022 2 次提交
  7. 18 6月, 2022 2 次提交
    • Y
      decode: do not set lsrc of LUI for better timing (#1586) · a19215dd
      Yinan Xu 提交于
      This commit changes the lsrc/psrc of LUI in dispatch instead of
      decode to optimize the timing of lsrc in DecodeStage, which is
      critical for rename table.
      
      lsrc/ldest should be directly get from instr for the timing. Fused
      instructions change lsrc/ldest now, which will be optimized later.
      a19215dd
    • W
      perfcnt: keep strict regularity of perf counter name (#1585) · d18dc7e6
      wakafa 提交于
      * buspmu: avoid inner space in perf-cnt name
      
      * perfcnt: judge regularity of perfname
      
      * perfcnt: fix some irregular perfname
      
      * bump huancun
      d18dc7e6
  8. 17 6月, 2022 1 次提交
  9. 11 6月, 2022 1 次提交
  10. 09 6月, 2022 1 次提交
  11. 06 6月, 2022 3 次提交
    • J
      discard iprefetch req when resource busy · e8747464
      Jenius 提交于
      e8747464
    • J
      delete 500 cycle wait · 19d62fa1
      Jenius 提交于
      * add SRAM ready (resetfinish) condition for *Array (metaArray/dataArray)
      req.ready
      19d62fa1
    • J
      fix bugs in IFU and delete 500-cycle ready · 625ecd17
      Jenius 提交于
      * fix mmio_resend_af wrong assignment
      * fix wb_half_flush missOffset(using wb_lastIdx instead of PredictWidth
      -1)
      * change pipeline ready condition (this_ready =  this_stage_fire || this_stage_empty)
      * delete 500-cycle ready condition (toICache(*).ready means the SRAM has
      been reset and ready for read)
      625ecd17
  12. 02 6月, 2022 1 次提交
    • L
      ittage: we should write new target when alloc · 3b7c55f8
      Lingrui98 提交于
      Previous logic checked the value of old_ctr to select between old target and
      new target when updating ittage table. However, when we need to alloc a new
      entry, the value of old_ctr is X because we do not reset ittage table. So we
      would definitely write an X to the target field, which is the output of the
      mux, as the selector is X.
      3b7c55f8
  13. 31 5月, 2022 1 次提交
  14. 29 5月, 2022 1 次提交
  15. 26 5月, 2022 1 次提交
  16. 25 5月, 2022 1 次提交
  17. 11 5月, 2022 2 次提交
    • W
      Fix vcs simulation support, support manually set ram_size (#1551) · 25ac26c6
      William Wang 提交于
      * difftest: disable runahead to make vcs happy
      
      * difftest: bump huancun to make vcs happy
      
      * difftest: bump difftest and ready-to-run
      
      * difftest support ramsize and paddr base config
      * 8GB/16GB nemu so are provided by ready-to-run
      
      * ci: update nightly ci, manually set ram_size
      
      * difftest: bump huancun to make vcs happy
      
      * difftest,nemu: support run-time assign mem size
      
      * ci: polish nightly ci script
      25ac26c6
    • Y
      rob: don't set hasWFI if there're exceptions (#1550) · d2df63c3
      Yinan Xu 提交于
      An instruction with exceptions may have arbitrary instr values and
      may be decoded into WFI instructions, which cause errors.
      d2df63c3
  18. 09 5月, 2022 3 次提交
  19. 07 5月, 2022 1 次提交
  20. 06 5月, 2022 2 次提交
    • H
      feat: parameterize load store (#1527) · 46f74b57
      Haojin Tang 提交于
      * feat: parameterize load/store pipeline, etc.
      
      * fix: use LoadPipelineWidth rather than LoadQueueSize
      
      * fix: parameterize `rdataPtrExtNext`
      
      * SBuffer: fix idx update logic
      
      * atomic: parameterize atomic logic in `MemBlock`
      
      * StoreQueue: update allow enque requirement
      
      * feat: support one load/store pipeline
      
      * feat: parameterize `EnsbufferWidth`
      
      * chore: resharp codes for better generated name
      46f74b57
    • W
      chore: remove sc too many fail assertion (#1514) · 5d6ad649
      William Wang 提交于
      * chore: remove sc too many fail assertion
      
      * chore: use XSWarn()
      5d6ad649
  21. 05 5月, 2022 2 次提交
  22. 04 5月, 2022 2 次提交
  23. 29 4月, 2022 1 次提交
  24. 28 4月, 2022 1 次提交
    • Y
      core,rob: support the WFI instruction · b6900d94
      Yinan Xu 提交于
      The RISC-V WFI instruction is previously decoded as NOP. This commit
      adds support for the real wait-for-interrupt (WFI).
      
      We add a state_wfi FSM in the ROB. After WFI leaves the ROB, the next
      instruction will wait in the ROB until an interrupt.
      b6900d94
  25. 25 4月, 2022 2 次提交