FIRRTLの抽象度?別を確認する。
object counterMain extends App { var uargs = Array("-X", "middle") //ここをかえる high middle low val FIRRTLString = // (new chisel3.stage.ChiselStage).emitVerilog(new counter(32)) (new chisel3.stage.ChiselStage).emitFirrtl(new counter(32), uargs) }
high-FIRRTL
EmitVerilogをするときに生成されるFIRRTLとくらべて、
skip @[counter.scala 15:27]
が無い
middle-FIRRTL
firrtl/spec.pdf at master · chipsalliance/firrtl · GitHub
https://raw.githubusercontent.com/chipsalliance/firrtl/master/spec/spec.pdf
によると、
The conditional statement is not used.
すでにwhen文はなく、muxになった。
low-FIRRTL
ポート宣言のフィールドがすべて展開されている。
EmitVerilogでlo-FIRRTLを生成したところ、16-17行目が意味ないのでskipに置き換わっていた。
FIRRTLの文法について
FIRRTLを定義しているANTLRの文法ファイルに
firrtl/FIRRTL.g4 at master · chipsalliance/firrtl · GitHub
もっとも気にしていたのはelse whenがFIRRTLに出てくるのかどうかという点で
when: 'when' exp ':' info? suite? ( 'else' ( when | ':' info? suite?) )?;
これは読みやすさのために、else when を可能としているだけで、
出力されるFIRRTLには出てこないようだった。
また読みやすさのために、when-elseの中身が一行だけの時は、
そのブロックを一行にすることもできるらしい。
読みやすい?
The Definitive ANTLR 4 Reference
- 作者:Parr, Terence
- 発売日: 2013/01/29
- メディア: ペーパーバック