Vengineerの戯言

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

Chisel Wrapper for SDAccel RTL Flow



XilinxのSDAccelにて、OpenCLではなく、Chiselを使うという作戦?

Chiselのカーネル例、カウンタかな?
引用
package sdaccel_utils

import chisel3._
import chisel3.util.Counter

/**
  * Created by lorenzo on 05/09/17.
  */
class MyKernel extends Module{
  val io = IO(new Bundle{
    val ap_start = Input(UInt(1.W))
    val ap_idle = Input(UInt(1.W))
    val ap_done = Output(UInt(1.W))

  })

  val counter = Counter(30)
  val regFlagStart = Reg(init = false.B)
  val doneReg = Reg(init = false.B)
  val startReg = Reg(init = false.B)
  val idleReg = Reg(init = true.B)

  idleReg := io.ap_idle
  startReg := io.ap_start
  io.ap_done := doneReg



  when(io.ap_start === true.B && regFlagStart === false.B){
    counter.inc()
    regFlagStart := true.B
  }

  when(counter.value > 0.U){
    doneReg := true.B
  }

}

Chiselについては、ScalaとChiselで電子回路をつくる高位合成の話
FPGAマガジンNo.19の中澤さんの記事
プログラミング言語Scalaベースのハードウェア記述言語
  RISC-Vコミュニティで使われる代替HDL“Chisel" 中澤 慧
を参考に。。。