# CIRCT

Circuit IR Compilers and Tools

# 'msft' Dialect

Microsoft internal support dialect Umbrella dialect for everything needed to support Microsoft development but not thoroughly discussed. Most (if not everything) in this dialect is a candidate for generalization and re-homing.

## Attribute constraint definition ¶

### Descibes a physical location on a device ¶

Annotate a particular entity within an op with the location of the device on an FPGA to which it should mapped. The coordinates in this attribute are absolute locations on the device, so if there are two instances of a module with this annotation incorrect results will be generated. How to solve this is a more general, open problem.

### Describes a rectangle bounding a physical region on a device ¶

Describes a rectangular bound within a device. The lower and upper bounds must be specified for both the X and Y axis. The bounds are inclusive.

## Attribute definition ¶

### LocationVectorAttr ¶

Vector of optional locations corresponding to bits in a type

#### Parameters: ¶

ParameterC++ typeDescription
type::mlir::TypeAttr
locs::llvm::ArrayRef<::circt::msft::PhysLocationAttr>

### PhysLocationAttr ¶

Descibes a physical location on a device

Annotate a particular entity within an op with the location of the device on an FPGA to which it should mapped. The coordinates in this attribute are absolute locations on the device, so if there are two instances of a module with this annotation incorrect results will be generated. How to solve this is a more general, open problem.

#### Parameters: ¶

ParameterC++ typeDescription
primitiveTypePrimitiveTypeAttr
xuint64_t
yuint64_t
numuint64_t

### PhysicalBoundsAttr ¶

Describes a rectangle bounding a physical region on a device

Describes a rectangular bound within a device. The lower and upper bounds must be specified for both the X and Y axis. The bounds are inclusive.

#### Parameters: ¶

ParameterC++ typeDescription
xMinuint64_t
xMaxuint64_t
yMinuint64_t
yMaxuint64_t

## Operation definition ¶

### msft.physical_region (::circt::msft::DeclPhysicalRegionOp) ¶

Syntax:

operation ::= msft.physical_region $sym_name ,$bounds attr-dict


Traits: HasParentmlir::ModuleOp

Interfaces: Symbol

#### Attributes: ¶

AttributeMLIR TypeDescription
sym_name::mlir::StringAttrstring attribute
bounds::mlir::ArrayAttrarray of PhysicalBounds

### msft.partition (::circt::msft::DesignPartitionOp) ¶

A target “module” for moving entities

Syntax:

operation ::= msft.partition $sym_name ,$verilogName attr-dict


Sometimes EDA tools require designs to have a module hierarchy which doesn’t match the logical structure a designer would like to have. “Design partitions” allow the designer to “tag” entities (instances, registers, etc.) with a target design partition. During lowering, CIRCT will modify the hierarchy to move the tagged entities into the design partition module. The target design partition can then be used by subsequent EDA tools.

Traits: HasParentmsft::MSFTModuleOp

Interfaces: Symbol

#### Attributes: ¶

AttributeMLIR TypeDescription
sym_name::mlir::StringAttrstring attribute
verilogName::mlir::StringAttrstring attribute

### msft.instance.dynamic (::circt::msft::DynamicInstanceOp) ¶

A module instance in the instance hierarchy

Syntax:

operation ::= msft.instance.dynamic custom<ImplicitInnerRef>($instanceRef)$body attr-dict


Represents an instance (as in instance in the instance hierarchy) referred to henceforth as a dynamic instance. Specified with a path through the instance hierarchy (which in the future will be replaced with an AppID). Lowers to a hw.globalref but unlike a global ref, does not require all of the ops participating in the globalref to contain a back pointer attribute. Allows users to efficiently add placements to a large number of dynamic instances which happen to map to a small number of static instances by bulk-adding the necessary hw.globalref attributes.

During the lowering, moves the operations in the body to the top level and gives them the symbol of the globalref which was created to replace the dynamic instance.

Traits: HasParent<circt::msft::InstanceHierarchyOp, circt::msft::DynamicInstanceOp>, NoTerminator

#### Attributes: ¶

AttributeMLIR TypeDescription
instanceRef::circt::hw::InnerRefAttrname reference attribute

### msft.instance.verb_attr (::circt::msft::DynamicInstanceVerbatimAttrOp) ¶

Specify an arbitrary attribute attached to a dynamic instance

Syntax:

operation ::= msft.instance.verb_attr ($ref^)? name :$name value : $value (path :$subPath^)? attr-dict


Allows a user to specify a custom attribute name and value which is attached to a dynamic instance.

For Quartus tcl, translates to: set_instance_assignment -name $name$value -to $parent|<instance_path> Interfaces: DynInstDataOpInterface #### Attributes: ¶ AttributeMLIR TypeDescription name::mlir::StringAttrstring attribute value::mlir::StringAttrstring attribute subPath::mlir::StringAttrstring attribute ref::mlir::FlatSymbolRefAttrflat symbol reference attribute ### msft.entity.extern (::circt::msft::EntityExternOp) ¶ Syntax: operation ::= msft.entity.extern$sym_name $metadata attr-dict  Traits: HasParentmlir::ModuleOp Interfaces: Symbol #### Attributes: ¶ AttributeMLIR TypeDescription sym_name::mlir::StringAttrstring attribute metadata::mlir::Attributeany attribute ### msft.instance.hierarchy (::circt::msft::InstanceHierarchyOp) ¶ The root of an instance hierarchy Syntax: operation ::= msft.instance.hierarchy$topModuleRef $body attr-dict  Traits: HasParentmlir::ModuleOp, NoTerminator #### Attributes: ¶ AttributeMLIR TypeDescription topModuleRef::mlir::FlatSymbolRefAttrflat symbol reference attribute ### msft.instance (::circt::msft::InstanceOp) ¶ Instantiate a module Syntax: operation ::= msft.instance$sym_name $moduleName ($inputs ) custom<ParameterList>($parameters) attr-dict : functional-type($inputs, results)


Traits: HasParent<::circt::hw::HWModuleOp, MSFTModuleOp>

Interfaces: OpAsmOpInterface, Symbol, SymbolUserOpInterface

#### Attributes: ¶

AttributeMLIR TypeDescription
sym_name::mlir::StringAttrstring attribute
moduleName::mlir::FlatSymbolRefAttrflat symbol reference attribute
parameters::mlir::ArrayAttrparameter array
targetDesignPartition::mlir::SymbolRefAttrsymbol reference attribute

#### Operands: ¶

OperandDescription
inputsany type

#### Results: ¶

ResultDescription
«unnamed»any type

### msft.module.extern (::circt::msft::MSFTModuleExternOp) ¶

MSFT external Module

Identical to hw.module.extern, and trivially lowers to that. This op exists so that we can use msft.instance to refer to both msft.module and msft.module.extern, rather than mixing hw.instance with msft.instance.

Traits: HasParentmlir::ModuleOp

Interfaces: Symbol

#### Attributes: ¶

AttributeMLIR TypeDescription
argNames::mlir::ArrayAttrstring array attribute
resultNames::mlir::ArrayAttrstring array attribute
parameters::mlir::ArrayAttrparameter array
verilogName::mlir::StringAttrstring attribute

### msft.module (::circt::msft::MSFTModuleOp) ¶

MSFT HW Module

A lot like hw.module, but with a few differences:

• Can exist without a body. The body is filled in by a generator post op creation.
• Provides methods for mutation.

Traits: HasParentmlir::ModuleOp, IsolatedFromAbove, SingleBlockImplicitTerminator

Interfaces: FunctionOpInterface, OpAsmOpInterface, RegionKindInterface, Symbol

#### Attributes: ¶

AttributeMLIR TypeDescription
argNames::mlir::ArrayAttrstring array attribute
resultNames::mlir::ArrayAttrstring array attribute
parameters::mlir::DictionaryAttrdictionary of named attribute values
fileName::mlir::StringAttrstring attribute

### msft.output (::circt::msft::OutputOp) ¶

termination operation

Syntax:

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


Traits: HasParent, ReturnLike, Terminator

Interfaces: NoSideEffect (MemoryEffectOpInterface)

Effects: MemoryEffects::Effect{}

#### Operands: ¶

OperandDescription
operandsany type

### msft.pd.location (::circt::msft::PDPhysLocationOp) ¶

Specify a location for an instance

Syntax:

operation ::= msft.pd.location ($ref^)? custom<PhysLoc>($loc) (path : $subPath^)? attr-dict  Used to specify a specific location on an FPGA to place a dynamic instance. Supports specifying the location of a subpath for extern modules and device primitives. Intended to live as a child of instance.dynamic initially without the ref field. The dynamic instance lowering will fill in ref with the symol of the hw.globalref op corresponding to the lowered dynamic instance. Interfaces: DynInstDataOpInterface #### Attributes: ¶ AttributeMLIR TypeDescription loc::circt::msft::PhysLocationAttrDescibes a physical location on a device subPath::mlir::StringAttrstring attribute ref::mlir::FlatSymbolRefAttrflat symbol reference attribute ### msft.pd.physregion (::circt::msft::PDPhysRegionOp) ¶ Specify a physical region for an instance Syntax: operation ::= msft.pd.physregion ($ref^)? $physRegionRef (path :$subPath^)? attr-dict


Annotate a particular entity within an op with the region of the devices on an FPGA to which it should mapped. The physRegionRef must refer to a DeclPhysicalRegion operation.

Interfaces: DynInstDataOpInterface

#### Attributes: ¶

AttributeMLIR TypeDescription
physRegionRef::mlir::FlatSymbolRefAttrflat symbol reference attribute
subPath::mlir::StringAttrstring attribute
ref::mlir::FlatSymbolRefAttrflat symbol reference attribute

### msft.pd.reg_location (::circt::msft::PDRegPhysLocationOp) ¶

Specify register locations

Syntax:

operation ::= msft.pd.reg_location (ref $ref^)? custom<ListOptionalRegLocList>($locs) attr-dict


A version of “PDPhysLocationOp” specialized for registers, which have one location per bit.

Interfaces: DynInstDataOpInterface

#### Attributes: ¶

AttributeMLIR TypeDescription
locs::circt::msft::LocationVectorAttrVector of optional locations corresponding to bits in a type
ref::mlir::FlatSymbolRefAttrflat symbol reference attribute

### msft.pe.output (::circt::msft::PEOutputOp) ¶

Set the outputs from a PE block

Syntax:

operation ::= msft.pe.output $output attr-dict : type($output)


Traits: Terminator

#### Operands: ¶

OperandDescription
outputany type

### msft.systolic.array (::circt::msft::SystolicArrayOp) ¶

Model of a row/column broadcast systolic array

Note: the PE region is NOT a graph region. This was intentional since systolic arrays are entirely feed-forward.

Traits: SingleBlockImplicitTerminator

#### Operands: ¶

OperandDescription
rowInputsan ArrayType
colInputsan ArrayType

#### Results: ¶

ResultDescription
peOutputsan array of arrays