1
0

Set io.cpu.resp.bits.addr for MMIO loads without affecting QoR

This commit is contained in:
Andrew Waterman 2017-04-27 19:46:39 -07:00
parent 7c70aa593e
commit 8fd5ecdff8

View File

@ -163,6 +163,7 @@ class DCacheModule(outer: DCache) extends HellaCacheModule(outer) {
val s2_req = Reg(io.cpu.req.bits) val s2_req = Reg(io.cpu.req.bits)
val s2_req_block_addr = (s2_req.addr >> idxLSB) << idxLSB val s2_req_block_addr = (s2_req.addr >> idxLSB) << idxLSB
val s2_uncached = Reg(Bool()) val s2_uncached = Reg(Bool())
val s2_uncached_resp_addr = Reg(UInt()) // should be DCE'd in synthesis
when (s1_valid_not_nacked || s1_flush_valid) { when (s1_valid_not_nacked || s1_flush_valid) {
s2_req := s1_req s2_req := s1_req
s2_req.addr := s1_paddr s2_req.addr := s1_paddr
@ -359,6 +360,7 @@ class DCacheModule(outer: DCache) extends HellaCacheModule(outer) {
s2_req.typ := req.typ s2_req.typ := req.typ
s2_req.tag := req.tag s2_req.tag := req.tag
s2_req.addr := Cat(s1_paddr >> beatOffBits /* don't-care */, req.addr(beatOffBits-1, 0)) s2_req.addr := Cat(s1_paddr >> beatOffBits /* don't-care */, req.addr(beatOffBits-1, 0))
s2_uncached_resp_addr := req.addr
} }
} .elsewhen (grantIsVoluntary) { } .elsewhen (grantIsVoluntary) {
assert(release_ack_wait, "A ReleaseAck was unexpected by the dcache.") // TODO should handle Ack coming back on same cycle! assert(release_ack_wait, "A ReleaseAck was unexpected by the dcache.") // TODO should handle Ack coming back on same cycle!
@ -506,6 +508,7 @@ class DCacheModule(outer: DCache) extends HellaCacheModule(outer) {
assert(!s2_valid_hit) assert(!s2_valid_hit)
io.cpu.resp.valid := true io.cpu.resp.valid := true
io.cpu.resp.bits.replay := true io.cpu.resp.bits.replay := true
io.cpu.resp.bits.addr := s2_uncached_resp_addr
} }
// load data subword mux/sign extension // load data subword mux/sign extension