'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 ¶
Vector of optional locations corresponding to bits in a type ¶
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: ¶
Parameter | C++ type | Description |
---|---|---|
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: ¶
Parameter | C++ type | Description |
---|---|---|
primitiveType | PrimitiveTypeAttr | |
x | uint64_t | |
y | uint64_t | |
num | uint64_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: ¶
Parameter | C++ type | Description |
---|---|---|
xMin | uint64_t | |
xMax | uint64_t | |
yMin | uint64_t | |
yMax | uint64_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: ¶
Attribute | MLIR Type | Description |
---|---|---|
sym_name | ::mlir::StringAttr | string attribute |
bounds | ::mlir::ArrayAttr | array 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: ¶
Attribute | MLIR Type | Description |
---|---|---|
sym_name | ::mlir::StringAttr | string attribute |
verilogName | ::mlir::StringAttr | string 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: ¶
Attribute | MLIR Type | Description |
---|---|---|
instanceRef | ::circt::hw::InnerRefAttr | name 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: ¶
Attribute | MLIR Type | Description |
---|---|---|
name | ::mlir::StringAttr | string attribute |
value | ::mlir::StringAttr | string attribute |
subPath | ::mlir::StringAttr | string attribute |
ref | ::mlir::FlatSymbolRefAttr | flat 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: ¶
Attribute | MLIR Type | Description |
---|---|---|
sym_name | ::mlir::StringAttr | string attribute |
metadata | ::mlir::Attribute | any 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: ¶
Attribute | MLIR Type | Description |
---|---|---|
topModuleRef | ::mlir::FlatSymbolRefAttr | flat 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: ¶
Attribute | MLIR Type | Description |
---|---|---|
sym_name | ::mlir::StringAttr | string attribute |
moduleName | ::mlir::FlatSymbolRefAttr | flat symbol reference attribute |
parameters | ::mlir::ArrayAttr | parameter array |
targetDesignPartition | ::mlir::SymbolRefAttr | symbol reference attribute |
Operands: ¶
Operand | Description |
---|---|
inputs | any type |
Results: ¶
Result | Description |
---|---|
«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: ¶
Attribute | MLIR Type | Description |
---|---|---|
argNames | ::mlir::ArrayAttr | string array attribute |
resultNames | ::mlir::ArrayAttr | string array attribute |
parameters | ::mlir::ArrayAttr | parameter array |
verilogName | ::mlir::StringAttr | string 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: ¶
Attribute | MLIR Type | Description |
---|---|---|
argNames | ::mlir::ArrayAttr | string array attribute |
resultNames | ::mlir::ArrayAttr | string array attribute |
parameters | ::mlir::DictionaryAttr | dictionary of named attribute values |
fileName | ::mlir::StringAttr | string attribute |
msft.output
(::circt::msft::OutputOp) ¶
termination operation
Syntax:
operation ::= `msft.output` attr-dict ($operands^ `:` qualified(type($operands)))?
Traits: HasParent
Interfaces: NoSideEffect (MemoryEffectOpInterface)
Effects: MemoryEffects::Effect{}
Operands: ¶
Operand | Description |
---|---|
operands | any 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: ¶
Attribute | MLIR Type | Description |
---|---|---|
loc | ::circt::msft::PhysLocationAttr | Descibes a physical location on a device |
subPath | ::mlir::StringAttr | string attribute |
ref | ::mlir::FlatSymbolRefAttr | flat 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: ¶
Attribute | MLIR Type | Description |
---|---|---|
physRegionRef | ::mlir::FlatSymbolRefAttr | flat symbol reference attribute |
subPath | ::mlir::StringAttr | string attribute |
ref | ::mlir::FlatSymbolRefAttr | flat 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: ¶
Attribute | MLIR Type | Description |
---|---|---|
locs | ::circt::msft::LocationVectorAttr | Vector of optional locations corresponding to bits in a type |
ref | ::mlir::FlatSymbolRefAttr | flat 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: ¶
Operand | Description |
---|---|
output | any 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: ¶
Operand | Description |
---|---|
rowInputs | an ArrayType |
colInputs | an ArrayType |
Results: ¶
Result | Description |
---|---|
peOutputs | an array of arrays |