私は行列加算のような設計に取り組んでいます。コンパイラは、100 万行以上のコードを生成するのに 4 時間以上かかります。すべての行が "assign....." です。これはコンパイラの非効率なのか、コーディング スタイルが悪いのかわかりません。誰かが素晴らしい代替案を提案できれば!
コードの説明は次のとおりです。入力は要素ごとにランダムな行列の AND になり、.reduce を使用して合計されるため、結果の行列は 140X6 vec になるはずです。それらを一緒に猫にすると、840 ビットの出力が得られます。
(140x840x6ビットのランダム行列であると思われるrndvec。ランダムな値を生成する方法がわからないため、固定の140x6から始めて1つの行を表し、入力を何度もフィードします)
これは私のコードです
import Chisel._
import scala.collection.mutable.HashMap
import util.Random
class LBio(n: Int) extends Bundle {
var myinput = UInt(INPUT,840)
var myoutput = UInt (OUTPUT,840)
}
class Lbi(q: Int,n:Int,m :Int ) extends Module{
def mask(orig: Vec[UInt],maska:UInt,mi:Int)={
val result = Vec.fill(840){UInt(width =6)}
for (i<-0 until 840 ){
result(i) := orig(i)&Fill(6,maska(i)) //every bits of input AND with random vector
}
result
}
val io= new LBio(840)
val rndvec = Vec.fill(840){UInt("h13",6)} //random vector, for now its just replication of 0x13....
val resultvec = Vec.fill(140){UInt(width = 6)}
for (i<-0 until 140){
resultvec(i) := mask(rndvec,io.myinput,m).reduce(_+_) //add the entire row of 6 bits element together with reduce
}
io.myoutput := resultvec.toBits
}
端末レポート:
started inference
finished inference (4)
start width checking
finished width checking
started flattenning
finished flattening (941783)
resolving nodes to the components
finished resolving
started transforms
finished transforms
checking for combinational loops
NO COMBINATIONAL LOOP FOUND
COMPILING class TutorialExamples.Lbi 0 CHILDREN (0,0)
[success] Total time: 33453 s, completed Oct 16, 2013 10:32:10 PM