1. 21 10月, 2021 1 次提交
    • Y
      refCounter: delay de-allocation for one more cycle (#1144) · 103fe42b
      Yinan Xu 提交于
      This commit changes how de-allocation is done in RefCounter. One cycle
      after we update the reference counters, the free registers are released
      to the freelist.
      
      Previous version creates a critical path, starting from deallocate ports
      and ending at freelist registers. This commit adds one more cycle in the
      allocation --> updating reference counters --> freeing physical
      registers --> allocation loop.
      103fe42b
  2. 20 10月, 2021 4 次提交
    • Y
      bump difftest (#1146) · b8085d7c
      Yinan Xu 提交于
      b8085d7c
    • W
      mem: add Zicbom and Zicboz support (#1145) · ca18a0b4
      William Wang 提交于
      Now we merge them for timing opt, unit test to be added later
      ca18a0b4
    • L
      l2tlb: fix bug of cache read valid check (#1139) · 1af89150
      Lemover 提交于
      1af89150
    • Z
      New DCache (#1111) · ad3ba452
      zhanglinjuan 提交于
      * L1D: provide independent meta array for load pipe
      
      * misc: reorg files in cache dir
      
      * chore: reorg l1d related files
      
      * bump difftest: use clang to compile verialted files
      
      * dcache: add BankedDataArray
      
      * dcache: fix data read way_en
      
      * dcache: fix banked data wmask
      
      * dcache: replay conflict correctly
      
       When conflict is detected:
      * Report replay
      * Disable fast wakeup
      
      * dcache: fix bank addr match logic
      
      * dcache: add bank conflict perf counter
      
      * dcache: fix miss perf counters
      
      * chore: make lsq data print perttier
      
      * dcache: enable banked ecc array
      
      * dcache: set dcache size to 128KB
      
      * dcache: read mainpipe data from banked data array
      
      * dcache: add independent mainpipe data read port
      
      * dcache: revert size change
      
      * Size will be changed after main pipe refactor
      
      * Merge remote-tracking branch 'origin/master' into l1-size
      
      * dcache: reduce banked data load conflict
      
      * MainPipe: ReleaseData for all replacement even if it's clean
      
      * dcache: set dcache size to 128KB
      
      BREAKING CHANGE: l2 needed to provide right vaddr index to probe l1,
      and it has to help l1 to avoid addr alias problem
      
      * chore: fix merge conflict
      
      * Change L2 to non-inclusive / Add alias bits in L1D
      
      * debug: hard coded dup data array for debuging
      
      * dcache: fix ptag width
      
      * dcache: fix amo main pipe req
      
      * dcache: when probe, use vaddr for main pipe req
      
      * dcache: include vaddr in atomic unit req
      
      * dcache: fix get_tag() function
      
      * dcache: fix writeback paddr
      
      * huancun: bump version
      
      * dcache: erase block offset bits in release addr
      
      * dcache: do not require probe vaddr != 0
      
      * dcache: opt banked data read timing
      
      * bump huancun
      
      * dcache: fix atom unit pipe req vaddr
      
      * dcache: simplify main pipe writeback_vaddr
      
      * bump huancun
      
      * dcache: remove debug data array
      
      * Turn on all usr bits in L1
      
      * Bump huancun
      
      * Bump huancun
      
      * enable L2 prefetcher
      
      * bump huancun
      
      * set non-inclusive L2/L3 + 128KB L1 as default config
      
      * Use data in TLBundleB to hint ProbeAck beeds data
      
      * mmu.l2tlb: mem_resp now fills multi mq pte buffer
      
      mq entries can just deq without accessing l2tlb cache
      
      * dcache: handle dirty userbit
      
      * bump huancun
      
      * chore: l1 cache code clean up
      
      * Remove l1plus cache
      * Remove HasBankedDataArrayParameters
      
      * Add bus pmu between L3 and Mem
      
      * bump huncun
      
      * IFU: add performance counters and mmio af
      
      * icache replacement policy moniter
      
      * ifu miss situation moniter
      
      * icache miss rate
      
      * raise access fault when found mmio req
      
      * Add framework for seperated main pipe and reg meta array
      
      * Rewrite miss queue for seperated pipes
      
      * Add RefillPipe
      
      * chore: rename NewSbuffer.scala
      
      * cache: add CacheInstruction opcode and reg list
      
      * CSR: add cache control registers
      
      * Add Replace Pipe
      
      * CacheInstruction: add CSRs for cache instruction
      
      * mem: remove store replay unit
      
      * Perf counter to be added
      * Timing opt to be done
      
      * mem: update sbuffer to support new dcache
      
      * sbuffer: fix missqueue time out logic
      
      * Merge remote-tracking branch 'origin/master' into dcache-rm-sru
      
      * chore: fix merge conflict, remove nStoreReplayEntries
      
      * Temporarily disable TLMonitor
      
      * Bump huancun (L2/L3 MSHR bug fix)
      
      * Rewrite main pipe
      
      * ReplacePipe: read meta to decide whether data should be read
      
      * RefillPipe: add a store resp port
      
      * MissQueue: new req should be rejected according to set+way
      
      * Add replacement policy interface
      
      * sbuffer: give missq replay the highest priority
      
      Now we give missqReplayHasTimeOut the highest priority, as eviction
      has already happened
      Besides, it will fix the problem that fix dcache eviction generate logic
      gives the wrong sbuffer id
      
      * Finish DCache framework
      
      * Split meta & tag and use regs to build meta array
      
      * sbuffer: use new dcache io
      
      * dcache: update dcache resp in memblock and fake d$
      
      * Add atomics processing flow
      
      * Refactor Top
      
      * Bump huancun
      
      * DCacheWrapper: disable ld fast wakeup only when bank conflict
      
      * sbuffer: update dcache_resp difftest io
      
      * MainPipe: fix combinational loop
      
      * Sbuffer: fix bug in assert
      
      * RefillPipe: fix bug of getting tag from addr
      
      * dcache: ~0.U should restrict bit-width
      
      * LoadPipe: fix bug in assert
      
      * ReplacePipe: addr to be replaced should be block-aligned
      
      * MainPipe: fix bug in required coh sending to miss queue
      
      * DCacheWrapper: tag write in refill pipe should always be ready
      
      * MainPipe: use replacement way_en when the req is from miss queue
      
      * MissQueue: refill data should be passed on to main pipe
      
      * MainPipe: do not use replacement way when tag match
      
      * CSR: clean up cache op regs
      
      * chore: remove outdated comments
      
      * ReplacePipe: fix stupid bug
      
      * dcache: replace checkOneHot with assert
      
      * alu: fix bug of rev8 & orc.b instruction
      
      * MissQueue: fix bug in the condition of mshr accepting a req
      
      * MissQueue: add perf counters
      
      * chore: delete out-dated code
      
      * chore: add license
      
      * WritebackQueue: distinguish id from miss queue
      
      * AsynchronousMetaArray: fix bug
      
      * Sbuffer: fix difftest io
      
      * DCacheWrapper: duplicate one more tag copy for main pipe
      
      * Add perf cnt to verify whether replacing is too early
      
      * dcache: Release needs to wait for refill pipe
      
      * WritebackQueue: fix accept condition
      
      * MissQueue: remove unnecessary assert
      
      * difftest: let refill check ingore illegal mem access
      
      * Parameters: enlarge WritebackQueue to break dead-lock
      
      * DCacheWrapper: store hit wirte should not be interrupted by refill
      
      * Config: set nReleaseEntries to twice of nMissEntries
      
      * DCacheWrapper: main pipe read should block refill pipe by set
      Co-authored-by: NWilliam Wang <zeweiwang@outlook.com>
      Co-authored-by: NLinJiawei <linjiav@outlook.com>
      Co-authored-by: NTangDan <tangdan@ict.ac.cn>
      Co-authored-by: NLinJiawei <linjiawei20s@ict.ac.cn>
      Co-authored-by: NZhangZifei <zhangzifei20z@ict.ac.cn>
      Co-authored-by: Nwangkaifan <wangkaifan@ict.ac.cn>
      Co-authored-by: NJinYue <jinyue20s@ict.ac.cn>
      Co-authored-by: Fa_wang's avatarZhangfw <471348957@qq.com>
      ad3ba452
  3. 19 10月, 2021 2 次提交
  4. 18 10月, 2021 3 次提交
  5. 17 10月, 2021 6 次提交
    • S
      Merge pull request #1128 from OpenXiangShan/tage-bt-pipeline-sync · eae21bbb
      Steve Gou 提交于
      tage: synchronize base table update valid and data signals
      eae21bbb
    • L
      l2tlb: fix bug of sfence_latch reset signal (#1127) · 7862ef9b
      Lemover 提交于
      sfence_latch will only be reset by mem_resp_done, which has higher priority than set by sfence
      7862ef9b
    • L
      tage: synchronize base table update valid and data signals · 02672c91
      Lingrui98 提交于
      previously we may use random data from ftq meta sram, and now we fixed this issue
      02672c91
    • Y
      rename: don't update refCounter 0 (#1126) · ca1763c2
      Yinan Xu 提交于
      This commit removes the update logic for ref counter 0.
      
      For simplicity, we don't count the number of references for physical
      register 0. It should never be released to freelist.
      
      Previously we track register 0's references. It works fine but it makes
      the performance counters confusing because it may increase to a large
      number. It never causes real issues.
      ca1763c2
    • Y
      backend: remove lsrc usages after rename (#1124) · a020ce37
      Yinan Xu 提交于
      This commit removes lsrc usages in the fence unit and lsrc is no longer
      needed after an instruction is renamed. It helps timing and area.
      
      lsrc is placed in imm at rename stage (the last stage we need lsrc).
      They are extracted in the fence unit. Imm needs to go through the
      pipelines because Jump needs it (and we re-use it for lsrc).
      a020ce37
    • Y
      rob: fix walkCounter when all entries are flushed (#1125) · a83ae250
      Yinan Xu 提交于
      This commit fixes the walkCounter value in Rob when every instruction is
      flushed.
      
      For example, when rob is full and the head instruction causes an
      exception, the redirect robIdx is the deqPtr. In this case,
      currentWalkPtr is enqPtr - 1.U and redirectWalkDistance is RobSize - 1.
      Since exceptions flush the instruction itself, flushItSelf is true.B.
      Previously we use `+` to count the walk distance and it causes overflows
      when RobSize is power of 2. We change it to `+&` to allow walkCounter to
      be RobSize. The width of walkCounter also needs to be changed.
      a83ae250
  6. 16 10月, 2021 4 次提交
    • Y
      rename: support full-featured move elimination (#1123) · 70224bf6
      Yinan Xu 提交于
      This commit optimizes the move elimination implementation.
      
      Reference counting for every physical register is recorded. Originally
      0-31 registers have counters of ones. Every time the physical register
      is allocated or deallocated, the counter is increased or decreased by
      one. When the counter becomes zero from a non-zero value, the register
      is freed and released to freelist.
      70224bf6
    • J
      Update PrintCtrl transform (#1122) · f79ff60a
      Jiawei Lin 提交于
      * Update PrintControl transform
      
      * CI: add fatal/fwrite check
      f79ff60a
    • Y
      core: use redirect ports for flush (#1121) · f4b2089a
      Yinan Xu 提交于
      This commit removes flush IO for every module. Flush now re-uses
      redirect ports to flush the instructions.
      f4b2089a
    • W
      Add strict mode to reduce mdp mispredict (#1113) · d1fe0262
      William Wang 提交于
      * storeset: fix waitForSqIdx generate logic
      
      Now right waitForSqIdx will be generated for earlier store in the same
      dispatch bundle.
      
      * mdp: add strict wait mode
      
      When loadWaitStrict && loadWaitBit, load will wait in rs until all
      older store addr calculation are finished.
      
      * chore: add storeset_load_strict_wait counter
      d1fe0262
  7. 15 10月, 2021 1 次提交
  8. 14 10月, 2021 2 次提交
    • L
      ci: when error, copy emu and SimTop.v to WAVE_HOME (#1115) · 7e006581
      Lemover 提交于
      * ci: when error, copy emu and SimTop.v to WAVE_HOME
      
      * ci: basic.misc uses numa
      7e006581
    • L
      l2tlb: add next-line prefetcher (#1108) · bc063562
      Lemover 提交于
      预取时机:
      
          或者 发生miss时
          或者 发生hit,但是hit的entry是预取上来的
          当 页表2MB的level命中
          当 预取项不跨2MB项对应的4KB page frame
      
      前面两个限制是为了限制预取的数量
      
      后面两个限制是限制预取请求只会访问最后一级页表 -› 不占用FSM & (几乎)不会重新访问cache,造成卡死。
      
      =============
      some workloads: gcc(5.4%), wrf(13.6%),milc(9.2%)'s ipc increase.
      some workloads decrease: namd(-2.5%).
      but l2tlb's perf counters are better.
      So I think it is worthy to adding the simple next-line prefetch.
      
      The workloads are of ci and in cold-start state, so prefetch may seems to be much better than it should be.
      But l2tlb's memory access ability is much better than what it needs, so the prefetch can be added.
      =============
      
      * mmu.l2tlb: add params filterSize
      
      * mmu.l2tlb: add prefetch,dont work well
      
      * mmu.l2tlb: add prefetch relative perf counter
      
      * l2tlb: prefetch recv miss req and 'hit but pre-fetched' req
      
      * l2tlb: fix some perf counter about prefetch
      
      * l2tlb: prefetch not cross 2MB && not recv when 2MB level miss
      
      * ci: when error, copy emu and SimTop.v to WAVE_HOME
      bc063562
  9. 13 10月, 2021 2 次提交
  10. 12 10月, 2021 6 次提交
    • Y
      rs: add IOs for performance counters (#1109) · 485648fa
      Yinan Xu 提交于
      This commit adds IOs for performance counters in reservation stations.
      Only `full` is included for now.
      485648fa
    • W
      mem: update block load logic (#1035) · c7160cd3
      William Wang 提交于
      * mem: update block load logic
      
      Now load will be selected as soon as the store it depends on is ready,
      which is predicted by Store Sets
      
      * mem: opt block load logic
      
      Load blocked by std invalid will wait for that std to issue
      Load blocked by load violation wait for that sta to issue
      
      * csr: add 2 extra storeset config bits
      
      Following bits were added to slvpredctl:
      - storeset_wait_store
      - storeset_no_fast_wakeup
      
      * storeset: fix waitForSqIdx generate logic
      
      Now right waitForSqIdx will be generated for earlier store in the same
      dispatch bundle
      c7160cd3
    • J
      Merge pull request #1106 from OpenXiangShan/fix-lightSSS · a8a94ddc
      Jay 提交于
      bump difftest and add lightSSS wave dump for CI
      a8a94ddc
    • Y
      core: update dispatch port parameters (#1103) · 33177a7c
      Yinan Xu 提交于
      This commit changes how dispatch ports (regfile ports) are connected to
      reservation station ports:
      
      INT regfile:
      * INT(0-1) --> ALU0, MUL0, JUMP
      * INT(2-3) --> ALU1, MUL0
      * INT(4-5) --> ALU2, MUL1
      * INT(6-7) --> ALU3, MUL1
      * INT(8)   --> LOAD0
      * INT(9)   --> LOAD1
      * INT(10)  --> STA0
      * INT(11)  --> STA1
      * INT(12)  --> STD0
      * INT(13)  --> STD1
      
      FP regfile:
      * FP(0-2)  --> FMA0, FMISC0
      * FP(3-5)  --> FMA1, FMISC0
      * FP(6-8)  --> FMA2, FMISC1
      * FP(9-11) --> FMA3, FMISC1
      * FP(12)   --> STD0
      * FP(13)   --> STD1
      33177a7c
    • W
      Merge branch 'master' into fix-lightSSS · a118996c
      wangkaifan 提交于
      a118996c
    • W
      bump huancun (#1105) · 0b737e67
      wakafa 提交于
      0b737e67
  11. 11 10月, 2021 7 次提交
    • L
      pmp: add pmp support (#1092) · b6982e83
      Lemover 提交于
      * [WIP] PMP: add pmp to tlb & csr(ptw part is not added)
      
      * pmp: add pmp, unified
      
      * pmp: add pmp, distributed but same cycle
      
      * pmp: pmp resp next cycle
      
      * [WIP] PMP: add l2tlb missqueue pmp support
      
      * pmp: add pmp to ptw and regnext pmp for frontend
      
      * pmp: fix bug of napot-match
      
      * pmp: fix bug of method aligned
      
      * pmp: when write cfg, update mask
      
      * pmp: fix bug of store af getting in store unit
      
      * tlb: fix bug, add af check(access fault from ptw)
      
      * tlb: af may have higher priority than pf when ptw has af
      
      * ptw: fix bug of sending paddr to pmp and recv af
      
      * ci: add pmp unit test
      
      * pmp: change PMPPlatformGrain to 6 (512bits)
      
      * pmp: fix bug of read_addr
      
      * ci: re-add pmp unit test
      
      * l2tlb: lazymodule couldn't use @chiselName
      
      * l2tlb: fix bug of l2tlb missqueue duplicate req's logic
      
      filt the duplicate req:
      old: when enq, change enq state to different state
      new: enq + mem.req.fire, more robust
      
      * pmp: pmp checker now supports samecycle & regenable
      b6982e83
    • J
      bump difftest: exit not oldest checkpoints · 02445207
      JinYue 提交于
      02445207
    • W
      Speed up dcache bank conflict feedback (#1081) · d87b76aa
      William Wang 提交于
      Make bank conflict feedback 1 cycle earlier
      d87b76aa
    • J
      Merge branch 'master' into fix-lightSSS · fdb6fc63
      JinYue 提交于
      fdb6fc63
    • J
      script: add wave dump path · 24e2eab6
      JinYue 提交于
      24e2eab6
    • J
      CI: update environment settings for script wave dumping · d4068f8e
      JinYue 提交于
      d4068f8e
    • Y
      bump chisel and code clean up (#1104) · aef67050
      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
      aef67050
  12. 10 10月, 2021 2 次提交