CIRCT 22.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, bool value) {
56 unwrap(options)->setAllowAddingPortsOnPublic(value);
57}
58
60 CirctFirtoolFirtoolOptions options,
63
64 switch (value) {
66 converted = firrtl::PreserveAggregate::PreserveMode::None;
67 break;
69 converted = firrtl::PreserveAggregate::PreserveMode::OneDimVec;
70 break;
72 converted = firrtl::PreserveAggregate::PreserveMode::Vec;
73 break;
75 converted = firrtl::PreserveAggregate::PreserveMode::All;
76 break;
77 }
78
79 unwrap(options)->setPreserveAggregate(converted);
80}
81
83 CirctFirtoolFirtoolOptions options, CirctFirtoolPreserveValuesMode value) {
85
86 switch (value) {
88 converted = firrtl::PreserveValues::PreserveMode::Strip;
89 break;
91 converted = firrtl::PreserveValues::PreserveMode::None;
92 break;
94 converted = firrtl::PreserveValues::PreserveMode::Named;
95 break;
97 converted = firrtl::PreserveValues::PreserveMode::All;
98 break;
99 }
100
101 unwrap(options)->setPreserveValues(converted);
102}
103
104void circtFirtoolOptionsSetEnableDebugInfo(CirctFirtoolFirtoolOptions options,
105 bool value) {
106 unwrap(options)->setEnableDebugInfo(value);
107}
108
109void circtFirtoolOptionsSetBuildMode(CirctFirtoolFirtoolOptions options,
110 CirctFirtoolBuildMode value) {
112
113 switch (value) {
115 converted = firtool::FirtoolOptions::BuildMode::BuildModeDefault;
116 break;
118 converted = firtool::FirtoolOptions::BuildMode::BuildModeDebug;
119 break;
121 converted = firtool::FirtoolOptions::BuildMode::BuildModeRelease;
122 break;
123 }
124
125 unwrap(options)->setBuildMode(converted);
126}
127
128void circtFirtoolOptionsSetDisableLayerSink(CirctFirtoolFirtoolOptions options,
129 bool value) {
130 unwrap(options)->setDisableLayerSink(value);
131}
132
134 CirctFirtoolFirtoolOptions options, bool value) {
135 unwrap(options)->setDisableOptimization(value);
136}
137
138void circtFirtoolOptionsSetVbToBv(CirctFirtoolFirtoolOptions options,
139 bool value) {
140 unwrap(options)->setVbToBV(value);
141}
142
143void circtFirtoolOptionsSetNoDedup(CirctFirtoolFirtoolOptions options,
144 bool value) {
145 unwrap(options)->setNoDedup(value);
146}
147
148void circtFirtoolOptionsSetCompanionMode(CirctFirtoolFirtoolOptions options,
150 firrtl::CompanionMode converted;
151
152 switch (value) {
154 converted = firrtl::CompanionMode::Bind;
155 break;
157 converted = firrtl::CompanionMode::Instantiate;
158 break;
160 converted = firrtl::CompanionMode::Drop;
161 break;
162 }
163
164 unwrap(options)->setCompanionMode(converted);
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
192void circtFirtoolOptionsSetExtractTestCode(CirctFirtoolFirtoolOptions options,
193 bool value) {
194 unwrap(options)->setExtractTestCode(value);
195}
196
198 CirctFirtoolFirtoolOptions options, bool value) {
199 unwrap(options)->setIgnoreReadEnableMem(value);
200}
201
202void circtFirtoolOptionsSetDisableRandom(CirctFirtoolFirtoolOptions options,
205
206 switch (value) {
208 converted = firtool::FirtoolOptions::RandomKind::None;
209 break;
211 converted = firtool::FirtoolOptions::RandomKind::Mem;
212 break;
214 converted = firtool::FirtoolOptions::RandomKind::Reg;
215 break;
217 converted = firtool::FirtoolOptions::RandomKind::All;
218 break;
219 }
220
221 unwrap(options)->setDisableRandom(converted);
222}
223
225 CirctFirtoolFirtoolOptions options, MlirStringRef value) {
226 unwrap(options)->setOutputAnnotationFilename(unwrap(value));
227}
228
230 CirctFirtoolFirtoolOptions options, bool value) {
231 unwrap(options)->setEnableAnnotationWarning(value);
232}
233
234void circtFirtoolOptionsSetAddMuxPragmas(CirctFirtoolFirtoolOptions options,
235 bool value) {
236 unwrap(options)->setAddMuxPragmas(value);
237}
238
240 CirctFirtoolFirtoolOptions options, firrtl::VerificationFlavor value) {
241 unwrap(options)->setVerificationFlavor(value);
242}
243
245 CirctFirtoolFirtoolOptions options, bool value) {
246 unwrap(options)->setEmitSeparateAlwaysBlocks(value);
247}
248
250 CirctFirtoolFirtoolOptions options, bool value) {
251 unwrap(options)->setEtcDisableInstanceExtraction(value);
252}
253
255 CirctFirtoolFirtoolOptions options, bool value) {
256 unwrap(options)->setEtcDisableRegisterExtraction(value);
257}
258
260 CirctFirtoolFirtoolOptions options, bool value) {
261 unwrap(options)->setEtcDisableModuleInlining(value);
262}
263
265 CirctFirtoolFirtoolOptions options, bool value) {
266 unwrap(options)->setAddVivadoRAMAddressConflictSynthesisBugWorkaround(value);
267}
268
269void circtFirtoolOptionsSetCkgModuleName(CirctFirtoolFirtoolOptions options,
270 MlirStringRef value) {
271 unwrap(options)->setCkgModuleName(unwrap(value));
272}
273
274void circtFirtoolOptionsSetCkgInputName(CirctFirtoolFirtoolOptions options,
275 MlirStringRef value) {
276 unwrap(options)->setCkgInputName(unwrap(value));
277}
278
279void circtFirtoolOptionsSetCkgOutputName(CirctFirtoolFirtoolOptions options,
280 MlirStringRef value) {
281 unwrap(options)->setCkgOutputName(unwrap(value));
282}
283
284void circtFirtoolOptionsSetCkgEnableName(CirctFirtoolFirtoolOptions options,
285 MlirStringRef value) {
286 unwrap(options)->setCkgEnableName(unwrap(value));
287}
288
289void circtFirtoolOptionsSetCkgTestEnableName(CirctFirtoolFirtoolOptions options,
290 MlirStringRef value) {
291 unwrap(options)->setCkgTestEnableName(unwrap(value));
292}
293
295 CirctFirtoolFirtoolOptions options, bool value) {
296 unwrap(options)->setExportModuleHierarchy(value);
297}
298
299void circtFirtoolOptionsSetStripFirDebugInfo(CirctFirtoolFirtoolOptions options,
300 bool value) {
301 unwrap(options)->setStripFirDebugInfo(value);
302}
303
304void circtFirtoolOptionsSetStripDebugInfo(CirctFirtoolFirtoolOptions options,
305 bool value) {
306 unwrap(options)->setStripDebugInfo(value);
307}
308
310 CirctFirtoolFirtoolOptions options, bool value) {
311
312 unwrap(options)->setDisableCSEinClasses(value);
313}
314
316 CirctFirtoolFirtoolOptions options, bool value) {
317 unwrap(options)->setSelectDefaultInstanceChoice(value);
318}
319
320//===----------------------------------------------------------------------===//
321// Populate API.
322//===----------------------------------------------------------------------===//
323
324MlirLogicalResult
326 CirctFirtoolFirtoolOptions options) {
327 return wrap(
329}
330
331MlirLogicalResult
333 CirctFirtoolFirtoolOptions options) {
334 return wrap(
336}
337
338MlirLogicalResult
340 CirctFirtoolFirtoolOptions options,
341 MlirStringRef inputFilename) {
342 return wrap(firtool::populateLowFIRRTLToHW(*unwrap(pm), *unwrap(options),
343 unwrap(inputFilename)));
344}
345
346MlirLogicalResult
347circtFirtoolPopulateHWToSV(MlirPassManager pm,
348 CirctFirtoolFirtoolOptions options) {
349 return wrap(firtool::populateHWToSV(*unwrap(pm), *unwrap(options)));
350}
351
352MlirLogicalResult
354 CirctFirtoolFirtoolOptions options,
355 MlirStringCallback callback, void *userData) {
356 auto stream =
357 std::make_unique<mlir::detail::CallbackOstream>(callback, userData);
358 return wrap(firtool::populateExportVerilog(*unwrap(pm), *unwrap(options),
359 std::move(stream)));
360}
361
362MlirLogicalResult
364 CirctFirtoolFirtoolOptions options,
365 MlirStringRef directory) {
367 unwrap(directory)));
368}
369
370MlirLogicalResult
372 CirctFirtoolFirtoolOptions options) {
373 return wrap(firtool::populateFinalizeIR(*unwrap(pm), *unwrap(options)));
374}
375
376MlirLogicalResult
378 CirctFirtoolFirtoolOptions options,
379 MlirStringCallback callback, void *userData) {
380 auto stream =
381 std::make_unique<mlir::detail::CallbackOstream>(callback, userData);
382 return wrap(firtool::populateHWToBTOR2(*unwrap(pm), *unwrap(options),
383 *std::move(stream)));
384}
void circtFirtoolOptionsSetDisableAggressiveMergeConnections(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:167
void circtFirtoolOptionsSetStripDebugInfo(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:304
void circtFirtoolOptionsSetEmitSeparateAlwaysBlocks(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:244
void circtFirtoolOptionsSetDisableUnknownAnnotations(CirctFirtoolFirtoolOptions options, bool disable)
Definition Firtool.cpp:39
void circtFirtoolOptionsSetDisableLayerSink(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:128
void circtFirtoolOptionsSetExportModuleHierarchy(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:294
void circtFirtoolOptionsSetCkgOutputName(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:279
void circtFirtoolOptionsSetCkgTestEnableName(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:289
MlirLogicalResult circtFirtoolpopulateHWToBTOR2(MlirPassManager pm, CirctFirtoolFirtoolOptions options, MlirStringCallback callback, void *userData)
Definition Firtool.cpp:377
void circtFirtoolOptionsSetVerificationFlavor(CirctFirtoolFirtoolOptions options, firrtl::VerificationFlavor value)
Definition Firtool.cpp:239
void circtFirtoolOptionsSetCkgEnableName(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:284
void circtFirtoolOptionsSetPreserveAggregate(CirctFirtoolFirtoolOptions options, CirctFirtoolPreserveAggregateMode value)
Definition Firtool.cpp:59
void circtFirtoolOptionsSetDisableOptimization(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:133
void circtFirtoolOptionsSetLowerAnnotationsNoRefTypePorts(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:49
void circtFirtoolOptionsSetIgnoreReadEnableMem(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:197
MlirLogicalResult circtFirtoolPopulateCHIRRTLToLowFIRRTL(MlirPassManager pm, CirctFirtoolFirtoolOptions options)
Definition Firtool.cpp:332
void circtFirtoolOptionsSetOutputFilename(CirctFirtoolFirtoolOptions options, MlirStringRef filename)
Definition Firtool.cpp:34
void circtFirtoolOptionsSetSelectDefaultInstanceChoice(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:315
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:138
void circtFirtoolOptionsSetOutputAnnotationFilename(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:224
void circtFirtoolOptionsSetNoDedup(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:143
void circtFirtoolOptionsSetBlackBoxRootPath(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:177
void circtFirtoolOptionsSetCkgModuleName(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:269
void circtFirtoolOptionsSetDisableRandom(CirctFirtoolFirtoolOptions options, CirctFirtoolRandomKind value)
Definition Firtool.cpp:202
MlirLogicalResult circtFirtoolPopulateFinalizeIR(MlirPassManager pm, CirctFirtoolFirtoolOptions options)
Definition Firtool.cpp:371
void circtFirtoolOptionsSetAllowAddingPortsOnPublic(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:54
void circtFirtoolOptionsSetEtcDisableInstanceExtraction(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:249
void circtFirtoolOptionsSetEnableAnnotationWarning(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:229
void circtFirtoolOptionsSetReplSeqMem(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:182
void circtFirtoolOptionsSetEnableDebugInfo(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:104
void circtFirtoolOptionsSetCkgInputName(CirctFirtoolFirtoolOptions options, MlirStringRef value)
Definition Firtool.cpp:274
void circtFirtoolOptionsSetBuildMode(CirctFirtoolFirtoolOptions options, CirctFirtoolBuildMode value)
Definition Firtool.cpp:109
MlirLogicalResult circtFirtoolPopulateHWToSV(MlirPassManager pm, CirctFirtoolFirtoolOptions options)
Definition Firtool.cpp:347
void circtFirtoolOptionsSetLowerMemories(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:172
void circtFirtoolOptionsSetEtcDisableModuleInlining(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:259
MlirLogicalResult circtFirtoolPopulateLowFIRRTLToHW(MlirPassManager pm, CirctFirtoolFirtoolOptions options, MlirStringRef inputFilename)
Definition Firtool.cpp:339
void circtFirtoolOptionsSetAddVivadoRAMAddressConflictSynthesisBugWorkaround(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:264
MlirLogicalResult circtFirtoolPopulateExportVerilog(MlirPassManager pm, CirctFirtoolFirtoolOptions options, MlirStringCallback callback, void *userData)
Definition Firtool.cpp:353
void circtFirtoolOptionsSetExtractTestCode(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:192
void circtFirtoolOptionsSetStripFirDebugInfo(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:299
void circtFirtoolOptionsSetDisableCSEinClasses(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:309
DEFINE_C_API_PTR_METHODS(CirctFirtoolFirtoolOptions, circt::firtool::FirtoolOptions) CirctFirtoolFirtoolOptions circtFirtoolOptionsCreateDefault()
Definition Firtool.cpp:18
void circtFirtoolOptionsSetAddMuxPragmas(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:234
void circtFirtoolOptionsSetCompanionMode(CirctFirtoolFirtoolOptions options, CirctFirtoolCompanionMode value)
Definition Firtool.cpp:148
void circtFirtoolOptionsSetEtcDisableRegisterExtraction(CirctFirtoolFirtoolOptions options, bool value)
Definition Firtool.cpp:254
MlirLogicalResult circtFirtoolPopulatePreprocessTransforms(MlirPassManager pm, CirctFirtoolFirtoolOptions options)
Definition Firtool.cpp:325
MlirLogicalResult circtFirtoolPopulateExportSplitVerilog(MlirPassManager pm, CirctFirtoolFirtoolOptions options, MlirStringRef directory)
Definition Firtool.cpp:363
void circtFirtoolOptionsSetPreserveValues(CirctFirtoolFirtoolOptions options, CirctFirtoolPreserveValuesMode value)
Definition Firtool.cpp:82
return wrap(CMemoryType::get(unwrap(ctx), baseType, numElements))
static EvaluatorValuePtr unwrap(OMEvaluatorValue c)
Definition OM.cpp:111
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:31
LogicalResult populateLowFIRRTLToHW(mlir::PassManager &pm, const FirtoolOptions &opt, StringRef inputFilename)
Definition Firtool.cpp:220
LogicalResult populateHWToBTOR2(mlir::PassManager &pm, const FirtoolOptions &opt, llvm::raw_ostream &os)
Definition Firtool.cpp:438
LogicalResult populateExportSplitVerilog(mlir::PassManager &pm, const FirtoolOptions &opt, llvm::StringRef directory)
Definition Firtool.cpp:420
LogicalResult populateHWToSV(mlir::PassManager &pm, const FirtoolOptions &opt)
Definition Firtool.cpp:305
LogicalResult populateExportVerilog(mlir::PassManager &pm, const FirtoolOptions &opt, std::unique_ptr< llvm::raw_ostream > os)
Definition Firtool.cpp:401
LogicalResult populatePreprocessTransforms(mlir::PassManager &pm, const FirtoolOptions &opt)
Definition Firtool.cpp:27
LogicalResult populateFinalizeIR(mlir::PassManager &pm, const FirtoolOptions &opt)
Definition Firtool.cpp:430
LogicalResult populateCHIRRTLToLowFIRRTL(mlir::PassManager &pm, const FirtoolOptions &opt)
Definition Firtool.cpp:55
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.