#
0a7d1d5c |
| 22-Nov-2024 |
xiaofeibao <[email protected]> |
feat(backend): NewDispatch
|
#
c092d579 |
| 18-Dec-2024 |
Yanqin Li <[email protected]> |
style(prefetch): remove useless prefetch code (#4051)
The L1 prefetch code has been migrated from the old version `cache/prefetch` to the new version `mem/prefetch`.
|
#
72dab974 |
| 16-Dec-2024 |
cz4e <[email protected]> |
feat(CtrlUnit, DCache): support L1 DCache RAS (#4009)
# L1 DCache RAS extension support
The L1 DCache supports the part of Reliability, Availability, and Serviceability (RAS) Extension. * L1 DCache
feat(CtrlUnit, DCache): support L1 DCache RAS (#4009)
# L1 DCache RAS extension support
The L1 DCache supports the part of Reliability, Availability, and Serviceability (RAS) Extension. * L1 DCache protection with Single Error Correct Double Error Detect (SECDED) ECC on the RAMs. This includes the L1 DChace tag and data RAMs. Not recovery error tag or data. * Fault Handling Interrupt (Bus Error Unit Interrupt,BEU, 65) * Error inject
## ECC Error Detect An error might be triggered, when access L1 DCache. * **Error Report**: * Tag ECC Error: As long as an ECC error occurs on a certain path, it is judged that an ECC error has occurred. * Data ECC Error: If an ECC error occurs in the hit line, it is considered that an ECC error has occurred. If it does not hit, it will not be processed. * If an instruction access triggers an ECC error, a Hardware error is considered and an exception is reported. * Whenever there is an error in starting, an error message needs to be sent to BEU. * When the hardware detects an error, it reports it to the BEU and triggers the NMI external interrupt(65).
* **Load instruction**: * Only ECC errors of tags or data will be triggered during execution, and the errors will be reported to the BEU and a `Hardware Error` will be reported.
* **Probe/Snoop**: * If a tag ecc error occurs, there is no need to change the cache status, and a `ProbeAck` with `corrupt=1` needs to be returned to l2. * If a data ecc error occurs, change the cache status according to the rules. If data needs to be returned, `ProbeAckData` with `corrupt=1` needs to be returned to l2.
* **Replace/Evict**: * `ReleaseData` with `corrupt=1` needs to be returned to l2.
* **Store to L1 DCache**: * If a tag ecc error occurs, the cacheline is released according to the `Repalce/Evict` process and the data is written to L1 DCache without reporting errors to l2. * If a data ecc error occurs, the data is written directly without reporting the error to l2.
* **Atomics**: * report `Hardware Error`, do not report errors to l2.
## Error Inject Each core's L1 DCache is configured with a memory map register-controlled controller, and each hardware unit that supports ECC is configured with a control bank. After the Bank register configuration is completed, L1 DCache will trigger an ecc error for the first access L1 DCache. <div style="text-align: center;"> <img src="https://github.com/user-attachments/assets/8c4d23c5-0324-4e52-bcf4-29b47a282d72" alt="err_inject" width="200" /> </div>
### Address Space Address space `0x38022000`-`0x3802207F`, a total of 128 bytes of space, this space is the local space of each hart. <div style="text-align: center;"> <img width="292" alt="ctl_bank" src="https://github.com/user-attachments/assets/89f88b24-37a4-4786-a192-401759eb95cf"> </div>
### L1 DCache Control Bank Each Control Bank contains registers: `ECCCTL`, `ECCEID`, `ECCMASK`, each register is 8 bytes. <img width="414" alt="eccctl" src="https://github.com/user-attachments/assets/b22ff437-d05d-4b3c-a353-dbea1afdc156"> * ECCCTL(ECC Control): ECC injection control register. * `ese(error signaling enable)`: Indicates that the injection is valid and is initialized to 0. When the injection is successful and `pst==0`, ese will be clean. * `pst(persist)`: Continuously inject signals. When `pst==1`, the `ECCEID` counter decreases to 0 and after successful injection, the injection timer will be restored to the last set `ECCEID` and re-injected; when `pst==0`, it will be injected only once. * `ede(error delay enable)`: Indicates that counter is valid and initialized to 0. If * `ese==1` and `ede==0`, error injection is effective immediately. * `ese==1` and `ede==1`, you need to wait until `ECCEID` decrements to 0 before the injection is effective. * `cmp(component)`: Injection target, initialized to 0. * 1'b0: The injection object is tag. * 1'b1: The injection object is data. * `bank`: The bank valid signal is initialized to 0. When the bit in the `bank` is set, the corresponding mask is valid. <img width="414" alt="ecceid" src="https://github.com/user-attachments/assets/8cea0d8d-2540-44b1-b1f9-c1ed6ec5341e">
* ECCEID(ECC Error Inject Delay): ECC injection delay controller. * When `ese==1` and `ede==1`, it starts to decrease until it reaches 0. Currently, the same clock as the core frequency is used, which can also be divided. Since ECC injection relies on L1 DCache access, the time of the `EID` and the time when the ECC error is triggered may not be consistent.
<img width="414" alt="eccmask" src="https://github.com/user-attachments/assets/b1be83fd-17a6-4324-8aa6-45858249c476">
* ECCMASK(ECC Mask): ECC injection mask register. * 0 means no inversion, 1 means flip. Tag injection only uses the bits in `ECCMASK0` corresponding to the tag length.
### Error Inject Example ``` 1 # set control bank base address 2 mv x3, $(BASEADDR) 3 4 # set eid 5 mv x5, 500 # delay 500 cycles 6 sd x5, 8(x3) # mmio store 7 8 # set mask 9 mv x5, 0x1 # flip bit 0 10 sd x5, 16(x3) # mmio store 11 12 # set ctl 13 mv x5, 0x7 # comp = 0, ede = 1, pst = 1, ese = 1 14 sd x5, 0(x3) # mmio store ```
show more ...
|
#
b867eb9f |
| 11-Dec-2024 |
Tang Haojin <[email protected]> |
chore: add zacas to isa string (#4023)
|
#
c308d936 |
| 21-Nov-2024 |
chengguanghui <[email protected]> |
fix(trace): remove traceTrap & tracePriv from trace pipeline
|
#
551cc696 |
| 24-Oct-2024 |
chengguanghui <[email protected]> |
fix(trace): fix width of iaddr
|
#
725e8ddc |
| 19-Sep-2024 |
chengguanghui <[email protected]> |
feat(trace): add TraceCoreInterface in top.
|
#
4907ec88 |
| 19-Sep-2024 |
chengguanghui <[email protected]> |
feat(trace): add trace buffer.
|
#
38c29594 |
| 26-Nov-2024 |
zhanglinjuan <[email protected]> |
feat(MemBlock): add support for Zacas extension
fix(AtomicsUnit, MemBlock): fix loss of multiple stds
In the previous design, AtomicsUnit receives stds from StdExeUnit and arbitrate at most one std
feat(MemBlock): add support for Zacas extension
fix(AtomicsUnit, MemBlock): fix loss of multiple stds
In the previous design, AtomicsUnit receives stds from StdExeUnit and arbitrate at most one std uop for one cycle. This works fine on most of the AMOs and LR/SC because they require only one std uop. However AMOCAS requires at least two std uops, which may be issued from two separate issue queues at the same time, leading to the loss of std uops.
This commit fixes this by taking all the outputs of the StdExeUnits into account with arbitration logics.
fix(AtomicsUnit): DCache req can only be sent at `s_cache_req`
fix(AtomicsUnit, difftest): fix difftest io for atomic events
fix(MainPipe): fix precedence of `&` and `=/=` operator
fix(MainPipe): AMOCAS should not wait for AMOALU
fix(MemBlock): remove unnecessary assertion
fix(MainPipe): only CAS instruction can assert `s3_cas_fail`
fix(AtomicsUnit): fix bug in data select logic
submodule(difftest): bump difftest
show more ...
|
#
2bff79a3 |
| 05-Dec-2024 |
Tang Haojin <[email protected]> |
fix(Parameters): add missing `ISAExtensions` (#3986)
|
#
e9e6cd09 |
| 27-Nov-2024 |
Yanqin Li <[email protected]> |
perf(uncache): mmio and nc share LQUncache; nc data can writeback to ldu1-2
|
#
c7353d05 |
| 03-Sep-2024 |
Yanqin Li <[email protected]> |
feat(NCld): support WMO access for NC ld
* feat(LDU): add support for NC in LoadUnit
* feat(LQ,UB): add support for NC in load queue and uncache buffer
* chore(pbmt): add xsperf for nc ld statistic
|
#
908b24d8 |
| 02-Dec-2024 |
cz4e <[email protected]> |
feat(DCache ECC): enable tag/data ECC by default (#3925)
|
#
6cd53fde |
| 28-Nov-2024 |
Tang Haojin <[email protected]> |
feat(isa): add isa-base and isa-extensions to param and dts (#3953)
|
#
dd980d61 |
| 20-Nov-2024 |
Xu, Zefan <[email protected]> |
fix(CSR): correct the width of PC pgaddr for inst fetch exception (#3795)
We found that the CSR mtval2 truncates the high bits of gpaddr when GPF
occurs in instruction fetching. Actually, there is
fix(CSR): correct the width of PC pgaddr for inst fetch exception (#3795)
We found that the CSR mtval2 truncates the high bits of gpaddr when GPF
occurs in instruction fetching. Actually, there is an GPAMem which
storages the whole 64-bit gpaddr, but it does not pass to CSR correctly,
due to incorrect width of trapPCGPA in module NewCSR and bundle
TrapEntryEventInput. This patch fixes this.
---------
Co-authored-by: ngc7331 <[email protected]>
show more ...
|
#
5f89ba0b |
| 13-Nov-2024 |
Easton Man <[email protected]> |
feat(ftb): add ftb tag length param (#3855)
|
#
4376b525 |
| 08-Nov-2024 |
Ziyue Zhang <[email protected]> |
busytable: support eliminate old vd when read vl's state
|
#
85a8d7ca |
| 01-Nov-2024 |
Zehao Liu <[email protected]> |
feat(dbltrp) : add support for critical error (#3793)
|
#
cdedeb74 |
| 25-Oct-2024 |
JinHong Zeng <[email protected]> |
fix(Parameters): change incorrect VecDqDeqWidth to FpDqDeqWidth (#3749)
FpDqDeqWidth in fpSchdParams is incorrectly written as VecDqDeqWidth
|
#
8bb30a57 |
| 10-Oct-2024 |
Jiru Sun <[email protected]> |
feat(HPM): enable HPMs in CoupledL2 and print them (#3708)
* Bump CoupledL2 and connect perf events.
* Update the number of HPMs
* Detail names of HPM can be printed now. The previous implementati
feat(HPM): enable HPMs in CoupledL2 and print them (#3708)
* Bump CoupledL2 and connect perf events.
* Update the number of HPMs
* Detail names of HPM can be printed now. The previous implementation
has been removed in
[#3631](https://github.com/OpenXiangShan/XiangShan/pull/3631).
show more ...
|
#
e43bb916 |
| 20-Sep-2024 |
Xuan Hu <[email protected]> |
feat(VecLoad): add VecLoadExcp module to handle merging old/new data
* When NF not 0, the register indices are arranged group by group. But in exception handle progress, all registers needed to merg
feat(VecLoad): add VecLoadExcp module to handle merging old/new data
* When NF not 0, the register indices are arranged group by group. But in exception handle progress, all registers needed to merge will be handled first, and then the registers needed to move will be handled later. * The need merge vdIdx can be until 8, so 4 bits reg is needed. * If the instruction is indexed, the eew of vd is sew from vtype. Otherwise, the eew of vd is encoded in instruction. * Use ivemulNoLessThanM1 and dvemulNoLessThanM1 to produce vemul_i_d to avoid either demul or iemul is less than M1. * For whole register load, need handle NF(nf + 1) dest regs. * Use data EMUL to calculate number of dest reg. * GetE8OffsetInVreg will return the n-th 8bit which idx mapped to. * Since xs will flush pipe, when vstart is not 0 and execute vector mem inst, the value of vstart in CSR is the first element of this vector instruction. When exception occurs, the vstart in writeback bundle is the new one, So writebacked vstart should never be used as the beginning of vector mem operation. * Non-seg indexed load use non-sequential vd. * When "index emul" / "data emul" equals 2, the old vd is located in vuopidx 0, 2, 4, 6, the new vd is located in vuopidx 1, 3, 5, 7. * Make rename's input not ready until VecExcpMod not busy. * Delay trap passed to difftest until VecExcpMod not busy. * Rab commit to VecExcpMod as it commit to Rat, and select real load reg maps in VecExcpMod. * Use isDstMask to distinguish vlm and other vle. * When isWhole, vd regs are sequential.
show more ...
|
#
df3b4b92 |
| 20-Sep-2024 |
Anzooooo <[email protected]> |
feat(rv64v): support first only fault instruction
|
#
45def856 |
| 21-Sep-2024 |
Tang Haojin <[email protected]> |
refactor(Pmem): use `Seq` for physical memory ranges (#3622)
|
#
af95bc32 |
| 20-Sep-2024 |
Haoyuan Feng <[email protected]> |
fix(prefetch): MMIO address should not send prefetch requests (#3615)
TODO: Prefetcher should check pmp & pma in order to decide whether to
send requests
|
#
e592da42 |
| 12-Sep-2024 |
Haoyuan Feng <[email protected]> |
fix(Parameters): remove require of PaddrBits to speed up compile (#3548)
|