【问题标题】:Matrix Operations in ChiselChisel 中的矩阵运算
【发布时间】:2017-06-01 23:14:17
【问题描述】:

Chisel 是否支持矩阵运算,例如加法、乘法、转置等?如果没有,实现它们的最佳方法是什么?

向量呢?

【问题讨论】:

    标签: matrix matrix-multiplication transpose chisel


    【解决方案1】:

    Chisel 不支持矩阵运算。它是用于编写实现此类操作的硬件生成器的 DSL。有关专用数学硬件生成器的示例,请参阅:Hwacha: A hardware vector unitDspTools: a set of math tools

    【讨论】:

      【解决方案2】:

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

      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   
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-31
        • 2013-08-13
        相关资源
        最近更新 更多