CIRCT  19.0.0git
ImportVerilog.h
Go to the documentation of this file.
1 //===- ImportVerilog.h - Slang Verilog frontend integration ---------------===//
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 // Defines the interface to the Verilog frontend.
10 //
11 //===----------------------------------------------------------------------===//
12 
13 #ifndef CIRCT_CONVERSION_IMPORTVERILOG_H
14 #define CIRCT_CONVERSION_IMPORTVERILOG_H
15 
16 #include "circt/Support/LLVM.h"
17 #include <optional>
18 #include <string>
19 #include <vector>
20 
21 namespace llvm {
22 class SourceMgr;
23 } // namespace llvm
24 
25 namespace mlir {
26 class LocationAttr;
27 class TimingScope;
28 } // namespace mlir
29 
30 namespace circt {
31 
32 /// Options that control how Verilog input files are parsed and processed.
33 ///
34 /// See `slang::driver::Driver::Options` for inspiration. Also check out
35 /// `Driver::addStandardArgs()` for some inspiration on how to expose these on
36 /// the command line.
38  /// Limit importing to linting or parsing only.
39  enum class Mode {
40  /// Only lint the input, without elaboration and lowering to CIRCT IR.
41  OnlyLint,
42  /// Only parse and elaborate the input, without mapping to CIRCT IR.
43  OnlyParse,
44  /// Perform a full import and mapping to CIRCT IR.
45  Full
46  };
48 
49  //===--------------------------------------------------------------------===//
50  // Include paths
51  //===--------------------------------------------------------------------===//
52 
53  /// A list of include directories in which to search for files.
54  std::vector<std::string> includeDirs;
55 
56  /// A list of system include directories in which to search for files.
57  std::vector<std::string> includeSystemDirs;
58 
59  /// A list of library directories in which to search for missing modules.
60  std::vector<std::string> libDirs;
61 
62  /// A list of extensions that will be used to search for library files.
63  std::vector<std::string> libExts;
64 
65  /// A list of extensions that will be used to exclude files.
66  std::vector<std::string> excludeExts;
67 
68  /// A list of preprocessor directives to be ignored.
69  std::vector<std::string> ignoreDirectives;
70 
71  //===--------------------------------------------------------------------===//
72  // Preprocessing
73  //===--------------------------------------------------------------------===//
74 
75  /// The maximum depth of included files before an error is issued.
76  std::optional<uint32_t> maxIncludeDepth;
77 
78  /// A list of macros that should be defined in each compilation unit.
79  std::vector<std::string> defines;
80 
81  /// A list of macros that should be undefined in each compilation unit.
82  std::vector<std::string> undefines;
83 
84  /// If true, library files will inherit macro definitions from primary source
85  /// files.
86  std::optional<bool> librariesInheritMacros;
87 
88  //===--------------------------------------------------------------------===//
89  // Compilation
90  //===--------------------------------------------------------------------===//
91 
92  /// A string that indicates the default time scale to use for any design
93  /// elements that don't specify one explicitly.
94  std::optional<std::string> timeScale;
95 
96  /// If true, allow various to be referenced before they are declared.
97  std::optional<bool> allowUseBeforeDeclare;
98 
99  /// If true, ignore errors about unknown modules.
100  std::optional<bool> ignoreUnknownModules;
101 
102  /// If non-empty, specifies the list of modules that should serve as the top
103  /// modules in the design. If empty, this will be automatically determined
104  /// based on which modules are unreferenced elsewhere.
105  std::vector<std::string> topModules;
106 
107  /// A list of top-level module parameters to override, of the form
108  /// `<name>=<value>`.
109  std::vector<std::string> paramOverrides;
110 
111  //===--------------------------------------------------------------------===//
112  // Diagnostics Control
113  //===--------------------------------------------------------------------===//
114 
115  /// The maximum number of errors to print before giving up.
116  std::optional<uint32_t> errorLimit;
117 
118  /// A list of warning options that will be passed to the DiagnosticEngine.
119  std::vector<std::string> warningOptions;
120 
121  /// A list of paths in which to suppress warnings.
122  std::vector<std::string> suppressWarningsPaths;
123 
124  //===--------------------------------------------------------------------===//
125  // File lists
126  //===--------------------------------------------------------------------===//
127 
128  /// If set to true, all source files will be treated as part of a single
129  /// compilation unit, meaning all of their text will be merged together.
130  std::optional<bool> singleUnit;
131 
132  /// A list of library files to include in the compilation.
133  std::vector<std::string> libraryFiles;
134 };
135 
136 /// Parse files in a source manager as Verilog source code and populate the
137 /// given MLIR `module` with corresponding ops.
138 mlir::LogicalResult
139 importVerilog(llvm::SourceMgr &sourceMgr, mlir::MLIRContext *context,
140  mlir::TimingScope &ts, mlir::ModuleOp module,
141  const ImportVerilogOptions *options = nullptr);
142 
143 /// Run the files in a source manager through Slang's Verilog preprocessor and
144 /// emit the result to the given output stream.
145 mlir::LogicalResult
146 preprocessVerilog(llvm::SourceMgr &sourceMgr, mlir::MLIRContext *context,
147  mlir::TimingScope &ts, llvm::raw_ostream &os,
148  const ImportVerilogOptions *options = nullptr);
149 
150 /// Register the `import-verilog` MLIR translation.
152 
153 /// Return a human-readable string describing the slang frontend version linked
154 /// into CIRCT.
155 std::string getSlangVersion();
156 
157 } // namespace circt
158 
159 #endif // CIRCT_CONVERSION_IMPORTVERILOG_H
The InstanceGraph op interface, see InstanceGraphInterface.td for more details.
Definition: DebugAnalysis.h:21
std::string getSlangVersion()
Return a human-readable string describing the slang frontend version linked into CIRCT.
mlir::LogicalResult importVerilog(llvm::SourceMgr &sourceMgr, mlir::MLIRContext *context, mlir::TimingScope &ts, mlir::ModuleOp module, const ImportVerilogOptions *options=nullptr)
Parse files in a source manager as Verilog source code and populate the given MLIR module with corres...
mlir::LogicalResult preprocessVerilog(llvm::SourceMgr &sourceMgr, mlir::MLIRContext *context, mlir::TimingScope &ts, llvm::raw_ostream &os, const ImportVerilogOptions *options=nullptr)
Run the files in a source manager through Slang's Verilog preprocessor and emit the result to the giv...
void registerFromVerilogTranslation()
Register the import-verilog MLIR translation.
Options that control how Verilog input files are parsed and processed.
Definition: ImportVerilog.h:37
std::vector< std::string > libraryFiles
A list of library files to include in the compilation.
std::optional< bool > allowUseBeforeDeclare
If true, allow various to be referenced before they are declared.
Definition: ImportVerilog.h:97
std::optional< uint32_t > maxIncludeDepth
The maximum depth of included files before an error is issued.
Definition: ImportVerilog.h:76
std::vector< std::string > warningOptions
A list of warning options that will be passed to the DiagnosticEngine.
std::vector< std::string > ignoreDirectives
A list of preprocessor directives to be ignored.
Definition: ImportVerilog.h:69
std::vector< std::string > libExts
A list of extensions that will be used to search for library files.
Definition: ImportVerilog.h:63
std::optional< bool > librariesInheritMacros
If true, library files will inherit macro definitions from primary source files.
Definition: ImportVerilog.h:86
std::vector< std::string > defines
A list of macros that should be defined in each compilation unit.
Definition: ImportVerilog.h:79
std::optional< bool > singleUnit
If set to true, all source files will be treated as part of a single compilation unit,...
std::vector< std::string > libDirs
A list of library directories in which to search for missing modules.
Definition: ImportVerilog.h:60
std::vector< std::string > suppressWarningsPaths
A list of paths in which to suppress warnings.
std::vector< std::string > includeSystemDirs
A list of system include directories in which to search for files.
Definition: ImportVerilog.h:57
std::vector< std::string > includeDirs
A list of include directories in which to search for files.
Definition: ImportVerilog.h:54
Mode
Limit importing to linting or parsing only.
Definition: ImportVerilog.h:39
@ OnlyLint
Only lint the input, without elaboration and lowering to CIRCT IR.
@ OnlyParse
Only parse and elaborate the input, without mapping to CIRCT IR.
@ Full
Perform a full import and mapping to CIRCT IR.
std::vector< std::string > undefines
A list of macros that should be undefined in each compilation unit.
Definition: ImportVerilog.h:82
std::vector< std::string > excludeExts
A list of extensions that will be used to exclude files.
Definition: ImportVerilog.h:66
std::vector< std::string > paramOverrides
A list of top-level module parameters to override, of the form <name>=<value>.
std::optional< bool > ignoreUnknownModules
If true, ignore errors about unknown modules.
std::optional< std::string > timeScale
A string that indicates the default time scale to use for any design elements that don't specify one ...
Definition: ImportVerilog.h:94
std::vector< std::string > topModules
If non-empty, specifies the list of modules that should serve as the top modules in the design.
std::optional< uint32_t > errorLimit
The maximum number of errors to print before giving up.