Matrix 凿子中的矩阵运算

Matrix 凿子中的矩阵运算,matrix,matrix-multiplication,transpose,chisel,Matrix,Matrix Multiplication,Transpose,Chisel,凿子是否支持矩阵运算,如加法、乘法、换位等。?如果没有,最好的实施方法是什么 向量呢?凿子不支持矩阵运算。它是一种DSL,用于编写硬件生成器,以实现此类操作。有关专用数学硬件生成器的示例,请参见:和是,您可以借助向量在凿子中执行矩阵运算。我提出的代码如下(输入矩阵的大小为3x5和5x2) 包矩阵结果 进口许可证3_ 导入3.IoTester.{PeekPokeTester,驱动程序} 导入scala.collection.mutable.ArrayBuffer 类MatMult扩展模块{ val

凿子是否支持矩阵运算,如加法、乘法、换位等。?如果没有,最好的实施方法是什么


向量呢?

凿子不支持矩阵运算。它是一种DSL,用于编写硬件生成器,以实现此类操作。有关专用数学硬件生成器的示例,请参见:和

是,您可以借助向量在凿子中执行矩阵运算。我提出的代码如下(输入矩阵的大小为3x5和5x2)

包矩阵结果
进口许可证3_
导入3.IoTester.{PeekPokeTester,驱动程序}
导入scala.collection.mutable.ArrayBuffer
类MatMult扩展模块{
val io=io(新捆绑){
val matA=输入(向量(15,单位(32.W)))
val matB=输入(Vec(10,UInt(32.W)))
val load=输入(Bool())
val matC=输出(向量(6,单位(32.W)))
val valid=输出(Bool())
})
var总和=UInt(32.W)
val matC=新阵列缓冲[UInt]()
为了
package matrixmult

import chisel3._
import chisel3.iotesters.{PeekPokeTester, Driver}
import scala.collection.mutable.ArrayBuffer

class MatMult extends Module {
  val io = IO(new Bundle {
    val matA   = Input(Vec(15, UInt(32.W)))
    val matB   = Input(Vec(10, UInt(32.W)))
    val load  = Input(Bool())
    val matC = Output(Vec(6, UInt(32.W)))
    val valid = Output(Bool())
  })
  var sum = UInt(32.W)
  val matC = new ArrayBuffer[UInt]()

  for(i <- 0 until 6) {                
        matC += 0.asUInt(32.W)
  }

  when (io.load) {
    for(i <- 0 until 3) {
        for(j <- 0 until 2) {
            sum = 0.asUInt(32.W)
            for(k <- 0 until 5)
            {
                sum = sum + matA(i*5+k)*io.matB(k*2+j)

            }
            matC(i*2 + j) = sum
        }
    }
  io.valid := true.B
  } .otherwise {
    io.valid := false.B     
  }   

  val outputMat = Vec(matC)
  io.matC := outputMat   

}