Minor Rocket fixes to support fLen != xLen
This commit is contained in:
@ -687,7 +687,8 @@ class DCacheModule(outer: DCache) extends HellaCacheModule(outer) {
|
||||
|
||||
// AMOs
|
||||
if (usingRMW) {
|
||||
val amoalu = Module(new AMOALU(xLen))
|
||||
// when xLen < coreDataBits (e.g. RV32D), this AMOALU is wider than necessary
|
||||
val amoalu = Module(new AMOALU(coreDataBits))
|
||||
amoalu.io.mask := pstore1_mask
|
||||
amoalu.io.cmd := (if (usingAtomicsInCache) pstore1_cmd else M_XWR)
|
||||
amoalu.io.lhs := s2_data_word
|
||||
|
@ -46,8 +46,8 @@ trait HasL1HellaCacheParameters extends HasL1CacheParameters with HasCoreParamet
|
||||
val cacheParams = tileParams.dcache.get
|
||||
val cfg = cacheParams
|
||||
|
||||
def wordBits = xLen // really, xLen max
|
||||
def wordBytes = wordBits/8
|
||||
def wordBits = coreDataBits
|
||||
def wordBytes = coreDataBytes
|
||||
def wordOffBits = log2Up(wordBytes)
|
||||
def beatBytes = cacheBlockBytes / cacheDataBeats
|
||||
def beatWords = beatBytes / wordBytes
|
||||
|
@ -250,8 +250,8 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p)
|
||||
coverExceptions(id_xcpt, id_cause, "DECODE", idCoverCauses)
|
||||
|
||||
val dcache_bypass_data =
|
||||
if (fastLoadByte) io.dmem.resp.bits.data
|
||||
else if (fastLoadWord) io.dmem.resp.bits.data_word_bypass
|
||||
if (fastLoadByte) io.dmem.resp.bits.data(xLen-1, 0)
|
||||
else if (fastLoadWord) io.dmem.resp.bits.data_word_bypass(xLen-1, 0)
|
||||
else wb_reg_wdata
|
||||
|
||||
// detect bypass opportunities
|
||||
@ -527,7 +527,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p)
|
||||
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,
|
||||
val rf_wdata = Mux(dmem_resp_valid && dmem_resp_xpu, io.dmem.resp.bits.data(xLen-1, 0),
|
||||
Mux(ll_wen, ll_wdata,
|
||||
Mux(wb_ctrl.csr =/= CSR.N, csr.io.rw.rdata,
|
||||
wb_reg_wdata)))
|
||||
@ -676,7 +676,7 @@ class Rocket(implicit p: Parameters) extends CoreModule()(p)
|
||||
io.dmem.req.bits.phys := Bool(false)
|
||||
io.dmem.req.bits.addr := encodeVirtualAddress(ex_rs(0), alu.io.adder_out)
|
||||
io.dmem.invalidate_lr := wb_xcpt
|
||||
io.dmem.s1_data.data := Mux(mem_ctrl.fp, io.fpu.store_data, mem_reg_rs2)
|
||||
io.dmem.s1_data.data := (if (fLen == 0) mem_reg_rs2 else Mux(mem_ctrl.fp, Fill((xLen max fLen) / fLen, io.fpu.store_data), mem_reg_rs2))
|
||||
io.dmem.s1_kill := killm_common || mem_breakpoint
|
||||
|
||||
io.rocc.cmd.valid := wb_reg_valid && wb_ctrl.rocc && !replay_wb_common
|
||||
|
Reference in New Issue
Block a user