CIRCT 23.0.0git
Loading...
Searching...
No Matches
SynthesisPipeline.h
Go to the documentation of this file.
1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file defines the default synthesis pipeline.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef CIRCT_DIALECT_SYNTH_TRANSFORMS_SYNTHESISPIPELINE_H
14#define CIRCT_DIALECT_SYNTH_TRANSFORMS_SYNTHESISPIPELINE_H
15
17#include "mlir/Pass/PassManager.h"
18#include "mlir/Pass/PassOptions.h"
19#include <string>
20#include <vector>
21
22//===----------------------------------------------------------------------===//
23// Pipeline Options
24//===----------------------------------------------------------------------===//
25namespace circt {
26namespace synth {
27
28/// Options for the aig lowering pipeline.
30 : public mlir::PassPipelineOptions<CombLoweringPipelineOptions> {
31 PassOptions::Option<bool> disableDatapath{
32 *this, "disable-datapath",
33 llvm::cl::desc("Disable datapath optimization passes"),
34 llvm::cl::init(false)};
35 PassOptions::Option<bool> timingAware{
36 *this, "timing-aware",
37 llvm::cl::desc("Lower operators in a timing-aware fashion"),
38 llvm::cl::init(false)};
39 PassOptions::Option<OptimizationStrategy> synthesisStrategy{
40 *this, "synthesis-strategy", llvm::cl::desc("Synthesis strategy to use"),
41 llvm::cl::values(
42 clEnumValN(OptimizationStrategyArea, "area", "Optimize for area"),
43 clEnumValN(OptimizationStrategyTiming, "timing",
44 "Optimize for timing")),
45 llvm::cl::init(OptimizationStrategyTiming)};
46};
47
48/// Options for the synth optimization pipeline.
50 : public mlir::PassPipelineOptions<SynthOptimizationPipelineOptions> {
51 PassOptions::ListOption<std::string> abcCommands{
52 *this, "abc-commands", llvm::cl::desc("ABC passes to run")};
53
54 PassOptions::Option<std::string> abcPath{
55 *this, "abc-path", llvm::cl::desc("Path to ABC"), llvm::cl::init("abc")};
56
57 PassOptions::Option<bool> ignoreAbcFailures{
58 *this, "ignore-abc-failures",
59 llvm::cl::desc("Continue on ABC failure instead of aborting"),
60 llvm::cl::init(false)};
61
62 PassOptions::Option<bool> disableWordToBits{
63 *this, "disable-word-to-bits",
64 llvm::cl::desc("Disable LowerWordToBits pass"), llvm::cl::init(false)};
65
66 PassOptions::Option<bool> disableSOPBalancing{
67 *this, "disable-sop-balancing",
68 llvm::cl::desc("Disable SOPBalancing pass"), llvm::cl::init(true)};
69
70 PassOptions::Option<bool> disableFunctionalReduction{
71 *this, "disable-functional-reduction",
72 llvm::cl::desc("Disable FunctionalReduction pass"),
73 llvm::cl::init(false)};
74
75 PassOptions::Option<int64_t> functionalReductionConflictLimit{
76 *this, "functional-reduction-conflict-limit",
77 llvm::cl::desc("Per-SAT-call conflict budget for FunctionalReduction. "
78 "-1 disables the limit."),
79 llvm::cl::init(100)};
80
81 PassOptions::Option<bool> timingAware{
82 *this, "timing-aware",
83 llvm::cl::desc("Lower operators in a timing-aware fashion"),
84 llvm::cl::init(false)};
85};
86
87//===----------------------------------------------------------------------===//
88// Pipeline Functions
89//===----------------------------------------------------------------------===//
90
91/// Populate the synthesis pipelines.
92void buildCombLoweringPipeline(mlir::OpPassManager &pm,
93 const CombLoweringPipelineOptions &options);
95 mlir::OpPassManager &pm, const SynthOptimizationPipelineOptions &options);
96
97/// Register the synthesis pipelines.
99
100} // namespace synth
101} // namespace circt
102
103#endif // CIRCT_DIALECT_SYNTH_TRANSFORMS_SYNTHESISPIPELINE_H
@ OptimizationStrategyArea
Optimize for minimal area.
Definition SynthPasses.h:25
@ OptimizationStrategyTiming
Optimize for minimal critical path delay.
Definition SynthPasses.h:26
void buildSynthOptimizationPipeline(mlir::OpPassManager &pm, const SynthOptimizationPipelineOptions &options)
void buildCombLoweringPipeline(mlir::OpPassManager &pm, const CombLoweringPipelineOptions &options)
Populate the synthesis pipelines.
void registerSynthesisPipeline()
Register the synthesis pipelines.
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
Definition synth.py:1
Options for the aig lowering pipeline.
PassOptions::Option< bool > disableDatapath
PassOptions::Option< OptimizationStrategy > synthesisStrategy
Options for the synth optimization pipeline.
PassOptions::ListOption< std::string > abcCommands
PassOptions::Option< std::string > abcPath
PassOptions::Option< bool > disableFunctionalReduction
PassOptions::Option< int64_t > functionalReductionConflictLimit