2017-01-17 2 views
0

Chisel은 더하기, 곱하기, 바꾸기 등과 같은 행렬 연산을 지원합니까? 그렇지 않다면, 그것을 구현하는 가장 좋은 방법은 무엇입니까?Chisel의 행렬 연산

벡터는 어떨까요?

답변

0

예, 벡터를 사용하여 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 

}