Skip to content

Commit 555b07b

Browse files
committed
fixed the recoding logic
1 parent 5847ffc commit 555b07b

File tree

2 files changed

+13
-13
lines changed

2 files changed

+13
-13
lines changed

src/main/scala/gemmini/Arithmetic.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ object Arithmetic {
331331
override implicit def cast(self: Float): ArithmeticOps[Float] = new ArithmeticOps(self) {
332332
override def *(t: Float): Float = {
333333
val t_rec = if (t.isRecoded) t.bits else recFNFromFN(t.expWidth, t.sigWidth, t.bits)
334-
val self_rec = if (t.isRecoded) t.bits else recFNFromFN(self.expWidth, self.sigWidth, self.bits)
334+
val self_rec = if (self.isRecoded) self.bits else recFNFromFN(self.expWidth, self.sigWidth, self.bits)
335335

336336
val t_resizer = Module(new RecFNToRecFN(t.expWidth, t.sigWidth, self.expWidth, self.sigWidth))
337337
t_resizer.io.in := t_rec
@@ -488,7 +488,7 @@ object Arithmetic {
488488
resizer.io.roundingMode := consts.round_near_even // consts.round_near_maxMag
489489
resizer.io.detectTininess := consts.tininess_afterRounding
490490

491-
val result = Wire(Float(t.expWidth, t.sigWidth, self.isRecoded))
491+
val result = Wire(Float(t.expWidth, t.sigWidth, t.isRecoded))
492492
result.bits := (if (result.isRecoded) resizer.io.out else fNFromRecFN(t.expWidth, t.sigWidth, resizer.io.out))
493493
result
494494
}
@@ -502,7 +502,7 @@ object Arithmetic {
502502
resizer.io.roundingMode := consts.round_near_even // consts.round_near_maxMag
503503
resizer.io.detectTininess := consts.tininess_afterRounding
504504

505-
val result = Wire(Float(t.expWidth, t.sigWidth, self.isRecoded))
505+
val result = Wire(Float(t.expWidth, t.sigWidth, t.isRecoded))
506506
result.bits := (if (result.isRecoded) resizer.io.out else fNFromRecFN(t.expWidth, t.sigWidth, resizer.io.out))
507507
result
508508
}

src/main/scala/gemmini/ExecuteController.scala

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -833,9 +833,9 @@ class ExecuteController[T <: Data, U <: Data, V <: Data](xLen: Int, tagWidth: In
833833
val dataB_unpadded = MuxCase(readData(cntl.b_bank), Seq(cntl.accumulate_zeros -> 0.U, cntl.b_read_from_acc -> accReadData(cntl.b_bank_acc)))
834834
val dataD_unpadded = MuxCase(readData(cntl.d_bank), Seq(cntl.preload_zeros -> 0.U, cntl.d_read_from_acc -> accReadData(cntl.d_bank_acc)))
835835

836-
val dataA = VecInit(dataA_unpadded.asTypeOf(Vec(block_size, inputType)).zipWithIndex.map { case (d, i) => Mux(i.U < cntl.a_unpadded_cols, d, inputType.zero)})
837-
val dataB = VecInit(dataB_unpadded.asTypeOf(Vec(block_size, inputType)).zipWithIndex.map { case (d, i) => Mux(i.U < cntl.b_unpadded_cols, d, inputType.zero)})
838-
val dataD = VecInit(dataD_unpadded.asTypeOf(Vec(block_size, inputType)).zipWithIndex.map { case (d, i) => Mux(i.U < cntl.d_unpadded_cols, d, inputType.zero)})
836+
val dataA = VecInit(dataA_unpadded.asTypeOf(Vec(block_size, inputType)).zipWithIndex.map { case (d, i) => Mux(i.U < cntl.a_unpadded_cols, d, inputType.zero)}.map(d => d.asTypeOf(inputType).withWidthOf(spatialArrayInputType)))
837+
val dataB = VecInit(dataB_unpadded.asTypeOf(Vec(block_size, inputType)).zipWithIndex.map { case (d, i) => Mux(i.U < cntl.b_unpadded_cols, d, inputType.zero)}.map(d => d.asTypeOf(inputType).withWidthOf(spatialArrayWeightType)))
838+
val dataD = VecInit(dataD_unpadded.asTypeOf(Vec(block_size, inputType)).zipWithIndex.map { case (d, i) => Mux(i.U < cntl.d_unpadded_cols, d, inputType.zero)}.map(d => d.asTypeOf(inputType).withWidthOf(spatialArrayWeightType)))
839839

840840
// Pop responses off the scratchpad io ports
841841
when (mesh_cntl_signals_q.io.deq.fire) {
@@ -876,9 +876,9 @@ class ExecuteController[T <: Data, U <: Data, V <: Data](xLen: Int, tagWidth: In
876876
mesh.io.b.valid := cntl.b_fire && dataB_valid
877877
mesh.io.d.valid := cntl.d_fire && dataD_valid
878878

879-
mesh.io.a.bits := dataA.asTypeOf(Vec(meshRows, Vec(tileRows, inputType)))
880-
mesh.io.b.bits := dataB.asTypeOf(Vec(meshColumns, Vec(tileColumns, inputType)))
881-
mesh.io.d.bits := dataD.asTypeOf(Vec(meshColumns, Vec(tileColumns, inputType)))
879+
mesh.io.a.bits := dataA.asTypeOf(Vec(meshRows, Vec(tileRows, spatialArrayInputType)))
880+
mesh.io.b.bits := dataB.asTypeOf(Vec(meshColumns, Vec(tileColumns, spatialArrayWeightType)))
881+
mesh.io.d.bits := dataD.asTypeOf(Vec(meshColumns, Vec(tileColumns, spatialArrayWeightType)))
882882

883883
mesh.io.req.valid := mesh_cntl_signals_q.io.deq.fire && (cntl.a_fire || cntl.b_fire || cntl.d_fire)
884884

@@ -888,13 +888,13 @@ class ExecuteController[T <: Data, U <: Data, V <: Data](xLen: Int, tagWidth: In
888888
}
889889

890890
when (cntl_valid && cntl.perform_single_preload) {
891-
mesh.io.a.bits := Mux(a_should_be_fed_into_transposer, dataA.asUInt, 0.U).asTypeOf(Vec(meshRows, Vec(tileRows, inputType)))
892-
mesh.io.b.bits := Mux(b_should_be_fed_into_transposer, dataB.asUInt, 0.U).asTypeOf(Vec(meshColumns, Vec(tileColumns, inputType)))
891+
mesh.io.a.bits := Mux(a_should_be_fed_into_transposer, dataA.asUInt, 0.U).asTypeOf(Vec(meshRows, Vec(tileRows, spatialArrayInputType)))
892+
mesh.io.b.bits := Mux(b_should_be_fed_into_transposer, dataB.asUInt, 0.U).asTypeOf(Vec(meshColumns, Vec(tileColumns, spatialArrayWeightType)))
893893
}
894894

895895
when (cntl_valid && cntl.perform_single_mul) {
896-
mesh.io.a.bits := Mux(a_should_be_fed_into_transposer, 0.U, dataA.asUInt).asTypeOf(Vec(meshRows, Vec(tileRows, inputType)))
897-
mesh.io.b.bits := Mux(b_should_be_fed_into_transposer, 0.U, dataB.asUInt).asTypeOf(Vec(meshColumns, Vec(tileColumns, inputType)))
896+
mesh.io.a.bits := Mux(a_should_be_fed_into_transposer, 0.U, dataA.asUInt).asTypeOf(Vec(meshRows, Vec(tileRows, spatialArrayInputType)))
897+
mesh.io.b.bits := Mux(b_should_be_fed_into_transposer, 0.U, dataB.asUInt).asTypeOf(Vec(meshColumns, Vec(tileColumns, spatialArrayWeightType)))
898898
mesh.io.req.bits.tag.addr.make_this_garbage()
899899
}
900900

0 commit comments

Comments
 (0)