CIRCT 23.0.0git
Loading...
Searching...
No Matches
Firtool.cpp
Go to the documentation of this file.
1//===- Firtool.cpp - C Interface to Firtool-lib ---------------------------===//
2//
3// Implements a C Interface for Firtool-lib.
4//
5//===----------------------------------------------------------------------===//
6
9#include "mlir/CAPI/IR.h"
10#include "mlir/CAPI/Pass.h"
11#include "mlir/CAPI/Support.h"
12#include "mlir/CAPI/Utils.h"
13#include "llvm/Support/CommandLine.h"
14#include "llvm/Support/raw_ostream.h"
15
16using namespace circt;
17
18DEFINE_C_API_PTR_METHODS(CirctFirtoolFirtoolOptions,
20
21//===----------------------------------------------------------------------===//
22// Option API.
23//===----------------------------------------------------------------------===//
24
25CirctFirtoolFirtoolOptions circtFirtoolOptionsCreateDefault() {
26 auto *options = new firtool::FirtoolOptions();
27 return wrap(options);
28}
29
30void circtFirtoolOptionsDestroy(CirctFirtoolFirtoolOptions options) {
31 delete unwrap(options);
32}
33
34void circtFirtoolOptionsSetOutputFilename(CirctFirtoolFirtoolOptions options,
35 MlirStringRef filename) {
36 unwrap(options)->setOutputFilename(unwrap(filename));
37}
38
40 CirctFirtoolFirtoolOptions options, bool disable) {
41 unwrap(options)->setDisableUnknownAnnotations(disable);
42}
43
45 CirctFirtoolFirtoolOptions options, bool value) {
46 unwrap(options)->setDisableAnnotationsClassless(value);
47}
48
50 CirctFirtoolFirtoolOptions options, bool value) {
51 unwrap(options)->setLowerAnnotationsNoRefTypePorts(value);
52}
53
55 CirctFirtoolFirtoolOptions options,
58
59 switch (value) {
61 converted = firrtl::PreserveAggregate::PreserveMode::None;
62 break;
64 converted = firrtl::PreserveAggregate::PreserveMode::OneDimVec;
65 break;
67 converted = firrtl::PreserveAggregate::PreserveMode::Vec;
68 break;
70 converted = firrtl::PreserveAggregate::PreserveMode::All;
71 break;
72 }
73
74 unwrap(options)->setPreserveAggregate(converted);
75}
76
78 CirctFirtoolFirtoolOptions options, CirctFirtoolPreserveValuesMode value) {
80
81 switch (value) {
83 converted = firrtl::PreserveValues::PreserveMode::Strip;
84 break;
86 converted = firrtl::PreserveValues::PreserveMode::None;
87 break;
89 converted = firrtl::PreserveValues::PreserveMode::Named;
90 break;
92 converted = firrtl::PreserveValues::PreserveMode::All;
93 break;
94 }
95
96 unwrap(options)->setPreserveValues(converted);
97}
98
99void circtFirtoolOptionsSetEnableDebugInfo(CirctFirtoolFirtoolOptions options,
100 bool value) {
101 unwrap(options)->setEnableDebugInfo(value);
102}
103
104void circtFirtoolOptionsSetBuildMode(CirctFirtoolFirtoolOptions options,
105 CirctFirtoolBuildMode value) {
107
108 switch (value) {
110 converted = firtool::FirtoolOptions::BuildMode::BuildModeDefault;
111 break;
113 converted = firtool::FirtoolOptions::BuildMode::BuildModeDebug;
114 break;
116 converted = firtool::FirtoolOptions::BuildMode::BuildModeRelease;
117 break;
118 }
119
120 unwrap(options)->setBuildMode(converted);
121}
122
123void circtFirtoolOptionsSetDisableLayerSink(CirctFirtoolFirtoolOptions options,
124 bool value) {
125 unwrap(options)->setDisableLayerSink(value);
126}
127
129 CirctFirtoolFirtoolOptions options, bool value) {
130 unwrap(options)->setDisableOptimization(value);
131}
132
133void circtFirtoolOptionsSetVbToBv(CirctFirtoolFirtoolOptions options,
134 bool value) {
135 unwrap(options)->setVbToBV(value);
136}
137
138void circtFirtoolOptionsSetNoDedup(CirctFirtoolFirtoolOptions options,
139 bool value) {
140 unwrap(options)->setNoDedup(value);
141}
142
143void circtFirtoolOptionsSetCompanionMode(CirctFirtoolFirtoolOptions options,
145 firrtl::CompanionMode converted;
146
147 switch (value) {
149 converted = firrtl::CompanionMode::Bind;
150 break;
152 converted = firrtl::CompanionMode::Instantiate;
153 break;
155 converted = firrtl::CompanionMode::Drop;
156 break;
157 }
158
159 unwrap(options)->setCompanionMode(converted);
160}
161
162void circtFirtoolOptionsSetNoViews(CirctFirtoolFirtoolOptions options,
163 bool value) {
164 unwrap(options)->setNoViews(value);
165}
166
168 CirctFirtoolFirtoolOptions options, bool value) {
169 unwrap(options)->setDisableAggressiveMergeConnections(value);
170}
171
172void circtFirtoolOptionsSetLowerMemories(CirctFirtoolFirtoolOptions options,
173 bool value) {
174 unwrap(options)->setLowerMemories(value);
175}
176
177void circtFirtoolOptionsSetBlackBoxRootPath(CirctFirtoolFirtoolOptions options,
178 MlirStringRef value) {
179 unwrap(options)->setBlackBoxRootPath(unwrap(value));
180}
181
182void circtFirtoolOptionsSetReplSeqMem(CirctFirtoolFirtoolOptions options,
183 bool value) {
184 unwrap(options)->setReplSeqMem(value);
185}
186
187void circtFirtoolOptionsSetReplSeqMemFile(CirctFirtoolFirtoolOptions options,
188 MlirStringRef value) {
189 unwrap(options)->setReplSeqMemFile(unwrap(value));
190}
191
193 CirctFirtoolFirtoolOptions options, bool value) {
194 unwrap(options)->setIgnoreReadEnableMem(value);
195}
196
197void circtFirtoolOptionsSetDisableRandom(CirctFirtoolFirtoolOptions options,
199 auto *opts = unwrap(options);
200 switch (value) {
202 break;
204 opts->mergeDisableRandom(firtool::FirtoolOptions::RandomKind::Mem);
205 break;
207 opts->mergeDisableRandom(firtool::FirtoolOptions::RandomKind::Reg);
208 break;
210 opts->mergeDisableRandom(firtool::FirtoolOptions::RandomKind::All);
211 break;
212 }
213}
214
216 CirctFirtoolFirtoolOptions options, MlirStringRef value) {
217 unwrap(options)->setOutputAnnotationFilename(unwrap(value));
218}
219
221 CirctFirtoolFirtoolOptions options, bool value) {
222 unwrap(options)->setEnableAnnotationWarning(value);
223}
224
225void circtFirtoolOptionsSetLowerToCore(CirctFirtoolFirtoolOptions options,
226 bool value) {
227 unwrap(options)->setLowerToCore(value);
228}
229
230void circtFirtoolOptionsSetAddMuxPragmas(CirctFirtoolFirtoolOptions options,
231 bool value) {
232 unwrap(options)->setAddMuxPragmas(value);
233}
234
236 CirctFirtoolFirtoolOptions options, firrtl::VerificationFlavor value) {
237 unwrap(options)->setVerificationFlavor(value);
238}
239
241 CirctFirtoolFirtoolOptions options, bool value) {
242 unwrap(options)->setEmitSeparateAlwaysBlocks(value);
243}
244
246 CirctFirtoolFirtoolOptions options, bool value) {
247 unwrap(options)->setAddVivadoRAMAddressConflictSynthesisBugWorkaround(value);
248}
249
250void circtFirtoolOptionsSetCkgModuleName(CirctFirtoolFirtoolOptions options,
251 MlirStringRef value) {
252 unwrap(options)->setCkgModuleName(unwrap(value));
253}
254
255void circtFirtoolOptionsSetCkgInputName(CirctFirtoolFirtoolOptions options,
256 MlirStringRef value) {
257 unwrap(options)->setCkgInputName(unwrap(value));
258}
259
260void circtFirtoolOptionsSetCkgOutputName(CirctFirtoolFirtoolOptions options,
261 MlirStringRef value) {
262 unwrap(options)->setCkgOutputName(unwrap(value));
263}
264
265void circtFirtoolOptionsSetCkgEnableName(CirctFirtoolFirtoolOptions options,
266 MlirStringRef value) {
267 unwrap(options)->setCkgEnableName(unwrap(value));
268}
269
270void circtFirtoolOptionsSetCkgTestEnableName(CirctFirtoolFirtoolOptions options,
271 MlirStringRef value) {
272 unwrap(options)->setCkgTestEnableName(unwrap(value));
273}
274
276 CirctFirtoolFirtoolOptions options, bool value) {
277 unwrap(options)->setExportModuleHierarchy(value);
278}
279
280void circtFirtoolOptionsSetStripFirDebugInfo(CirctFirtoolFirtoolOptions options,
281 bool value) {
282 unwrap(options)->setStripFirDebugInfo(value);
283}
284
285void circtFirtoolOptionsSetStripDebugInfo(CirctFirtoolFirtoolOptions options,
286 bool value) {
287 unwrap(options)->setStripDebugInfo(value);
288}
289
291 CirctFirtoolFirtoolOptions options, bool value) {
292
293 unwrap(options)->setDisableCSEinClasses(value);
294}
295
297 CirctFirtoolFirtoolOptions options, bool value) {
298 unwrap(options)->setSelectDefaultInstanceChoice(value);
299}
300
301void circtFirtoolOptionsSetDomainMode(CirctFirtoolFirtoolOptions options,
304 switch (value) {
306 converted = firtool::FirtoolOptions::DomainMode::Disable;
307 break;
309 converted = firtool::FirtoolOptions::DomainMode::Check;
310 break;
312 converted = firtool::FirtoolOptions::DomainMode::Infer;
313 break;
315 converted = firtool::FirtoolOptions::DomainMode::InferAll;
316 break;
317 }
318 unwrap(options)->setDomainMode(converted);
319}
320
321//===----------------------------------------------------------------------===//
322// Populate API.
323//===----------------------------------------------------------------------===//
324
325MlirLogicalResult
327 CirctFirtoolFirtoolOptions options) {
328 return wrap(
330}
331
332MlirLogicalResult
334 CirctFirtoolFirtoolOptions options) {
335 return wrap(
337}
338
339MlirLogicalResult
341 CirctFirtoolFirtoolOptions options,
342 MlirStringRef inputFilename) {
343 return wrap(firtool::populateLowFIRRTLToHW(*unwrap(pm), *unwrap(options),
344 unwrap(inputFilename)));
345}
346
347MlirLogicalResult
348circtFirtoolPopulateHWToSV(MlirPassManager pm,
349 CirctFirtoolFirtoolOptions options) {
350 return wrap(firtool::populateHWToSV(*unwrap(pm), *unwrap(options)));
351}
352
353MlirLogicalResult
355 CirctFirtoolFirtoolOptions options,
356 MlirStringCallback callback, void *userData) {
357 auto stream =
358 std::make_unique<mlir::detail::CallbackOstream>(callback, userData);
359 return wrap(firtool::populateExportVerilog(*unwrap(pm), *unwrap(options),
360 std::move(stream)));
361}
362
363MlirLogicalResult
365 CirctFirtoolFirtoolOptions options,
366 MlirStringRef directory) {
368 unwrap(directory)));
369}
370
371MlirLogicalResult
373 CirctFirtoolFirtoolOptions options) {
374 return wrap(firtool::populateFinalizeIR(*unwrap(pm), *unwrap(options)));
375}
376
377MlirLogicalResult
379 CirctFirtoolFirtoolOptions options,
380 MlirStringCallback callback, void *userData) {
381 auto stream =
382 std::make_unique<mlir::detail::CallbackOstream>(callback, userData);
383 return wrap(firtool::populateHWToBTOR2(*unwrap(pm), *unwrap(options),
384 *std::move(stream)));
385}
void circtFirtoolOptionsSetDisableAggressiveMergeConnections(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:167
void circtFirtoolOptionsSetStripDebugInfo(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:285
void circtFirtoolOptionsSetEmitSeparateAlwaysBlocks(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:240
void circtFirtoolOptionsSetDisableUnknownAnnotations(CirctFirtoolFirtoolOptions options, bool disable)
Definition Firtool.cpp:39
void circtFirtoolOptionsSetDisableLayerSink(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:123
void circtFirtoolOptionsSetExportModuleHierarchy(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:275
void circtFirtoolOptionsSetCkgOutputName(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:260
void circtFirtoolOptionsSetCkgTestEnableName(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:270
MlirLogicalResult circtFirtoolpopulateHWToBTOR2(MlirPassManager pm, CirctFirtoolFirtoolOptions options, MlirStringCallback callback, void *userData)
Definition Firtool.cpp:378
void circtFirtoolOptionsSetVerificationFlavor(CirctFirtoolFirtoolOptions options, firrtl::VerificationFlavor value)
Definition Firtool.cpp:235
void circtFirtoolOptionsSetCkgEnableName(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:265
void circtFirtoolOptionsSetPreserveAggregate(CirctFirtoolFirtoolOptions options, CirctFirtoolPreserveAggregateMode value)
Definition Firtool.cpp:54
void circtFirtoolOptionsSetDisableOptimization(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:128
void circtFirtoolOptionsSetLowerAnnotationsNoRefTypePorts(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:49
void circtFirtoolOptionsSetIgnoreReadEnableMem(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:192
MlirLogicalResult circtFirtoolPopulateCHIRRTLToLowFIRRTL(MlirPassManager pm, CirctFirtoolFirtoolOptions options)
Definition Firtool.cpp:333
void circtFirtoolOptionsSetOutputFilename(CirctFirtoolFirtoolOptions options, MlirStringRef filename)
Definition Firtool.cpp:34
void circtFirtoolOptionsSetSelectDefaultInstanceChoice(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:296
void circtFirtoolOptionsSetReplSeqMemFile(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:187
void circtFirtoolOptionsSetDisableAnnotationsClassless(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:44
void circtFirtoolOptionsDestroy(CirctFirtoolFirtoolOptions options)
Definition Firtool.cpp:30
void circtFirtoolOptionsSetVbToBv(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:133
void circtFirtoolOptionsSetOutputAnnotationFilename(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:215
void circtFirtoolOptionsSetNoDedup(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:138
void circtFirtoolOptionsSetBlackBoxRootPath(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:177
void circtFirtoolOptionsSetCkgModuleName(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:250
void circtFirtoolOptionsSetDisableRandom(CirctFirtoolFirtoolOptions options, CirctFirtoolRandomKind value)
Definition Firtool.cpp:197
MlirLogicalResult circtFirtoolPopulateFinalizeIR(MlirPassManager pm, CirctFirtoolFirtoolOptions options)
Definition Firtool.cpp:372
void circtFirtoolOptionsSetEnableAnnotationWarning(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:220
void circtFirtoolOptionsSetReplSeqMem(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:182
void circtFirtoolOptionsSetNoViews(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:162
void circtFirtoolOptionsSetEnableDebugInfo(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:99
void circtFirtoolOptionsSetCkgInputName(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:255
void circtFirtoolOptionsSetBuildMode(CirctFirtoolFirtoolOptions options, CirctFirtoolBuildMode value)
Definition Firtool.cpp:104
void circtFirtoolOptionsSetDomainMode(CirctFirtoolFirtoolOptions options, CirctFirtoolDomainMode value)
Definition Firtool.cpp:301
MlirLogicalResult circtFirtoolPopulateHWToSV(MlirPassManager pm, CirctFirtoolFirtoolOptions options)
Definition Firtool.cpp:348
void circtFirtoolOptionsSetLowerMemories(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:172
MlirLogicalResult circtFirtoolPopulateLowFIRRTLToHW(MlirPassManager pm, CirctFirtoolFirtoolOptions options, MlirStringRef inputFilename)
Definition Firtool.cpp:340
void circtFirtoolOptionsSetAddVivadoRAMAddressConflictSynthesisBugWorkaround(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:245
MlirLogicalResult circtFirtoolPopulateExportVerilog(MlirPassManager pm, CirctFirtoolFirtoolOptions options, MlirStringCallback callback, void *userData)
Definition Firtool.cpp:354
void circtFirtoolOptionsSetStripFirDebugInfo(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:280
void circtFirtoolOptionsSetDisableCSEinClasses(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:290
DEFINE_C_API_PTR_METHODS(CirctFirtoolFirtoolOptions, circt::firtool::FirtoolOptions) CirctFirtoolFirtoolOptions circtFirtoolOptionsCreateDefault()
Definition Firtool.cpp:18
void circtFirtoolOptionsSetAddMuxPragmas(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:230
void circtFirtoolOptionsSetLowerToCore(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:225
void circtFirtoolOptionsSetCompanionMode(CirctFirtoolFirtoolOptions options, CirctFirtoolCompanionMode value)
Definition Firtool.cpp:143
MlirLogicalResult circtFirtoolPopulatePreprocessTransforms(MlirPassManager pm, CirctFirtoolFirtoolOptions options)
Definition Firtool.cpp:326
MlirLogicalResult circtFirtoolPopulateExportSplitVerilog(MlirPassManager pm, CirctFirtoolFirtoolOptions options, MlirStringRef directory)
Definition Firtool.cpp:364
void circtFirtoolOptionsSetPreserveValues(CirctFirtoolFirtoolOptions options, CirctFirtoolPreserveValuesMode value)
Definition Firtool.cpp:77
return wrap(CMemoryType::get(unwrap(ctx), baseType, numElements))
static EvaluatorValuePtr unwrap(OMEvaluatorValue c)
Definition OM.cpp:111
CirctFirtoolDomainMode
Definition Firtool.h:72
@ CIRCT_FIRTOOL_DOMAIN_MODE_INFER_ALL
Definition Firtool.h:76
@ CIRCT_FIRTOOL_DOMAIN_MODE_CHECK
Definition Firtool.h:74
@ CIRCT_FIRTOOL_DOMAIN_MODE_INFER
Definition Firtool.h:75
@ CIRCT_FIRTOOL_DOMAIN_MODE_DISABLE
Definition Firtool.h:73
CirctFirtoolCompanionMode
Definition Firtool.h:42
@ CIRCT_FIRTOOL_COMPANION_MODE_BIND
Definition Firtool.h:43
@ CIRCT_FIRTOOL_COMPANION_MODE_DROP
Definition Firtool.h:45
@ CIRCT_FIRTOOL_COMPANION_MODE_INSTANTIATE
Definition Firtool.h:44
CirctFirtoolRandomKind
Definition Firtool.h:56
@ CIRCT_FIRTOOL_RANDOM_KIND_MEM
Definition Firtool.h:58
@ CIRCT_FIRTOOL_RANDOM_KIND_NONE
Definition Firtool.h:57
@ CIRCT_FIRTOOL_RANDOM_KIND_REG
Definition Firtool.h:59
@ CIRCT_FIRTOOL_RANDOM_KIND_ALL
Definition Firtool.h:60
MLIR_CAPI_EXPORTED CirctFirtoolFirtoolOptions circtFirtoolOptionsCreateDefault(void)
CirctFirtoolPreserveAggregateMode
Definition Firtool.h:26
@ CIRCT_FIRTOOL_PRESERVE_AGGREGATE_MODE_NONE
Definition Firtool.h:27
@ CIRCT_FIRTOOL_PRESERVE_AGGREGATE_MODE_ALL
Definition Firtool.h:30
@ CIRCT_FIRTOOL_PRESERVE_AGGREGATE_MODE_VEC
Definition Firtool.h:29
@ CIRCT_FIRTOOL_PRESERVE_AGGREGATE_MODE_ONE_DIM_VEC
Definition Firtool.h:28
CirctFirtoolBuildMode
Definition Firtool.h:49
@ CIRCT_FIRTOOL_BUILD_MODE_RELEASE
Definition Firtool.h:52
@ CIRCT_FIRTOOL_BUILD_MODE_DEBUG
Definition Firtool.h:51
@ CIRCT_FIRTOOL_BUILD_MODE_DEFAULT
Definition Firtool.h:50
CirctFirtoolPreserveValuesMode
Definition Firtool.h:34
@ CIRCT_FIRTOOL_PRESERVE_VALUES_MODE_STRIP
Definition Firtool.h:35
@ CIRCT_FIRTOOL_PRESERVE_VALUES_MODE_ALL
Definition Firtool.h:38
@ CIRCT_FIRTOOL_PRESERVE_VALUES_MODE_NAMED
Definition Firtool.h:37
@ CIRCT_FIRTOOL_PRESERVE_VALUES_MODE_NONE
Definition Firtool.h:36
Set of options used to control the behavior of the firtool pipeline.
Definition Firtool.h:32
LogicalResult populateLowFIRRTLToHW(mlir::PassManager &pm, const FirtoolOptions &opt, StringRef inputFilename)
Definition Firtool.cpp:236
LogicalResult populateHWToBTOR2(mlir::PassManager &pm, const FirtoolOptions &opt, llvm::raw_ostream &os)
BTOR2 emission pipeline, triggered with --btor2 flag.
Definition Firtool.cpp:453
LogicalResult populateExportSplitVerilog(mlir::PassManager &pm, const FirtoolOptions &opt, llvm::StringRef directory)
Definition Firtool.cpp:428
LogicalResult populateHWToSV(mlir::PassManager &pm, const FirtoolOptions &opt)
Definition Firtool.cpp:325
LogicalResult populateExportVerilog(mlir::PassManager &pm, const FirtoolOptions &opt, std::unique_ptr< llvm::raw_ostream > os)
Definition Firtool.cpp:409
LogicalResult populatePreprocessTransforms(mlir::PassManager &pm, const FirtoolOptions &opt)
Definition Firtool.cpp:27
LogicalResult populateFinalizeIR(mlir::PassManager &pm, const FirtoolOptions &opt)
Definition Firtool.cpp:438
LogicalResult populateCHIRRTLToLowFIRRTL(mlir::PassManager &pm, const FirtoolOptions &opt)
Definition Firtool.cpp:54
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.