FPGA開発日記

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

FIRRTLのFIRノード種類一覧

FIRRTLのLowerTypeで使われるExpression, Statementの種類について纏めておく。

  • src/main/scala/firrtl/passes/LowerTypes.scala
  • src/main/scala/firrtl/ir/IR.scala

github.com

特に迷ったのは、WSubIndexWSubAccessの違い。WSubIndexはインデックスが固定だが、WSubAccessはインデックスが固定ではない。

何故このように違いがあるのかというと、

  • WSubIndexの場合 : signal[0]signal_0に変換される。
  • WSubAcessの場合 : signal[idx]Mux(idx == 0, signal_0, Mux(idx == 1, signal_1, Mux(idx == 2, signal_2, Mux(idx == 3, signal_3))))に変換される。

という違いがある。

  • Expressionの種類
Expression型 パラメータ1 パラメータ2 パラメータ3 パラメータ4 パラメータ5
WRef 標準的な変数 name: String(変数名) tpe:Type(型) kind: Kind flow: Flow(信号の向き)
WSubField 構造体の参照(a.b) expr: Expression (構造体自体の型) name: String (メンバ名) tpe: Type (メンバ名の型) flow: Flow (信号の向き)
WSubIndex 配列アクセス(a[1]) expr: Expression(配列自体の型) value: Int(インデックス(固定値)) tpe: Type(出力の型) flow: Flow(信号の向き)
WSubAccess 配列アクセス(a[b]) expr: Expression(配列自体の型) index: Expression(インデックス) tpe: Type(出力の型) flow: Flow(信号の向き)
WVoid
WInvalid
EmptyExpression
  • Statementの種類
Statements型 パラメータ1 パラメータ2 パラメータ3 パラメータ4 パラメータ5 パラメータ6
DefWire info: Info name: String tpe: Type
DefRegister info: Info name: String tpe: Type clock: Expression reset: Expression init: Expression
DefInstance info: Info name: String module: String
DefMemory info: Info name: String dataType: Type
DefNode info: Info name: String value: Expression
Conditionally info: Info pred: Expression conseq: Statement alt: Statement
Block stmts: Seq[Statement]
PartialConnect info: Info loc: Expression expr: Expression
Connect info: Info loc: Expression expr: Expression
IsInvalid info: Info expr: Expression
Attach info: Info exprs: Seq[Expression]
Stop info: Info `ret: Int clk: Expression en: Expression
Print info: Info `string: StringLit args: Seq[Expression] clk: Expression en: Expression
EmptyStmt
  • Typeの種類
ベースの型 パラメータ1 パラメータ2
GroundType
AggregateType Type
UIntType GroundType width: Width
SIntType GroundType width: Width
FixedType GroundType width: Width point: Width
BundleType AggregateType fields: Seq[Field]
VectorType AggregateType tpe: Type size: Int
ClockType GroundType
ResetType GroundType
AsyncResetType GroundType
AnalogType GroundType width: Width
UnknownType Type