Mitigate D$ exception critical path, yet again
This commit is contained in:
		
				
					committed by
					
						
						Andrew Waterman
					
				
			
			
				
	
			
			
			
						parent
						
							c99ce7ce5d
						
					
				
				
					commit
					d82a0dc231
				
			@@ -480,8 +480,9 @@ class DCacheModule(outer: DCache) extends HellaCacheModule(outer) {
 | 
				
			|||||||
  io.cpu.resp.bits.replay := false
 | 
					  io.cpu.resp.bits.replay := false
 | 
				
			||||||
  io.cpu.ordered := !(s1_valid || s2_valid || cached_grant_wait || uncachedInFlight.asUInt.orR)
 | 
					  io.cpu.ordered := !(s1_valid || s2_valid || cached_grant_wait || uncachedInFlight.asUInt.orR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val s1_xcpt = Mux(s1_nack || !tlb.io.req.valid, 0.U.asTypeOf(tlb.io.resp), tlb.io.resp)
 | 
					  val s1_xcpt_valid = tlb.io.req.valid && !s1_nack
 | 
				
			||||||
  io.cpu.s2_xcpt := RegEnable(s1_xcpt, s1_valid)
 | 
					  val s1_xcpt = tlb.io.resp
 | 
				
			||||||
 | 
					  io.cpu.s2_xcpt := Mux(RegNext(s1_xcpt_valid), RegEnable(s1_xcpt, s1_valid_not_nacked), 0.U.asTypeOf(s1_xcpt))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // uncached response
 | 
					  // uncached response
 | 
				
			||||||
  io.cpu.replay_next := tl_out.d.fire() && grantIsUncachedData
 | 
					  io.cpu.replay_next := tl_out.d.fire() && grantIsUncachedData
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -975,8 +975,9 @@ class NonBlockingDCacheModule(outer: NonBlockingDCache) extends HellaCacheModule
 | 
				
			|||||||
  io.cpu.ordered := mshrs.io.fence_rdy && !s1_valid && !s2_valid
 | 
					  io.cpu.ordered := mshrs.io.fence_rdy && !s1_valid && !s2_valid
 | 
				
			||||||
  io.cpu.replay_next := (s1_replay && s1_read) || mshrs.io.replay_next
 | 
					  io.cpu.replay_next := (s1_replay && s1_read) || mshrs.io.replay_next
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  val s1_xcpt = Mux(s1_nack || !dtlb.io.req.valid, 0.U.asTypeOf(dtlb.io.resp), dtlb.io.resp)
 | 
					  val s1_xcpt_valid = dtlb.io.req.valid && !s1_nack
 | 
				
			||||||
  io.cpu.s2_xcpt := RegEnable(s1_xcpt, s1_clk_en)
 | 
					  val s1_xcpt = dtlb.io.resp
 | 
				
			||||||
 | 
					  io.cpu.s2_xcpt := Mux(RegNext(s1_xcpt_valid), RegEnable(s1_xcpt, s1_clk_en), 0.U.asTypeOf(s1_xcpt))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // performance events
 | 
					  // performance events
 | 
				
			||||||
  io.cpu.acquire := edge.done(tl_out.a)
 | 
					  io.cpu.acquire := edge.done(tl_out.a)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user