From 16c748576a9c18b2b353c02b80deca2a922eba70 Mon Sep 17 00:00:00 2001 From: Howard Mao Date: Thu, 10 Sep 2015 17:57:03 -0700 Subject: [PATCH] don't mux data_word_bypass between IOMSHR and cache --- rocket/src/main/scala/nbdcache.scala | 9 ++++----- rocket/src/main/scala/rocket.scala | 8 ++++---- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/rocket/src/main/scala/nbdcache.scala b/rocket/src/main/scala/nbdcache.scala index fe712f05..1a401f0f 100644 --- a/rocket/src/main/scala/nbdcache.scala +++ b/rocket/src/main/scala/nbdcache.scala @@ -70,7 +70,7 @@ class HellaCacheResp extends HasCoreMemOp with HasCoreData { val nack = Bool() // comes 2 cycles after req.fire val replay = Bool() val has_data = Bool() - val data_subword = Bits(width = coreDataBits) + val data_word_bypass = Bits(width = coreDataBits) val store_data = Bits(width = coreDataBits) } @@ -185,8 +185,7 @@ class IOMSHR(id: Int) extends L1HellaCacheModule { io.resp.valid := (state === s_resp) io.resp.bits := req io.resp.bits.has_data := isRead(req.cmd) - io.resp.bits.data := loadgen.word - io.resp.bits.data_subword := loadgen.byte + io.resp.bits.data := loadgen.byte io.resp.bits.store_data := req.data io.resp.bits.nack := Bool(false) io.resp.bits.replay := io.resp.valid @@ -1019,8 +1018,7 @@ class HellaCache extends L1HellaCacheModule { cache_resp.valid := (s2_replay || s2_valid_masked && s2_hit) && !s2_data_correctable cache_resp.bits := s2_req cache_resp.bits.has_data := isRead(s2_req.cmd) || s2_sc - cache_resp.bits.data := loadgen.word - cache_resp.bits.data_subword := loadgen.byte | s2_sc_fail + cache_resp.bits.data := loadgen.byte | s2_sc_fail cache_resp.bits.store_data := s2_req.data cache_resp.bits.nack := s2_valid && s2_nack cache_resp.bits.replay := s2_replay @@ -1033,6 +1031,7 @@ class HellaCache extends L1HellaCacheModule { mshrs.io.resp.ready := !cache_pass io.cpu.resp := Mux(cache_pass, cache_resp, uncache_resp) + io.cpu.resp.bits.data_word_bypass := loadgen.word io.cpu.ordered := mshrs.io.fence_rdy && !s1_valid && !s2_valid io.cpu.replay_next.valid := s1_replay && (s1_read || s1_sc) io.cpu.replay_next.bits := s1_req.tag diff --git a/rocket/src/main/scala/rocket.scala b/rocket/src/main/scala/rocket.scala index 9a336705..cead7ad2 100644 --- a/rocket/src/main/scala/rocket.scala +++ b/rocket/src/main/scala/rocket.scala @@ -167,8 +167,8 @@ class Rocket extends CoreModule (id_illegal_insn, UInt(Causes.illegal_instruction)))) val dcache_bypass_data = - if(params(FastLoadByte)) io.dmem.resp.bits.data_subword - else if(params(FastLoadWord)) io.dmem.resp.bits.data + if(params(FastLoadByte)) io.dmem.resp.bits.data + else if(params(FastLoadWord)) io.dmem.resp.bits.data_word_bypass else wb_reg_wdata // detect bypass opportunities @@ -364,7 +364,7 @@ class Rocket extends CoreModule val wb_wen = wb_valid && wb_ctrl.wxd val rf_wen = wb_wen || ll_wen val rf_waddr = Mux(ll_wen, ll_waddr, wb_waddr) - val rf_wdata = Mux(dmem_resp_valid && dmem_resp_xpu, io.dmem.resp.bits.data_subword, + val rf_wdata = Mux(dmem_resp_valid && dmem_resp_xpu, io.dmem.resp.bits.data, Mux(ll_wen, ll_wdata, Mux(wb_ctrl.csr != CSR.N, csr.io.rw.rdata, wb_reg_wdata))) @@ -474,7 +474,7 @@ class Rocket extends CoreModule io.fpu.inst := id_inst io.fpu.fromint_data := ex_rs(0) io.fpu.dmem_resp_val := dmem_resp_valid && dmem_resp_fpu - io.fpu.dmem_resp_data := io.dmem.resp.bits.data + io.fpu.dmem_resp_data := io.dmem.resp.bits.data_word_bypass io.fpu.dmem_resp_type := io.dmem.resp.bits.typ io.fpu.dmem_resp_tag := dmem_resp_waddr