d33dbc9e | 19-Mar-2025 |
NewPaulWalker <[email protected]> |
fix(amocas): fix amocas.q to avoid stalls (#4435)
when rd is equal to rs1, uop1 will write rd, while uop2 and uop3 of amocas.q need rs1 as src, which cause a RAW stalls.
However, rs1, the address o
fix(amocas): fix amocas.q to avoid stalls (#4435)
when rd is equal to rs1, uop1 will write rd, while uop2 and uop3 of amocas.q need rs1 as src, which cause a RAW stalls.
However, rs1, the address of load and store, is used in uop1, we donot need rs1 in other uops.
show more ...
|
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 ...
|
72090f4c | 28-Nov-2024 |
Ziyue Zhang <[email protected]> |
fix(decode): not eliminate old vd when vstart is not zero (#3948)
* when vstart is not zero, it need to combine the old data in the range
of 0 to vstart, so we need old vd in this case
* different
fix(decode): not eliminate old vd when vstart is not zero (#3948)
* when vstart is not zero, it need to combine the old data in the range
of 0 to vstart, so we need old vd in this case
* different instructions may have same fuoptype, so we need to check
both futype and fuoptype to distinguish the instructions
show more ...
|