Матричные операции в долоте

Поддерживает ли Chisel матричные операции, такие как сложение, умножение, транспонирование и т. Д.? Если нет, как лучше всего их реализовать?

А как насчет векторов?


person Matt    schedule 17.01.2017    source источник


Ответы (2)


Chisel не поддерживает матричные операции. Это DSL для написания аппаратных генераторов, реализующих такие операции. Примеры специализированных математических аппаратных генераторов см .: Hwacha: аппаратный векторный модуль и DspTools: набор математических инструментов

person Chick Markley    schedule 07.03.2017

Да, вы можете выполнять матричные операции в 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   

}
person Sajin Sabu    schedule 14.11.2017