Use a generic UInt for TileLink op sizes, rather than MT_xx enum
This commit is contained in:
@ -7,6 +7,18 @@ import Chisel._
|
||||
import scala.math._
|
||||
|
||||
trait ScalarOpConstants {
|
||||
val MT_SZ = 3
|
||||
val MT_X = BitPat("b???")
|
||||
val MT_B = UInt("b000")
|
||||
val MT_H = UInt("b001")
|
||||
val MT_W = UInt("b010")
|
||||
val MT_D = UInt("b011")
|
||||
val MT_BU = UInt("b100")
|
||||
val MT_HU = UInt("b101")
|
||||
val MT_WU = UInt("b110")
|
||||
def mtSize(mt: UInt) = mt(MT_SZ-2, 0)
|
||||
def mtSigned(mt: UInt) = !mt(MT_SZ-1)
|
||||
|
||||
val SZ_BR = 3
|
||||
val BR_X = BitPat("b???")
|
||||
val BR_EQ = UInt(0, 3)
|
||||
|
@ -397,7 +397,7 @@ class DCache(implicit p: Parameters) extends L1HellaCacheModule()(p) {
|
||||
// load data subword mux/sign extension
|
||||
val s2_word_idx = s2_req.addr.extract(log2Up(rowBits/8)-1, log2Up(wordBytes))
|
||||
val s2_data_word = s2_data >> Cat(s2_word_idx, UInt(0, log2Up(coreDataBits)))
|
||||
val loadgen = new LoadGen(s2_req.typ, s2_req.addr, s2_data_word, s2_sc, wordBytes)
|
||||
val loadgen = new LoadGen(s2_req.typ, mtSigned(s2_req.typ), s2_req.addr, s2_data_word, s2_sc, wordBytes)
|
||||
io.cpu.resp.bits.data := loadgen.data | s2_sc_fail
|
||||
io.cpu.resp.bits.data_word_bypass := loadgen.wordData
|
||||
io.cpu.resp.bits.store_data := pstore1_data
|
||||
|
@ -443,7 +443,7 @@ class FPU(implicit p: Parameters) extends CoreModule()(p) {
|
||||
|
||||
// load response
|
||||
val load_wb = Reg(next=io.dmem_resp_val)
|
||||
val load_wb_single = RegEnable(io.dmem_resp_type === MT_W || io.dmem_resp_type === MT_WU, io.dmem_resp_val)
|
||||
val load_wb_single = RegEnable(!io.dmem_resp_type(0), io.dmem_resp_val)
|
||||
val load_wb_data = RegEnable(io.dmem_resp_data, io.dmem_resp_val)
|
||||
val load_wb_tag = RegEnable(io.dmem_resp_tag, io.dmem_resp_val)
|
||||
val rec_s = hardfloat.recFNFromFN(8, 24, load_wb_data)
|
||||
|
@ -187,7 +187,7 @@ class IOMSHR(id: Int)(implicit p: Parameters) extends L1HellaCacheModule()(p) {
|
||||
fq.io.deq.ready := io.finish.ready && (state === s_finish)
|
||||
|
||||
val storegen = new StoreGen(req.typ, req.addr, req.data, wordBytes)
|
||||
val loadgen = new LoadGen(req.typ, req.addr, grant_word, req_cmd_sc, wordBytes)
|
||||
val loadgen = new LoadGen(req.typ, mtSigned(req.typ), req.addr, grant_word, req_cmd_sc, wordBytes)
|
||||
|
||||
val beat_mask = (storegen.mask << Cat(beatOffset(req.addr), UInt(0, wordOffBits)))
|
||||
val beat_data = Fill(beatWords, storegen.data)
|
||||
@ -1062,7 +1062,7 @@ class HellaCache(implicit p: Parameters) extends L1HellaCacheModule()(p) {
|
||||
// load data subword mux/sign extension
|
||||
val s2_data_word_prebypass = s2_data_uncorrected >> Cat(s2_word_idx, Bits(0,log2Up(coreDataBits)))
|
||||
val s2_data_word = Mux(s2_store_bypass, s2_store_bypass_data, s2_data_word_prebypass)
|
||||
val loadgen = new LoadGen(s2_req.typ, s2_req.addr, s2_data_word, s2_sc, wordBytes)
|
||||
val loadgen = new LoadGen(s2_req.typ, mtSigned(s2_req.typ), s2_req.addr, s2_data_word, s2_sc, wordBytes)
|
||||
|
||||
amoalu.io.addr := s2_req.addr
|
||||
amoalu.io.cmd := s2_req.cmd
|
||||
|
Reference in New Issue
Block a user