1. 10 11月, 2021 1 次提交
  2. 04 11月, 2021 1 次提交
    • W
      Optimize dcache timing (#1195) · 300ded30
      William Wang 提交于
      * dcache: do not check readline rmask
      
      This should opt bank_conflict check timing
      
      * dcache: block replace if store s1 valid
      
      It takes quite long to generate way_en in mainpipe s1. As a result,
      use s1 way_en to judge if replace should be blocked will cause severe
      timing problem
      
      Now we simply block replace if mainpipe.s1.valid
      
      Refill timing to be optmized later
      
      * sbuffer: delay sbuffer enqueue for 1 cycle
      
      With store queue growing larger, read data from datamodule nearly
      costs a whole cycle. Hence we delay sbuffer enqueue for 1 cycle
      for better timing.
      
      * dcache: reduce probe queue size
      
      * dcache: replace probe pipe req RRArbiter with Arbiter
      
      * dcache: reduce writeback queue size for timing opt
      
      * dcache: delay wbqueue enqueue req for 1 cycle
      
      Addr enqueue req will compare its addr with addrs in all writeback
      entries to check if it should be blocked. Delay enqueue req will
      give that process more time.
      
      * dcache: set default replacer to setplru
      
      It does not change current design
      
      * dcache: fix wbqueue req_delayed deadlock
      
      We delayed writeback queue enq for 1 cycle, missQ req does not
      depend on wbQ enqueue. As a result, missQ req may be blocked
      in req_delayed. When grant comes, that req should also be updated
      
      * dcache: remove outdated require
      
      * dcache: replace missReqArb RRArbiter with Arbiter
      
      * perf: add detailed histogram for low dcache latency
      
      * dcache: fix wbqueue entry alloc logic
      
      * dcache: opt probe req timing
      
      In current design, resv_set is maintained in dcache. All probe req
      will be blocked if that addr is in resv_set.
      
      However, checking if that addr is in resv_set costs almost half a cycle,
      which causes severe timing problem.
      
      Now when we update update_resv_set, all probe reqs will be blocked
      in the next cycle. It should give Probe reservation set addr compare an
      independent cycle, which will lead to better timing
      300ded30
  3. 01 11月, 2021 1 次提交
    • L
      tlb: timing optimizatin in hit check, fault check, atomic unit and store unit (#1189) · e9092fe2
      Lemover 提交于
      * tlb: timing optimization, fault doesn't care hit now
      
      * mem.atomic: 'paddr write to reg' dont care hit
      
      * mem.atomic: regnext exception and check them next cycle
      
      * tlb.hit: dont care set-bits when hit check
      
      * storequeue: divide tlb.miss with paddr write for opt timing
      
      * mem.atomic: fix bug that wrong usage addrAligned
      e9092fe2
  4. 30 10月, 2021 1 次提交
  5. 29 10月, 2021 1 次提交
  6. 28 10月, 2021 1 次提交
  7. 27 10月, 2021 1 次提交
  8. 25 10月, 2021 1 次提交
    • L
      pma: add pmp-like pma, software can read and write (#1169) · ca2f90a6
      Lemover 提交于
      remove the old hard-wired pma and turn to pmp-like csr registers. the pma config is writen in pma register.
      1. pma are m-priv csr, so only m-mode csrrw can change pma
      2. even in m-mode, pma should be always checked, no matter lock or not
      3. so carefully write pma, make sure not to "suicide"
      
      * pma: add pmp-like pma, just module/bundle added, not to circuit
      
      use reserved 2 bits as atomic and cached
      
      * pma: add pmp-like pma into pmp module
      
      pma have two more attribute than pmp
      1. atmoic;
      2. c/cache, if false, go to mmio.
      
      pma uses 16+4 machine-level custom ready write csr.
      pma will always be checked even in m-mode.
      
      * pma: remove the old MemMap in tlb, mmio arrives next cycle
      
      * pma: ptw raise af when mmio
      
      * pma: fix bug of match's zip with last entry
      
      * pma: fix bug of pass reset signal through method's parameter
      
      strange bug, want to reset, pass reset signal to a method, does not
      work.
      import chisel3.Module.reset, the method can access reset it's self.
      
      * pma: move some method to trait and fix bug of pma_init value
      
      * pma: fix bug of pma init value assign way
      
      * tlb: fix stupid bug that pf.ld not & fault_valid
      
      * loadunit: fix bug that uop is flushed, pmp's dcache kill failed also
      
      * ifu: mmio access needs f2_valid now
      
      * loadunit: if mmio and have sent fastUop, flush pipe when commit
      
      * storeunit: stu->lsq at stage1 and re-in lsq at stage2 to update mmio
      ca2f90a6
  9. 24 10月, 2021 1 次提交
  10. 23 10月, 2021 3 次提交
    • Y
      l2tlb: fix perf counter name (#1166) · 56be8e20
      Yinan Xu 提交于
      56be8e20
    • R
      add performance counters at core and hauncun (#1156) · cd365d4c
      rvcoresjw 提交于
      * Add perf counters
      * add reg from hpm counter source
      * add print perfcounter enable
      cd365d4c
    • L
      mmu: timing optimization (#1161) · 3889e11e
      Lemover 提交于
      * l2tlb: opt timing of req_addr_low to page cache
      
      * l2tlb: change signal name from first/secode to stage1/2
      
      * l2tlb: page cache forgot satp.changed before, add it
      
      * util: update DataHoldBypass, more general
      
      * util: update PipelineConnect, add block signal
      
      * l2tlb: page cache now need 3 cycle: in/read | read back/ecc check | out
      
      * l2tlb: set ecc block to XLEN(64)
      
      * l2tlb: when ecc error, dont hit. do it same cycle
      
      * tlb: optimize repalce io, for covering refill and better timing
      3889e11e
  11. 22 10月, 2021 4 次提交
    • J
      Instr uncache: support instruction fecth from MMIO device ( flash ) (#1151) · 0be662e4
      Jay 提交于
      * InstrUncache: change into 1 instruciton logic
      
      * Frontend: add MMIO fetch port
      
      * IFU: flush pipeline and only pass 1 instruction to backend when
      finding the address is mmio
      
      * BPU: set the resetVector to 10000000
      
      * Frontend: connect ifu.uncache to instrUncache
      
      * IFU: Fix conflict with master
      
      * IFU: fix mmio instruction prediction problem
      
      * IFU: fix tlb af only hold 1 cycle
      0be662e4
    • W
      misc: do bug fix (#1157) · a79fef67
      wakafa 提交于
      * bump difftest & huancun
      a79fef67
    • W
      Add ld-ld violation check (#1140) · 67682d05
      William Wang 提交于
      * mem: support ld-ld violation check
      * mem: do not fast wakeup if ld vio check failed
      * mem: disable ld-ld vio check after core reset
      67682d05
    • Z
      DCacheWrapper: set replace pipe higher priority than main pipe (#1152) · fa2b8fdd
      zhanglinjuan 提交于
      In the latest version of dcache, replace pipe is blocked by main pipe according to set, because replace and store/probe should not try to modify data or meta at the same time, which might result in inconsistency between data and meta. For performance reasons, replace is blocked by store, not the other way around, because replace can be delayed so it can bring dirty data written by store down to L2.
      
      Now this consideration brings another dead-lock. Store buffer keeps sending store request without a break, so main pipe stays occupied handling store. In the meantime, miss queue rejects these store request so store buffer keeps replaying all the time. Replace pipe cannot advance because of set conflict with main pipe, so the corresponding miss entry cannot be released and keeps rejecting new store request.
      
      To break this dead-lock, this pull request tries to set replace pipe higher priority than main pipe, and let write-back queue handle consistency between data and meta if a store interrupts.
      fa2b8fdd
  12. 21 10月, 2021 2 次提交
    • W
      mem: add CSR based l1 cache instructions (#1116) · e19f7967
      William Wang 提交于
      e19f7967
    • H
      asid: add asid, mainly work when hit check, not in sfence.vma (#1090) · 45f497a4
      happy-lx 提交于
      add mmu's asid support.
      1. put asid inside sram (if the entry is sram), or it will take too many sources.
      2. when sfence, just flush it all, don't care asid.
      3. when hit check, check asid.
      4. when asid changed, flush all the inflight ptw req for safety
      5. simple asid unit test:
      asid 1 write, asid 2 read and check, asid 2 write, asid 1 read and check. same va, different pa
      
      * ASID: make satp's asid bits configurable to RW
      * use AsidLength to control it
      
      * ASID: implement asid refilling and hit checking
      * TODO: sfence flush with asid
      
      * ASID: implement sfence with asid
      * TODO: extract asid from SRAMTemplate
      
      * ASID: extract asid from SRAMTemplate
      * all is down
      * TODO: test
      
      * fix write to asid
      
      * Sfence: support rs2 of sfence and fix Fence Unit
      * rs2 of Sfence should be Reg and pass it to Fence Unit
      * judge the value of reg instead of the index in Fence Unit
      
      * mmu: re-write asid
      
      now, asid is stored inside sram, so sfence just flush it
      it's a complex job to handle the problem that asid is changed but
      no sfence.vma is executed. when asid is changed, all the inflight
      mmu reqs are flushed but entries in storage is not influenced.
      so the inflight reqs do not need to record asid, just use satp.asid
      
      * tlb: fix bug of refill mask
      
      * ci: add asid unit test
      Co-authored-by: NZhangZifei <zhangzifei20z@ict.ac.cn>
      45f497a4
  13. 20 10月, 2021 3 次提交
    • 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
  14. 19 10月, 2021 1 次提交
  15. 18 10月, 2021 1 次提交
  16. 17 10月, 2021 1 次提交
  17. 14 10月, 2021 1 次提交
    • 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
  18. 13 10月, 2021 1 次提交
  19. 11 10月, 2021 3 次提交
    • 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
    • W
      Speed up dcache bank conflict feedback (#1081) · d87b76aa
      William Wang 提交于
      Make bank conflict feedback 1 cycle earlier
      d87b76aa
    • 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
  20. 10 10月, 2021 2 次提交
  21. 04 10月, 2021 1 次提交
  22. 30 9月, 2021 1 次提交
  23. 28 9月, 2021 1 次提交
  24. 27 9月, 2021 2 次提交
    • W
      dcache: support alwaysReleaseData parameter (#1070) · fddcfe1f
      wakafa 提交于
      fddcfe1f
    • J
      128KB L1D + non-inclusive L2/L3 (#1051) · 1f0e2dc7
      Jiawei Lin 提交于
      * 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
      
      * dcache: fix l1 probe index generate logic
      
      * Now right probe index will be used according to the len of alias bits
      
      * dcache: clean up amo pipeline
      
      * DCacheParameter rowBits will be removed in the future, now we set it to 128
      to make dcache work
      
      * dcache: fix amo word index
      
      * bump huancun
      Co-authored-by: NWilliam Wang <zeweiwang@outlook.com>
      Co-authored-by: Nzhanglinjuan <zhanglinjuan20s@ict.ac.cn>
      Co-authored-by: NTangDan <tangdan@ict.ac.cn>
      Co-authored-by: NZhangZifei <zhangzifei20z@ict.ac.cn>
      Co-authored-by: Nwangkaifan <wangkaifan@ict.ac.cn>
      1f0e2dc7
  25. 17 9月, 2021 1 次提交
    • J
      ICache: fix physical tag bug · 03c39bde
      JinYue 提交于
      * Using get_phy_tag function instead of get_tag
      * This bug happens when using VIPT ICache and setting lage set number
      03c39bde
  26. 16 9月, 2021 2 次提交
  27. 15 9月, 2021 1 次提交