- 25 10月, 2021 1 次提交
-
-
由 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
-
- 23 10月, 2021 2 次提交
-
-
由 rvcoresjw 提交于
* Add perf counters * add reg from hpm counter source * add print perfcounter enable
-
由 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
-
- 22 10月, 2021 1 次提交
-
-
由 wakafa 提交于
* bump difftest & huancun
-
- 21 10月, 2021 1 次提交
-
-
由 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>
-
- 14 10月, 2021 1 次提交
-
-
由 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
-
- 11 10月, 2021 1 次提交
-
-
由 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
-
- 10 10月, 2021 1 次提交
-
-
由 Lemover 提交于
get ecc result at the same cycle, may have timing problem, deal with it later... when ecc error happens, 'miss' the req and flush the entry next cycle
-
- 28 9月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
* rename Roq to Rob * remove trailing whitespaces * remove unused parameters
-
- 27 9月, 2021 1 次提交
-
-
由 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>
-
- 11 9月, 2021 1 次提交
-
-
由 Lemover 提交于
* mmu.l2tlb: add object TimeOutAssert * mmu.l2tlb: add TimeOutAssert to Repeater * mmu.l2tlb: cut down mem req buffer from 8 ptes to 1 pte each * util: move some utils from MMUBundle to utils
-
- 05 9月, 2021 1 次提交
-
-
由 Lemover 提交于
* mmu.l2tlb: l2tlb now support multiple parallel mem accesses 8 missqueue entry and 1 page table worker mq entry only supports page leaf entry ptw supports all the three level entries * mmu.tlb: fix bug of mq.refill_vpn and out.ready
-
- 02 9月, 2021 1 次提交
-
-
由 Lemover 提交于
* Revert "Revert "l0tlb: add a new level tlb to each mem pipeline (#936)" (#945)" This reverts commit b052b972. * fu: remove unused import * mmu.tlb: 2 load/store pipeline has 1 dtlb * mmu: remove btlb, the l1-tlb * mmu: set split-tlb to 32 to check perf effect * mmu: wrap tlb's param with TLBParameters * mmu: add params 'useBTlb' dtlb size is small: normal 8, super 2 * mmu.tlb: add Bundle TlbEntry, simplify tlb hit logic(coding) * mmu.tlb: seperate tlb's storage, relative hit/sfence logic tlb now supports full-associate, set-associate, directive-associate. more: change tlb's parameter usage, change util.Random to support case that mod is 1. * mmu.tlb: support normalAsVictim, super(fa) -> normal(sa/da) be carefull to use tlb's parameter, only a part of param combination is supported * mmu.tlb: fix bug of hit method and victim write * mmu.tlb: add tlb storage's perf counter * mmu.tlb: rewrite replace part, support set or non-set * mmu.tlb: add param outReplace to receive out replace index * mmu.tlb: change param superSize to superNWays add param superNSets, which should always be 1 * mmu.tlb: change some perf counter's name and change some params * mmu.tlb: fix bug of replace io bundle * mmu.tlb: remove unused signal wayIdx in tlbstorageio * mmu.tlb: separate tlb_ld/st into two 'same' tlb * mmu.tlb: when nWays is 1, replace returns 0.U before, replace will return 1.U, no influence for refill but bad for perf counter * mmu.tlb: give tlb_ld and tlb_st a name (in waveform)
-
- 29 8月, 2021 1 次提交
-
-
由 Lemover 提交于
* mmu: wrap l2tlb's param withL2TLBParameters * mmu.l2tlb: add param blockBytes: 64, 8 ptes * mmu.l2tlb: set l2tlb cache size to l2:256, l3:4096 * mmu.l2tlb: add config print * mmu.l2tlb: fix bug of resp data indices choosen and opt coding style
-
- 23 8月, 2021 1 次提交
-
- 22 8月, 2021 1 次提交
-
-
由 Lemover 提交于
* Miniconfig: change dtlb size to 32 at minimal config * mmu.dtlb: change tlb's replacement access code style dtlb now can support plru (functionaly). plru with multi-access is chained, so there will be long latency for dtlb to use plru. * mmu.tlb: add tlb at new level named btlb bridge tlb: one l0-tlb in each mem pipeline all the l0-tlb connect to bridge tlb btlb connects to l2tlb, so btlb is also l1-tlb itlb remains the same * mmu.tlb: set tlb size: l0-8, l1-64 * mmu.btlb: add sfence logic * mmu.tlb: fix bug of sfence logic of g bit * mmu.btlb: add some perf counter * mmu.btlb: fix bug of random replace * mmu.filter: add port vector to record which ports the reqs come from * mmu.btlb: add some perf counter && add refill mask * mmu.filter: add check for flushed req
-
- 24 7月, 2021 1 次提交
-
-
由 Yinan Xu 提交于
XiangShan is jointly released by ICT and PCL.
-
- 19 7月, 2021 1 次提交
-
-
由 Lemover 提交于
-