@@ -926,7 +926,7 @@ object Cyclotron {
926926 }
927927
928928 def unflatten (destWord : UInt , flattened : UInt , index : Int ): Unit = {
929- assert(destWord.widthKnown)
929+ assert(destWord.widthKnown, " cannot unflatten to sink with unknown width " )
930930 destWord := splitUInt(flattened, destWord.getWidth)(index)
931931 }
932932}
@@ -1049,51 +1049,62 @@ class CyclotronTile(implicit p: Parameters) extends CoreModule {
10491049 val finished = Output (Bool ())
10501050 })
10511051
1052- val bbox = Module (new CyclotronTileBlackBox )
1052+ val bbox = Module (new CyclotronTileBlackBox ( this ) )
10531053 bbox.io.clock := clock
10541054 bbox.io.reset := reset.asBool
10551055
10561056 import Cyclotron ._
10571057
10581058 // imem
1059- io.imem.req.ready := bbox.io.imem_req_ready
1060- bbox.io.imem_req_valid := io.imem.req.valid
1061- bbox.io.imem_req_bits_address := io.imem.req.bits.address
1062- bbox.io.imem_req_bits_tag := io.imem.req.bits.tag
1063- bbox.io.imem_resp_ready := io.imem.resp.ready
1064- io.imem.resp.valid := bbox.io.imem_resp_valid
1065- io.imem.resp.bits.tag := bbox.io.imem_resp_bits_tag
1066- io.imem.resp.bits.data := bbox.io.imem_resp_bits_data
1067- io.imem.resp.bits.metadata := DontCare
1059+ bbox.io.imem_req_ready := io.imem.req.ready
1060+ io.imem.req.valid := bbox.io.imem_req_valid
1061+ io.imem.req.bits.address := bbox.io.imem_req_bits_address
1062+ io.imem.req.bits.tag := bbox.io.imem_req_bits_tag
1063+ io.imem.req.bits.size := log2Ceil(muonParams.instBits / 8 ).U
1064+ io.imem.req.bits.store := false .B
1065+ io.imem.req.bits.data := 0 .U
1066+ io.imem.req.bits.mask := ((1 << muonParams.instBytes) - 1 ).U
1067+ io.imem.resp.ready := bbox.io.imem_resp_ready
1068+ bbox.io.imem_resp_valid := io.imem.resp.valid
1069+ bbox.io.imem_resp_bits_tag := io.imem.resp.bits.tag
1070+ bbox.io.imem_resp_bits_data := io.imem.resp.bits.data
10681071
10691072 // dmem
1070- // TODO: dedup with CyclotronDataMem?
1071- bbox.io.dmem_req_valid := VecInit (io.dmem.req.map(_.valid)).asUInt
1072- bbox.io.dmem_req_bits_store := VecInit (io.dmem.req.map(_.bits.store)).asUInt
1073- bbox.io.dmem_req_bits_tag := VecInit (io.dmem.req.map(_.bits.tag)).asUInt
1074- bbox.io.dmem_req_bits_address := VecInit (io.dmem.req.map(_.bits.address)).asUInt
1075- bbox.io.dmem_req_bits_size := VecInit (io.dmem.req.map(_.bits.size)).asUInt
1076- bbox.io.dmem_req_bits_data := VecInit (io.dmem.req.map(_.bits.data)).asUInt
1077- bbox.io.dmem_req_bits_mask := VecInit (io.dmem.req.map(_.bits.mask)).asUInt
1078- bbox.io.dmem_resp_ready := VecInit (io.dmem.resp.map(_.ready)).asUInt
10791073 io.dmem.req.zipWithIndex.foreach { case (req, i) =>
1080- req.ready := bbox.io.dmem_req_ready(i)
1074+ req.valid := bbox.io.dmem_req_valid(i)
1075+ req.bits.store := bbox.io.dmem_req_bits_store(i)
1076+ unflatten(req.bits.tag, bbox.io.dmem_req_bits_tag, i)
1077+ unflatten(req.bits.address, bbox.io.dmem_req_bits_address, i)
1078+ unflatten(req.bits.size, bbox.io.dmem_req_bits_size, i)
1079+ unflatten(req.bits.data, bbox.io.dmem_req_bits_data, i)
1080+ unflatten(req.bits.mask, bbox.io.dmem_req_bits_mask, i)
10811081 }
1082+ bbox.io.dmem_req_ready := VecInit (io.dmem.req.map(_.ready)).asUInt
1083+
1084+ bbox.io.dmem_resp_valid := VecInit (io.dmem.resp.map(_.valid)).asUInt
1085+ bbox.io.dmem_resp_bits_tag := VecInit (io.dmem.resp.map(_.bits.tag)).asUInt
1086+ bbox.io.dmem_resp_bits_data := VecInit (io.dmem.resp.map(_.bits.data)).asUInt
10821087 io.dmem.resp.zipWithIndex.foreach { case (resp, i) =>
1083- resp.valid := bbox.io.dmem_resp_valid(i)
1084- unflatten(resp.bits.tag, bbox.io.dmem_resp_bits_tag, i)
1085- unflatten(resp.bits.data, bbox.io.dmem_resp_bits_data, i)
1088+ resp.ready := bbox.io.dmem_resp_ready(i)
10861089 resp.bits.metadata := DontCare
10871090 }
10881091
10891092 io.finished := bbox.io.finished
10901093}
10911094
1092- class CyclotronTileBlackBox (implicit p : Parameters ) extends CyclotronBlackBox
1093- with HasBlackBoxResource with HasCoreParameters {
1095+ class CyclotronTileBlackBox (outer : CyclotronTile )(implicit val p : Parameters )
1096+ extends BlackBox (Map (
1097+ " ARCH_LEN" -> outer.archLen,
1098+ " INST_BITS" -> outer.muonParams.instBits,
1099+ " IMEM_TAG_BITS" -> outer.imemTagBits,
1100+ " DMEM_DATA_BITS" -> outer.archLen,
1101+ " DMEM_TAG_BITS" -> outer.dmemTagBits,
1102+ " NUM_LANES" -> outer.numLanes,
1103+ )) with HasBlackBoxResource with HasCoreParameters {
10941104 val io = IO (new Bundle {
10951105 val clock = Input (Clock ())
10961106 val reset = Input (Bool ())
1107+
10971108 val imem_req_valid = Output (Bool ())
10981109 val imem_req_ready = Input (Bool ())
10991110 val imem_req_bits_address = Output (UInt (addressBits.W ))
0 commit comments