Vengineerの妄想

人生を妄想しています。

Chisel



Chiselは、UC Berkeleyで開発されたオープンソースのhardware construction languageです。
descriptionではなく、constructionというところがポイントです。

Chiselは、Scala言語ベースというか、Scalaで記述したライブラリみたいなもの。
あー、C++言語で記述されているSystemCみたいな感じ。

Chiselは、C++ベースののサイクル精度のシミュレータを生成します。
また、Verilog HDLも生成します。

以下のコードは、githubの説明にあるものです。
$ cat Hello.scala
import Chisel._

class HelloModule extends Module {
  val io = new Bundle {}
  printf("Hello World!\n")
}

class HelloModuleTests(c: HelloModule) extends Tester(c) {
  step(1)
}

object hello {
  def main(args: Array[String]): Unit = {
    chiselMainTest(Array[String]("--backend", "c", "--compile", "--test", "--genHarness"),
       () => Module(new HelloModule())){c => new HelloModuleTests(c)}
  }
}

Moduleを継承したHelloModuleを定義しています。
HelloModuleTestsは、Testerを継承して、HelloModuleをテストするためのコードです。
object helloの中にあるmainがプログラムの実行部分で、HelloModuleをCコードとして生成し、テストするようになっているようです。