Thanks to visit codestin.com
Credit goes to circt.llvm.org

CIRCT

Circuit IR Compilers and Tools

'fsm' Dialect

Types and operations for FSM dialect

This dialect defines the fsm dialect, which is intended to represent finite-state machines.

Operations

fsm.hw_instance (::circt::fsm::HWInstanceOp)

Create a hardware-style instance of a state machine

Syntax:

operation ::= `fsm.hw_instance` $name $machine attr-dict `(` $inputs `)`
              `,` `clock` $clock `,` `reset` $reset `:` functional-type($inputs, $outputs)

fsm.hw_instance represents a hardware-style instance of a state machine, including an instance name and a symbol reference of the machine. The inputs and outputs are correponding to the inputs and outputs of the referenced machine.

Interfaces: InstanceOpInterface

Attributes:

AttributeMLIR TypeDescription
name::mlir::StringAttrstring attribute
machine::mlir::FlatSymbolRefAttrflat symbol reference attribute

Operands:

OperandDescription
inputsvariadic of any type
clockA type for clock-carrying wires
reset1-bit signless integer

Results:

ResultDescription
outputsvariadic of any type

fsm.instance (::circt::fsm::InstanceOp)

Create an instance of a state machine

Syntax:

operation ::= `fsm.instance` $name $machine attr-dict

fsm.instance represents an instance of a state machine, including an instance name and a symbol reference of the machine.

Interfaces: HasCustomSSAName

Attributes:

AttributeMLIR TypeDescription
name::mlir::StringAttrstring attribute
machine::mlir::FlatSymbolRefAttrflat symbol reference attribute

Results:

ResultDescription
instanceAn FSM instance type

fsm.machine (::circt::fsm::MachineOp)

Define a finite-state machine

fsm.machine represents a finite-state machine, including a machine name, the type of machine state, and the types of inputs and outputs. This op also includes a $body region that contains internal variables and states.

Traits: NoTerminator, SymbolTable

Interfaces: ArgAndResultAttrsOpInterface, CallableOpInterface, FunctionOpInterface, ModuleOpInterface, Symbol

Attributes:

AttributeMLIR TypeDescription
sym_name::mlir::StringAttrstring attribute
initialState::mlir::StringAttrstring attribute
function_type::mlir::TypeAttrtype attribute of function type
arg_attrs::mlir::ArrayAttrArray of dictionary attributes
res_attrs::mlir::ArrayAttrArray of dictionary attributes
argNames::mlir::ArrayAttrstring array attribute
resNames::mlir::ArrayAttrstring array attribute

fsm.output (::circt::fsm::OutputOp)

Output values from a state machine

Syntax:

operation ::= `fsm.output` attr-dict ($operands^ `:` qualified(type($operands)))?

“fsm.output” represents the outputs of a machine under a specific state. The types of $operands should be consistent with the output types of the state machine.

Traits: HasParent<StateOp>, ReturnLike, Terminator

Interfaces: RegionBranchTerminatorOpInterface

Operands:

OperandDescription
operandsvariadic of any type

fsm.return (::circt::fsm::ReturnOp)

Return values from a region

Syntax:

operation ::= `fsm.return` attr-dict ($operand^)?

“fsm.return” marks the end of a region of fsm.transition and return values if the parent region is a $guard region.

Traits: HasParent<TransitionOp>, ReturnLike, Terminator

Interfaces: RegionBranchTerminatorOpInterface

Operands:

OperandDescription
operand1-bit signless integer

fsm.state (::circt::fsm::StateOp)

Define a state of a machine

Syntax:

operation ::= `fsm.state` $sym_name attr-dict (`output` $output^)? (`transitions` $transitions^)?

fsm.state represents a state of a state machine. This op includes an $output region with an fsm.output as terminator to define the machine outputs under this state. This op also includes a transitions region that contains all the transitions of this state.

Traits: HasParent<MachineOp>, NoTerminator

Interfaces: Symbol

Attributes:

AttributeMLIR TypeDescription
sym_name::mlir::StringAttrstring attribute

fsm.transition (::circt::fsm::TransitionOp)

Define a transition of a state

Syntax:

operation ::= `fsm.transition` $nextState attr-dict (`guard` $guard^)? (`action` $action^)?

fsm.transition represents a transition of a state with a symbol reference of the next state. This op includes an optional $guard region with an fsm.return as terminator that returns a Boolean value indicating the guard condition of this transition. This op also includes an optional $action region that represents the actions to be executed when this transition is taken.

Traits: HasParent<StateOp>, NoTerminator

Attributes:

AttributeMLIR TypeDescription
nextState::mlir::FlatSymbolRefAttrflat symbol reference attribute

fsm.trigger (::circt::fsm::TriggerOp)

Trigger an instance

Syntax:

operation ::= `fsm.trigger` $instance attr-dict `(` $inputs `)` `:` functional-type($inputs, $outputs)

fsm.trigger triggers a state machine instance. The inputs and outputs are correponding to the inputs and outputs of the referenced machine of the instance.

Operands:

OperandDescription
inputsvariadic of any type
instanceAn FSM instance type

Results:

ResultDescription
outputsvariadic of any type

fsm.update (::circt::fsm::UpdateOp)

Update a variable in a state machine

Syntax:

operation ::= `fsm.update` attr-dict $variable `,` $value `:` qualified(type($value))

fsm.update updates the $variable with the $value. The definition op of $variable should be an fsm.variable. This op should only appear in the action region of a transtion.

Traits: HasParent<TransitionOp>, SameTypeOperands

Operands:

OperandDescription
variableany type
valueany type

fsm.variable (::circt::fsm::VariableOp)

Declare a variable in a state machine

Syntax:

operation ::= `fsm.variable` $name attr-dict `:` qualified(type($result))

fsm.variable represents an internal variable in a state machine with an initialization value.

Traits: FirstAttrDerivedResultType, HasParent<MachineOp>

Interfaces: HasCustomSSAName

Attributes:

AttributeMLIR TypeDescription
initValue::mlir::Attributeany attribute
name::mlir::StringAttrstring attribute

Results:

ResultDescription
resultany type

Types

InstanceType

An FSM instance type

Syntax: !fsm.instance

Represents an FSM instance.

'fsm' Dialect Docs