FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

FIRRTLに入門する (1. ビルドとVerilog生成テスト実行)

https://raw.githubusercontent.com/freechipsproject/firrtl/master/doc/images/firrtl_logo.svg?sanitize=true

FIRRTLというのはハードウェア記述言語Chiselのバックエンドに相当する部分で、Chisel→FIRRTL→Verilogという段階を取り、FIRRTL→VerilogというのはLLVMで言うバックエンドに相当する部分であると説明にも書いてある。

FIRRTL自体はScalaで記述されており、動作も少しもっさりしているような印象だが、なにより生成されるVerilogファイルがイマイチな気がしている。 なんでそんなVerilog出すの?なんでこの機能ないの?といったものが散見されるので、自分で実装を理解してみることにした。

まずはダウンロードとビルドだが、現時点で安定版リリースの1.2.0を使用することにする。

git clone git@github.com:freechipsproject/firrtl.git
cd firrtl
sbt assembly # コンパイル

コンパイル後にサンプルプログラムとしてRocketCore.firRocketCore.vに変換してみる。

./utils/bin/firrtl -td regress -i regress/RocketCore.fir -o regress/RocketCore.v -X verilog

これでとりあえず実行は終了。RocketCore.vが生成されている。 このRocketCore.firは6000行近くもあるのだが、流してみると8.5秒くらいかかっている。 もう少し小さな回路で確認しながら、どのような挙動になっているのか見てみたいと思う。