20 #include "mlir/IR/BuiltinOps.h"
21 #include "mlir/IR/PatternMatch.h"
22 #include "mlir/Pass/Pass.h"
23 #include "mlir/Pass/PassRegistry.h"
24 #include "mlir/Transforms/DialectConversion.h"
25 #include "mlir/Transforms/GreedyPatternRewriteDriver.h"
27 using namespace circt;
35 template <
typename PhysOpTy>
41 matchAndRewrite(PhysOpTy op, OpAdaptor adaptor,
42 ConversionPatternRewriter &rewriter)
const final {
50 struct ExportTclPass :
public ExportTclBase<ExportTclPass> {
51 void runOnOperation()
override;
55 void ExportTclPass::runOnOperation() {
56 auto top = getOperation();
57 auto *ctxt = &getContext();
58 TclEmitter emitter(top);
62 for (
const std::string &moduleName : tops) {
66 top.emitError(
"Failed to find module '") << moduleName <<
"'";
70 if (failed(emitter.emit(hwmod, tclFile))) {
71 hwmod->emitError(
"failed to emit tcl");
77 ConversionTarget target(*ctxt);
78 target.addIllegalDialect<msft::MSFTDialect>();
79 target.addLegalDialect<hw::HWDialect>();
80 target.addLegalDialect<sv::SVDialect>();
83 patterns.insert<RemovePhysOpLowering<PDPhysLocationOp>>(ctxt);
84 patterns.insert<RemovePhysOpLowering<PDRegPhysLocationOp>>(ctxt);
85 patterns.insert<RemovePhysOpLowering<PDPhysRegionOp>>(ctxt);
86 patterns.insert<RemovePhysOpLowering<InstanceHierarchyOp>>(ctxt);
87 patterns.insert<RemovePhysOpLowering<DynamicInstanceVerbatimAttrOp>>(ctxt);
88 patterns.insert<RemoveOpLowering<DeclPhysicalRegionOp>>(ctxt);
89 if (failed(applyPartialConversion(top, target, std::move(
patterns))))
94 return std::make_unique<ExportTclPass>();
Direction get(bool isOutput)
Returns an output direction if isOutput is true, otherwise returns an input direction.
std::unique_ptr< mlir::Pass > createExportTclPass()
This file defines an intermediate representation for circuits acting as an abstraction for constraint...