|
|
@@ -18,15 +18,7 @@ class MatMul(val rowDimsA: Int, val colDimsA: Int) extends MultiIOModule { |
|
|
|
|
|
|
|
|
val debug = IO( |
|
|
val debug = IO( |
|
|
new Bundle { |
|
|
new Bundle { |
|
|
val ready = Output(Bool()) |
|
|
|
|
|
val dpValid = Output(Bool()) |
|
|
|
|
|
|
|
|
|
|
|
val rowSelA = Output(UInt(32.W)) |
|
|
|
|
|
val rowSelB = Output(UInt(32.W)) |
|
|
|
|
|
val colSel = Output(UInt(32.W)) |
|
|
|
|
|
|
|
|
|
|
|
val ma2dp = Output(UInt(32.W)) |
|
|
|
|
|
val mb2dp = Output(UInt(32.W)) |
|
|
|
|
|
|
|
|
val myDebugSignal = Output(Bool()) |
|
|
} |
|
|
} |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
@@ -38,75 +30,22 @@ class MatMul(val rowDimsA: Int, val colDimsA: Int) extends MultiIOModule { |
|
|
val matrixB = Module(new Matrix(rowDimsA, colDimsA)).io |
|
|
val matrixB = Module(new Matrix(rowDimsA, colDimsA)).io |
|
|
val dotProdCalc = Module(new DotProd(colDimsA)).io |
|
|
val dotProdCalc = Module(new DotProd(colDimsA)).io |
|
|
|
|
|
|
|
|
// matrixA.dataIn := 0.U |
|
|
|
|
|
// matrixA.rowIdx := 0.U |
|
|
|
|
|
// matrixA.colIdx := 0.U |
|
|
|
|
|
// matrixA.readEnable := false.B |
|
|
|
|
|
|
|
|
|
|
|
// matrixB.rowIdx := 0.U |
|
|
|
|
|
// matrixB.colIdx := 0.U |
|
|
|
|
|
// matrixB.dataIn := 0.U |
|
|
|
|
|
// matrixB.readEnable := false.B |
|
|
|
|
|
|
|
|
|
|
|
// dotProdCalc.dataInA := 0.U |
|
|
|
|
|
// dotProdCalc.dataInB := 0.U |
|
|
|
|
|
|
|
|
|
|
|
// io.dataOut := 0.U |
|
|
|
|
|
// io.outputValid := false.B |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
* LF |
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Get the data in |
|
|
|
|
|
val ready = RegInit(false.B) |
|
|
|
|
|
|
|
|
|
|
|
val (colCounter, colCounterWrap) = Counter(true.B, colDimsA) |
|
|
|
|
|
val (rowSelA, rowSelAWrap) = Counter(colCounterWrap, rowDimsA) |
|
|
|
|
|
val (rowSelB, _) = Counter(rowSelAWrap & ready, rowDimsA * colDimsA) |
|
|
|
|
|
|
|
|
|
|
|
when(!ready){ |
|
|
|
|
|
ready := rowSelAWrap |
|
|
|
|
|
matrixA.readEnable := true.B |
|
|
|
|
|
matrixB.readEnable := true.B |
|
|
|
|
|
|
|
|
|
|
|
matrixA.colIdx := colCounter |
|
|
|
|
|
matrixA.rowIdx := rowSelA |
|
|
|
|
|
|
|
|
|
|
|
matrixB.colIdx := colCounter |
|
|
|
|
|
matrixB.rowIdx := rowSelA |
|
|
|
|
|
|
|
|
|
|
|
}.otherwise{ |
|
|
|
|
|
matrixA.readEnable := false.B |
|
|
|
|
|
matrixB.readEnable := false.B |
|
|
|
|
|
|
|
|
|
|
|
matrixA.colIdx := colCounter |
|
|
|
|
|
matrixA.rowIdx := rowSelB |
|
|
|
|
|
|
|
|
|
|
|
matrixB.colIdx := colCounter |
|
|
|
|
|
matrixB.rowIdx := rowSelA |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
matrixA.dataIn := io.dataInA |
|
|
|
|
|
matrixB.dataIn := io.dataInB |
|
|
|
|
|
|
|
|
matrixA.dataIn := 0.U |
|
|
|
|
|
matrixA.rowIdx := 0.U |
|
|
|
|
|
matrixA.colIdx := 0.U |
|
|
|
|
|
matrixA.readEnable := false.B |
|
|
|
|
|
|
|
|
dotProdCalc.dataInA := matrixA.dataOut |
|
|
|
|
|
dotProdCalc.dataInB := matrixB.dataOut |
|
|
|
|
|
|
|
|
matrixB.rowIdx := 0.U |
|
|
|
|
|
matrixB.colIdx := 0.U |
|
|
|
|
|
matrixB.dataIn := 0.U |
|
|
|
|
|
matrixB.readEnable := false.B |
|
|
|
|
|
|
|
|
io.dataOut := dotProdCalc.dataOut |
|
|
|
|
|
io.outputValid := dotProdCalc.outputValid & ready |
|
|
|
|
|
|
|
|
dotProdCalc.dataInA := 0.U |
|
|
|
|
|
dotProdCalc.dataInB := 0.U |
|
|
|
|
|
|
|
|
debug.ready := ready |
|
|
|
|
|
debug.dpValid := dotProdCalc.outputValid |
|
|
|
|
|
debug.rowSelA := rowSelA |
|
|
|
|
|
debug.rowSelB := rowSelB |
|
|
|
|
|
debug.colSel := colCounter |
|
|
|
|
|
|
|
|
io.dataOut := 0.U |
|
|
|
|
|
io.outputValid := false.B |
|
|
|
|
|
|
|
|
debug.ma2dp := matrixA.dataOut |
|
|
|
|
|
debug.mb2dp := matrixB.dataOut |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
debug.myDebugSignal := false.B |
|
|
} |
|
|
} |