Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

Chisel2 で PYNQ のアクセラレータ


Jupyter notebook で QNNのお兄さん、

Rosettaなるものも公開していますね。

XilinxのPYNQ用に、Chisel2にてアクセラレータを開発するっていう感じに。

メイン部は、こんな感じ

引用
  def main(args: Array[String]): Unit = {
    val outDir = args(0)
    val drvSrcDir = args(1)
    // instantiate the wrapper accelerator
    val myModule = Module(new PYNQWrapper(Settings.myInstFxn))
    // generate the register driver
    myModule.generateRegDriver(outDir)
    // copy additional driver files
    fileCopyBulk(drvSrcDir, outDir, myModule.platformDriverFiles)
  }

PYNQWrapperがアクセラレータのようですね。。。

メイン部は、こんな感じ
引用
package rosetta

import Chisel._
import fpgatidbits.PlatformWrapper._

// test for register reads and writes: add two 64-bit values
class TestRegOps(p: PlatformWrapperParams) extends GenericAccelerator(p) {
  val numMemPorts = 0
  val io = new GenericAcceleratorIF(numMemPorts, p) {
    val op = Vec.fill(2) {UInt(INPUT, width = 64)}
    val sum = UInt(OUTPUT, width = 64)
    val cc = UInt(OUTPUT, width = 32)
  }
  io.signature := makeDefaultSignature()
  io.sum := io.op(0) + io.op(1)

  val regCC = Reg(init = UInt(0, 32))
  regCC := regCC + UInt(1)

  io.cc := regCC
}

fpgatidbits


が必要。。。。

fpgatidbitsもあったよ。ドキュメントもあったよ。

ソフトウエアは、SDSoCベースのよう。。。

もともと(fpga-tidbits)は、ZedBoardだったのね。。。