Eliminated store after store stall when no cache; simplified divshiftcalc logic.

This commit is contained in:
David Harris 2022-09-21 13:02:34 -07:00
parent f83d640068
commit f08d5b23d5
3 changed files with 5 additions and 3 deletions

View File

@ -91,7 +91,7 @@ for test in tests32ic:
grepstr="All tests ran without failures")
configs.append(tc)
tests32i = ["wally32periph"]
tests32i = ["arch32i", "wally32periph"]
for test in tests32i:
tc = TestCase(
name=test,

View File

@ -77,5 +77,5 @@ module divshiftcalc(
// *** explain why radix 4 division needs a left shift by 1
// *** can this shift be moved into the shiftcorrection logic?
assign PreDivShiftIn = {{`NF{1'b0}}, DivQm, {`NORMSHIFTSZ-`DIVb+1-`NF{1'b0}}};
assign DivShiftIn = PreDivShiftIn << (`RADIX==4 & ~Sqrt); // {{`NF{1'b0}}, DivQm[`DIVb-1:0], {`NORMSHIFTSZ-`DIVb+2-`NF{1'b0}}};
assign DivShiftIn = PreDivShiftIn << (`RADIX==4 & ~Sqrt);
endmodule

View File

@ -236,5 +236,7 @@ module controller(
// Stall pipeline at Fetch if a CSR Write or Fence is pending in the subsequent stages
assign CSRWriteFencePendingDEM = CSRWriteD | CSRWriteE | CSRWriteM | FencePendingD | FencePendingE | FencePendingM;
assign StoreStallD = MemRWE[0] & ((|MemRWD) | (|AtomicD));
// the synchronous DTIM cannot read immediately after write
// a cache cannot read or write immediately after a write
assign StoreStallD = MemRWE[0] & ((MemRWD[1] | (MemRWD[0] & `DCACHE)) | (|AtomicD));
endmodule