FIRRTLのLowerType
で使われるExpression
, Statement
の種類について纏めておく。
src/main/scala/firrtl/passes/LowerTypes.scala
src/main/scala/firrtl/ir/IR.scala
特に迷ったのは、WSubIndex
とWSubAccess
の違い。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 |