1VERILATOR(1)          User Contributed Perl Documentation         VERILATOR(1)
2
3
4

NAME

6       Verilator - Translate and simulate SystemVerilog code using C++/SystemC
7

SYNOPSIS

9           verilator --help
10           verilator --version
11           verilator --cc [options] [source_files.v]... [opt_c_files.cpp/c/cc/a/o/so]
12           verilator --sc [options] [source_files.v]... [opt_c_files.cpp/c/cc/a/o/so]
13           verilator --lint-only -Wall [source_files.v]...
14

DESCRIPTION

16       The "Verilator" package converts all synthesizable, and many
17       behavioral, Verilog and SystemVerilog designs into a C++ or SystemC
18       model that after compiling can be executed.  Verilator is not a
19       traditional simulator, but a compiler.
20
21       Verilator is typically used as follows:
22
23       1. The "verilator" executable is invoked with parameters similar to
24       GCC, Cadence Verilog-XL/NC-Verilog, or Synopsys VCS.  "verilator" reads
25       the specified user's SystemVerilog code, lints it, optionally adds
26       coverage and waveform tracing support, and compiles the design into a
27       source level C++ or SystemC "model".  The resulting model's C++ or
28       SystemC code is output as .cpp and .h files. This is referred to as
29       "verilating" and the process is "to verilate"; the output is a
30       "verilated" model.
31
32       2. For simulation, a small user written C++ wrapper file is required,
33       the "wrapper".  This wrapper defines the C++ function `main()` which
34       instantiates the Verilated model as a C++/SystemC object.
35
36       3. The user main wrapper, the files created by Verilator, a "runtime
37       library" provided by Verilator, and if applicable the SystemC libraries
38       are then compiled using a C++ compiler to create a simulation
39       executable.
40
41       4. The resulting executable will perform the actual simulation, during
42       "simulation runtime".
43
44       To get started, jump down to the "EXAMPLE C++ EXECUTION" section.
45

ARGUMENT SUMMARY

47       This is a short summary of the arguments to the "verilator" executable.
48       See "VERILATION ARGUMENTS" for the detailed descriptions of these
49       arguments.
50
51           {file.v}                    Verilog package, module and top module filenames
52           {file.c/cc/cpp}             Optional C++ files to compile in
53           {file.a/o/so}               Optional C++ files to link in
54
55            +1364-1995ext+<ext>        Use Verilog 1995 with file extension <ext>
56            +1364-2001ext+<ext>        Use Verilog 2001 with file extension <ext>
57            +1364-2005ext+<ext>        Use Verilog 2005 with file extension <ext>
58            +1800-2005ext+<ext>        Use SystemVerilog 2005 with file extension <ext>
59            +1800-2009ext+<ext>        Use SystemVerilog 2009 with file extension <ext>
60            +1800-2012ext+<ext>        Use SystemVerilog 2012 with file extension <ext>
61            +1800-2017ext+<ext>        Use SystemVerilog 2017 with file extension <ext>
62           --assert                    Enable all assertions
63           --autoflush                 Flush streams after all $displays
64           --bbox-sys                  Blackbox unknown $system calls
65           --bbox-unsup                Blackbox unsupported language features
66           --bin <filename>            Override Verilator binary
67           --build                     Build model executable/library after Verilation
68            -CFLAGS <flags>            C++ compiler flags for makefile
69           --cc                        Create C++ output
70           --cdc                       Clock domain crossing analysis
71           --clk <signal-name>         Mark specified signal as clock
72           --make <build-tool>         Generate scripts for specified build tool
73           --compiler <compiler-name>  Tune for specified C++ compiler
74           --converge-limit <loops>    Tune convergence settle time
75           --coverage                  Enable all coverage
76           --coverage-line             Enable line coverage
77           --coverage-toggle           Enable toggle coverage
78           --coverage-user             Enable SVL user coverage
79           --coverage-underscore       Enable coverage of _signals
80            -D<var>[=<value>]          Set preprocessor define
81           --debug                     Enable debugging
82           --debug-check               Enable debugging assertions
83           --no-debug-leak             Disable leaking memory in --debug mode
84           --debugi <level>            Enable debugging at a specified level
85           --debugi-<srcfile> <level>  Enable debugging a source file at a level
86           --default-language <lang>   Default language to parse
87            +define+<var>=<value>      Set preprocessor define
88           --dpi-hdr-only              Only produce the DPI header file
89           --dump-defines              Show preprocessor defines with -E
90           --dump-tree                 Enable dumping .tree files
91           --dump-treei <level>        Enable dumping .tree files at a level
92           --dump-treei-<srcfile> <level>  Enable dumping .tree file at a source file at a level
93           --dump-tree-addrids         Use short identifiers instead of addresses
94            -E                         Preprocess, but do not compile
95           --error-limit <value>       Abort after this number of errors
96           --exe                       Link to create executable
97            -F <file>                  Parse options from a file, relatively
98            -f <file>                  Parse options from a file
99            -FI <file>                 Force include of a file
100           --flatten                   Force inlining of all modules, tasks and functions
101            -G<name>=<value>           Overwrite top-level parameter
102           --gdb                       Run Verilator under GDB interactively
103           --gdbbt                     Run Verilator under GDB for backtrace
104           --generate-key              Create random key for --protect-key
105           --getenv <var>              Get environment variable with defaults
106           --help                      Display this help
107           --hierarchical              Enable hierarchical Verilation
108            -I<dir>                    Directory to search for includes
109            -j <jobs>                  Parallelism for --build
110           --gate-stmts <value>        Tune gate optimizer depth
111           --if-depth <value>          Tune IFDEPTH warning
112            +incdir+<dir>              Directory to search for includes
113           --inhibit-sim               Create function to turn off sim
114           --inline-mult <value>       Tune module inlining
115            -LDFLAGS <flags>           Linker pre-object flags for makefile
116           --l2-name <value>           Verilog scope name of the top module
117           --language <lang>           Default language standard to parse
118            +libext+<ext>+[ext]...     Extensions for finding modules
119           --lint-only                 Lint, but do not make output
120            -MAKEFLAGS <flags>         Options to make during --build
121           --max-num-width <value>     Maximum number width (default: 64K)
122           --MMD                       Create .d dependency files
123           --MP                        Create phony dependency targets
124           --Mdir <directory>          Name of output object directory
125           --mod-prefix <topname>      Name to prepend to lower classes
126           --no-clk <signal-name>      Prevent marking specified signal as clock
127           --no-decoration             Disable comments and symbol decorations
128           --no-pins64                 Don't use vluint64_t's for 33-64 bit sigs
129           --no-skip-identical         Disable skipping identical output
130            +notimingchecks            Ignored
131            -O0                        Disable optimizations
132            -O3                        High performance optimizations
133            -O<optimization-letter>    Selectable optimizations
134            -o <executable>            Name of final executable
135           --no-order-clock-delay      Disable ordering clock enable assignments
136           --no-verilate               Skip verilation and just compile previously Verilated code.
137           --output-split <statements>          Split .cpp files into pieces
138           --output-split-cfuncs <statements>   Split model functions
139           --output-split-ctrace <statements>   Split tracing functions
140            -P                         Disable line numbers and blanks with -E
141           --pins-bv <bits>            Specify types for top level ports
142           --pins-sc-uint              Specify types for top level ports
143           --pins-sc-biguint           Specify types for top level ports
144           --pins-uint8                Specify types for top level ports
145           --pipe-filter <command>     Filter all input through a script
146           --pp-comments               Show preprocessor comments with -E
147           --prefix <topname>          Name of top level class
148           --prof-cfuncs               Name functions for profiling
149           --prof-threads              Enable generating gantt chart data for threads
150           --protect-key <key>         Key for symbol protection
151           --protect-ids               Hash identifier names for obscurity
152           --protect-lib <name>        Create a DPI protected library
153           --private                   Debugging; see docs
154           --public                    Debugging; see docs
155           --public-flat-rw            Mark all variables, etc as public_flat_rw
156            -pvalue+<name>=<value>     Overwrite toplevel parameter
157           --quiet-exit                Don't print the command on failure
158           --relative-includes         Resolve includes relative to current file
159           --no-relative-cfuncs        Disallow 'this->' in generated functions
160           --report-unoptflat          Extra diagnostics for UNOPTFLAT
161           --rr                        Run Verilator and record with rr
162           --savable                   Enable model save-restore
163           --sc                        Create SystemC output
164           --stats                     Create statistics file
165           --stats-vars                Provide statistics on variables
166            -sv                        Enable SystemVerilog parsing
167            +systemverilogext+<ext>    Synonym for +1800-2017ext+<ext>
168           --threads <threads>         Enable multithreading
169           --threads-dpi <mode>        Enable multithreaded DPI
170           --threads-max-mtasks <mtasks>  Tune maximum mtask partitioning
171           --timescale <timescale>     Sets default timescale
172           --timescale-override <timescale>  Overrides all timescales
173           --top <topname>             Alias of --top-module
174           --top-module <topname>      Name of top level input module
175           --trace                     Enable waveform creation
176           --trace-coverage            Enable tracing of coverage
177           --trace-depth <levels>      Depth of tracing
178           --trace-fst                 Enable FST waveform creation
179           --trace-max-array <depth>   Maximum bit width for tracing
180           --trace-max-width <width>   Maximum array depth for tracing
181           --trace-params              Enable tracing of parameters
182           --trace-structs             Enable tracing structure names
183           --trace-threads <threads>   Enable waveform creation on separate threads
184           --trace-underscore          Enable tracing of _signals
185            -U<var>                    Undefine preprocessor define
186           --unroll-count <loops>      Tune maximum loop iterations
187           --unroll-stmts <stmts>      Tune maximum loop body size
188           --unused-regexp <regexp>    Tune UNUSED lint signals
189            -V                         Verbose version and config
190            -v <filename>              Verilog library
191            +verilog1995ext+<ext>      Synonym for +1364-1995ext+<ext>
192            +verilog2001ext+<ext>      Synonym for +1364-2001ext+<ext>
193           --version                   Displays program version and exits
194           --vpi                       Enable VPI compiles
195           --waiver-output <filename>  Create a waiver file based on the linter warnings
196            -Wall                      Enable all style warnings
197            -Werror-<message>          Convert warnings to errors
198            -Wfuture-<message>         Disable unknown message warnings
199            -Wno-<message>             Disable warning
200            -Wno-context               Disable source context on warnings
201            -Wno-fatal                 Disable fatal exit on warnings
202            -Wno-lint                  Disable all lint warnings
203            -Wno-style                 Disable all style warnings
204            -Wpedantic                 Warn on compliance-test issues
205           --x-assign <mode>           Assign non-initial Xs to this value
206           --x-initial <mode>          Assign initial Xs to this value
207           --x-initial-edge            Enable initial X->0 and X->1 edge triggers
208           --xml-only                  Create XML parser output
209           --xml-output                XML output filename
210            -y <dir>                   Directory to search for modules
211
212       This is a short summary of the simulation runtime arguments, i.e. for
213       the final Verilated simulation runtime models.  See "SIMULATION RUNTIME
214       ARGUMENTS" for the detailed description of these arguments.
215
216            +verilator+debug                  Enable debugging
217            +verilator+debugi+<value>         Enable debugging at a level
218            +verilator+help                   Display help
219            +verilator+prof+threads+file+I<filename>  Set profile filename
220            +verilator+prof+threads+start+I<value>    Set profile starting point
221            +verilator+prof+threads+window+I<value>   Set profile duration
222            +verilator+rand+reset+I<value>    Set random reset technique
223            +verilator+seed+I<value>          Set random seed
224            +verilator+noassert               Disable assert checking
225            +verilator+V                      Verbose version and config
226            +verilator+version                Show version and exit
227

VERILATION ARGUMENTS

229       The following are the arguments that may be passed to the "verilator"
230       executable.
231
232       {file.v}
233           Specifies the Verilog file containing the top module to be
234           Verilated.
235
236       {file.c/.cc/.cpp/.cxx}
237           Used with --exe to specify optional C++ files to be linked in with
238           the Verilog code.  The file path should either be absolute, or
239           relative to where the make will be executed from, or add to your
240           makefile's VPATH the appropriate directory to find the file.
241
242           See also the -CFLAGS and -LDFLAGS options, which are useful when
243           the C++ files need special compiler flags.
244
245       {file.a/.o/.so}
246           Specifies optional object or library files to be linked in with the
247           Verilog code, as a shorthand for -LDFLAGS "<file>". The file path
248           should either be absolute, or relative to where the make will be
249           executed from, or add to your makefile's VPATH the appropriate
250           directory to find the file.
251
252           If any files are specified in this way, Verilator will include a
253           make rule that uses these files when linking the module executable.
254           This generally is only useful when used with the --exe option.
255
256       +1364-1995ext+ext
257       +1364-2001ext+ext
258       +1364-2005ext+ext
259       +1800-2005ext+ext
260       +1800-2009ext+ext
261       +1800-2012ext+ext
262       +1800-2017ext+ext
263           Specifies the language standard to be used with a specific filename
264           extension, ext.
265
266           For compatibility with other simulators, see also the synonyms
267           "+verilog1995ext+"ext, "+verilog2001ext+"ext, and
268           "+systemverilogext+"ext.
269
270           For any source file, the language specified by these options takes
271           precedence over any language specified by the "--default-language"
272           or "--language" options.
273
274           These options take effect in the order they are encountered. Thus
275           the following would use Verilog 1995 for "a.v" and Verilog 2001 for
276           "b.v".
277
278               verilator ... +1364-1995ext+v a.v +1364-2001ext+v b.v
279
280           These flags are only recommended for legacy mixed language designs,
281           as the preferable option is to edit the code to repair new
282           keywords, or add appropriate "`begin_keywords".
283
284           Note "`begin_keywords" is a SystemVerilog construct, which
285           specifies only the set of keywords to be recognized. This also
286           controls some error messages that vary between language standards.
287           Note at present Verilator tends to be overly permissive, e.g. it
288           will accept many grammar and other semantic extensions which might
289           not be legal when set to an older standard.
290
291       --assert
292           Enable all assertions.
293
294       --autoflush
295           After every $display or $fdisplay, flush the output stream.  This
296           ensures that messages will appear immediately but may reduce
297           performance. For best performance call "fflush(stdout)"
298           occasionally in the C++ main loop.  Defaults to off, which will
299           buffer output as provided by the normal C/C++ standard library IO.
300
301       --bbox-sys
302           Black box any unknown $system task or function calls.  System tasks
303           will simply become no-operations, and system functions will be
304           replaced with unsized zero.  Arguments to such functions will be
305           parsed, but not otherwise checked.  This prevents errors when
306           linting in the presence of company specific PLI calls.
307
308           Using this argument will likely cause incorrect simulation.
309
310       --bbox-unsup
311           Black box some unsupported language features, currently UDP tables,
312           the cmos and tran gate primitives, deassign statements, and mixed
313           edge errors.  This may enable linting the rest of the design even
314           when unsupported constructs are present.
315
316           Using this argument will likely cause incorrect simulation.
317
318       --bin filename
319           Rarely needed.  Override the default filename for Verilator itself.
320           When a dependency (.d) file is created, this filename will become a
321           source dependency, such that a change in this binary will have make
322           rebuild the output files.
323
324       --build
325           After generating the SystemC/C++ code, Verilator will invoke the
326           toolchain to build the model library (and executable when "--exe"
327           is also used). Verilator manages the build itself, and for this
328           --build requires GNU Make to be available on the platform.
329
330       -CFLAGS flags
331           Add specified C compiler flag to the generated makefiles. For
332           multiple flags either pass them as a single argument with space
333           separators quoted in the shell ("-CFLAGS "-a -b""), or use multiple
334           -CFLAGS arguments ("-CFLAGS -a -CFLAGS -b").
335
336           When make is run on the generated makefile these will be passed to
337           the C++ compiler (g++/clang++/msvc++).
338
339       --cc
340           Specifies C++ without SystemC output mode; see also --sc.
341
342       --cdc
343           Permanently experimental.  Perform some clock domain crossing
344           checks and issue related warnings (CDCRSTLOGIC) and then exit; if
345           warnings other than CDC warnings are needed make a second run with
346           --lint-only.  Additional warning information is also written to the
347           file {prefix}__cdc.txt.
348
349           Currently only checks some items that other CDC tools missed; if
350           you have interest in adding more traditional CDC checks, please
351           contact the authors.
352
353       --clk signal-name
354           Sometimes it is quite difficult for Verilator to distinguish clock
355           signals from other data signals. Occasionally the clock signals can
356           end up in the checking list of signals which determines if further
357           evaluation is needed. This will heavily degrade the performance of
358           a Verilated model.
359
360           With --clk <signal-name>, user can specified root clock into the
361           model, then Verilator will mark the signal as clocker and propagate
362           the clocker attribute automatically to other signals derived from
363           that. In this way, Verilator will try to avoid taking the clocker
364           signal into checking list.
365
366           Note signal-name is specified by the RTL hierarchy path. For
367           example, v.foo.bar.  If the signal is the input to top-module, the
368           directly the signal name. If you find it difficult to find the
369           exact name, try to use "/*verilator clocker*/" in RTL file to mark
370           the signal directly.
371
372           If clock signals are assigned to vectors and then later used
373           individually, Verilator will attempt to decompose the vector and
374           connect the single-bit clock signals directly.  This should be
375           transparent to the user.
376
377       --make build-tool
378           Generates a script for the specified build tool.
379
380           Supported values are "gmake" for GNU Make and "cmake" for CMake.
381           Both can be specified together.  If no build tool is specified,
382           gmake is assumed.  The executable of gmake can be configured via
383           environment variable "MAKE".
384
385           When using --build Verilator takes over the responsibility of
386           building the model library/executable.  For this reason --make
387           cannot be specified when using --build.
388
389       --compiler compiler-name
390           Enables workarounds for the specified C++ compiler, either "clang",
391           "gcc", or "msvc".  Currently this does not change any performance
392           tuning flags, but it may in the future.
393
394           clang
395               Tune for clang.  This may reduce execution speed as it enables
396               several workarounds to avoid silly hard-coded limits in clang.
397               This includes breaking deep structures as for msvc as described
398               below.
399
400           gcc Tune for GNU C++, although generated code should work on almost
401               any compliant C++ compiler.  Currently the default.
402
403           msvc
404               Tune for Microsoft Visual C++.  This may reduce execution speed
405               as it enables several workarounds to avoid silly hard-coded
406               limits in MSVC++.  This includes breaking deeply nested
407               parenthesized expressions into sub-expressions to avoid error
408               C1009, and breaking deep blocks into functions to avoid error
409               C1061.
410
411       --converge-limit loops
412           Rarely needed.  Specifies the maximum number of runtime iterations
413           before creating a model failed to converge error.  Defaults to 100.
414
415       --coverage
416           Enables all forms of coverage, alias for "--coverage-line
417           --coverage-toggle --coverage-user".
418
419       --coverage-line
420           Specifies basic block line coverage analysis code should be
421           inserted.
422
423           Coverage analysis adds statements at each code flow change point
424           (e.g. at branches).  At each such branch a unique counter is
425           incremented.  At the end of a test, the counters along with the
426           filename and line number corresponding to each counter are written
427           into logs/coverage.dat.
428
429           Verilator automatically disables coverage of branches that have a
430           $stop in them, as it is assumed $stop branches contain an error
431           check that should not occur.  A /*verilator coverage_block_off*/
432           comment will perform a similar function on any code in that block
433           or below, or /*verilator coverage_on/coverage_off*/ will disable
434           coverage around lines of code.
435
436           Note Verilator may over-count combinatorial (non-clocked) blocks
437           when those blocks receive signals which have had the UNOPTFLAT
438           warning disabled; for most accurate results do not disable this
439           warning when using coverage.
440
441       --coverage-toggle
442           Specifies signal toggle coverage analysis code should be inserted.
443
444           Every bit of every signal in a module has a counter inserted.  The
445           counter will increment on every edge change of the corresponding
446           bit.
447
448           Signals that are part of tasks or begin/end blocks are considered
449           local variables and are not covered.  Signals that begin with
450           underscores, are integers, or are very wide (>256 bits total
451           storage across all dimensions) are also not covered.
452
453           Hierarchy is compressed, such that if a module is instantiated
454           multiple times, coverage will be summed for that bit across ALL
455           instantiations of that module with the same parameter set.  A
456           module instantiated with different parameter values is considered a
457           different module, and will get counted separately.
458
459           Verilator makes a minimally-intelligent decision about what clock
460           domain the signal goes to, and only looks for edges in that clock
461           domain.  This means that edges may be ignored if it is known that
462           the edge could never be seen by the receiving logic.  This
463           algorithm may improve in the future.  The net result is coverage
464           may be lower than what would be seen by looking at traces, but the
465           coverage is a more accurate representation of the quality of
466           stimulus into the design.
467
468           There may be edges counted near time zero while the model
469           stabilizes.  It's a good practice to zero all coverage just before
470           releasing reset to prevent counting such behavior.
471
472           A /*verilator coverage_off/on */ comment pair can be used around
473           signals that do not need toggle analysis, such as RAMs and register
474           files.
475
476       --coverage-underscore
477           Enable coverage of signals that start with an underscore. Normally,
478           these signals are not covered.  See also --trace-underscore.
479
480       --coverage-user
481           Enables user inserted functional coverage.  Currently, all
482           functional coverage points are specified using SVA which must be
483           separately enabled with --assert.
484
485           For example, the following statement will add a coverage point,
486           with the comment "DefaultClock":
487
488              DefaultClock: cover property (@(posedge clk) cyc==3);
489
490       -Dvar=value
491           Defines the given preprocessor symbol.  Similar to +define, but
492           does not allow multiple definitions with a single option using plus
493           signs.  +define is fairly standard across Verilog tools while -D is
494           similar to GCC.
495
496       --debug
497           Select the debug executable of Verilator (if available), and enable
498           more internal assertions (equivalent to "--debug-check"), debugging
499           messages (equivalent to "--debugi 4"), and intermediate form dump
500           files (equivalent to "--dump-treei 3").
501
502       --debug-check
503           Rarely needed.  Enable internal debugging assertion checks, without
504           changing debug verbosity.  Enabled automatically when --debug
505           specified.
506
507       --no-debug-leak
508           In --debug mode, by default Verilator intentionally leaks AstNode
509           instances instead of freeing them, so that each node pointer is
510           unique in the resulting tree files and dot files.
511
512           This option disables the leak. This may avoid out-of-memory errors
513           when Verilating large models in --debug mode.
514
515           Outside of --debug mode, AstNode instances should never be leaked
516           and this option has no effect.
517
518       --debugi level
519       --debugi-srcfile level
520           Rarely needed - for developer use.  Set internal debugging level
521           globally to the specified debug level (1-10) or set the specified
522           Verilator source file to the specified level (e.g.
523           "--debugi-V3Width 9"). Higher levels produce more detailed
524           messages.
525
526       --default-language value
527           Select the language to be used by default when first processing
528           each Verilog file.  The language value must be "1364-1995",
529           "1364-2001", "1364-2005", "1800-2005", "1800-2009", "1800-2012" or
530           "1800-2017".
531
532           Any language associated with a particular file extension (see the
533           various +langext+ options) will be used in preference to the
534           language specified by --default-language.
535
536           The --default-language flag is only recommended for legacy code
537           using the same language in all source files, as the preferable
538           option is to edit the code to repair new keywords, or add
539           appropriate "`begin_keywords". For legacy mixed language designs,
540           the various +langext+ options should be used.
541
542           If no language is specified, either by this flag or +langext+
543           options, then the latest SystemVerilog language (IEEE 1800-2017) is
544           used.
545
546       +define+var=value
547       +define+var=value+var2=value2...
548           Defines the given preprocessor symbol, or multiple symbols if
549           separated by plus signs.  Similar to -D; +define is fairly standard
550           across Verilog tools while -D is similar to GCC.
551
552       --dpi-hdr-only
553           Only generate the DPI header file.  This option has no effect on
554           the name or location of the emitted DPI header file, it is output
555           in "--Mdir" as it would be without this option.
556
557       --dump-defines
558           With -E, suppress normal output, and instead print a list of all
559           defines existing at the end of pre-processing the input files.
560           Similar to GCC "-dM" option. This also gives you a way of finding
561           out what is predefined in Verilator using the command:
562
563              touch foo.v ; verilator -E --dump-defines foo.v
564
565       --dump-tree
566           Rarely needed.  Enable writing .tree debug files with dumping level
567           3, which dumps the standard critical stages.  For details on the
568           format see the Verilator Internals manual.  --dump-tree is enabled
569           automatically with --debug, so "--debug --no-dump-tree" may be
570           useful if the dump files are large and not desired.
571
572       --dump-treei level
573       --dump-treei-srcfile level
574           Rarely needed - for developer use.  Set internal tree dumping level
575           globally to a specific dumping level or set the specified Verilator
576           source file to the specified tree dumping level (e.g.
577           "--dump-treei-V3Order 9").  Level 0 disables dumps and is
578           equivalent to "--no-dump-tree".  Level 9 enables dumping of every
579           stage.
580
581       --dump-tree-addrids
582           Rarely needed - for developer use.  Replace AST node addresses with
583           short identifiers in tree dumps to enhance readability.  Each
584           unique pointer value is mapped to a unique identifier, but note
585           that this is not necessarily unique per node instance as an address
586           might get reused by a newly allocated node after a node with the
587           same address has been dumped then freed.
588
589       -E  Preprocess the source code, but do not compile, as with 'gcc -E'.
590           Output is written to standard out.  Beware of enabling debugging
591           messages, as they will also go to standard out.
592
593       --error-limit value
594           After this number of errors are encountered during Verilator run,
595           exit.  Warnings are not counted in this limit.  Defaults to 50.
596
597           Does not affect simulation runtime errors, for those see
598           +verilator+error+limit.
599
600       --exe
601           Generate an executable.  You will also need to pass additional .cpp
602           files on the command line that implement the main loop for your
603           simulation.
604
605       -F file
606           Read the specified file, and act as if all text inside it was
607           specified as command line parameters.  Any relative paths are
608           relative to the directory containing the specified file.  See also
609           -f. Note -F is fairly standard across Verilog tools.
610
611       -f file
612           Read the specified file, and act as if all text inside it was
613           specified as command line parameters.  Any relative paths are
614           relative to the current directory.  See also -F. Note -f is fairly
615           standard across Verilog tools.
616
617           The file may contain // comments which are ignored to the end of
618           the line.  Any $VAR, $(VAR), or ${VAR} will be replaced with the
619           specified environment variable.
620
621       -FI file
622           Force include of the specified C++ header file.  All generated C++
623           files will insert a #include of the specified file before any other
624           includes. The specified file might be used to contain define
625           prototypes of custom VL_VPRINTF functions, and may need to include
626           verilatedos.h as this file is included before any other standard
627           includes.
628
629       --flatten
630           Force flattening of the design's hierarchy, with all modules, tasks
631           and functions inlined. Typically used with "--xml-only". Note
632           flattening large designs may require significant CPU time, memory
633           and storage.
634
635       -Gname=value
636           Overwrites the given parameter of the toplevel module. The value is
637           limited to basic data literals:
638
639           Verilog integer literals
640               The standard Verilog integer literals are supported, so values
641               like 32'h8, 2'b00, 4 etc. are allowed. Care must be taken that
642               the single quote (I') is properly escaped in an interactive
643               shell, e.g., as -GWIDTH=8\'hx.
644
645           C integer literals
646               It is also possible to use C integer notation, including
647               hexadecimal (0x..), octal (0..) or binary (0b..) notation.
648
649           Double literals
650               Double literals must be one of the following styles:
651                 - contains a dot (.) (e.g. 1.23)
652                 - contains an exponent (e/E) (e.g. 12e3)
653                 - contains p/P for hexadecimal floating point in C99 (e.g.
654               0x123.ABCp1)
655
656           Strings
657               Strings must be in double quotes (""). They must be escaped
658               properly on the command line, e.g. as -GSTR="\"My String\"" or
659               -GSTR='"My String"'.
660
661       --gate-stmts value
662           Rarely needed.  Set the maximum number of statements that may be
663           present in an equation for the gate substitution optimization to
664           inline that equation.
665
666       --gdb
667           Run Verilator underneath an interactive GDB (or VERILATOR_GDB
668           environment variable value) session.  See also --gdbbt.
669
670       --gdbbt
671           If --debug is specified, run Verilator underneath a GDB process and
672           print a backtrace on exit, then exit GDB immediately.  Without
673           --debug or if GDB doesn't seem to work, this flag is ignored.
674           Intended for easy creation of backtraces by users; otherwise see
675           the --gdb flag.
676
677       --generate-key
678           Generate a true-random key suitable for use with --protect-key,
679           print it, and exit immediately.
680
681       --getenv variable
682           If the variable is declared in the environment, print it and exit
683           immediately. Otherwise, if it's built into Verilator (e.g.
684           VERILATOR_ROOT), print that and exit immediately. Otherwise, print
685           a newline and exit immediately. This can be useful in makefiles.
686           See also -V, and the various *.mk files.
687
688       --help
689           Displays this message and program version and exits.
690
691       --hierarchical
692           Enable hierarchical Verilation otherwise /*verilator hier_block*/
693           metacomment is ignored.  See "HIERARCHICAL VERILATION".
694
695       -Idir
696           See -y.
697
698       --if-depth value
699           Rarely needed.  Set the depth at which the IFDEPTH warning will
700           fire, defaults to 0 which disables this warning.
701
702       +incdir+dir
703           See -y.
704
705       --inhibit-sim
706           Rarely needed.  Create a "inhibitSim(bool)" function to enable and
707           disable evaluation.  This allows an upper level testbench to
708           disable modules that are not important in a given simulation,
709           without needing to recompile or change the SystemC modules
710           instantiated.
711
712       --inline-mult value
713           Tune the inlining of modules.  The default value of 2000 specifies
714           that up to 2000 new operations may be added to the model by
715           inlining, if more than this number of operations would result, the
716           module is not inlined.  Larger values, or a value < 1 will inline
717           everything, will lead to longer compile times, but potentially
718           faster simulation speed.  This setting is ignored for very small
719           modules; they will always be inlined, if allowed.
720
721       -j <value>
722           Specify the level of parallelism for --build. <value> must be a
723           positive integer specifying the maximum number of parallel build
724           jobs, or can be omitted. When <value> is omitted, the build will
725           not try to limit the number of parallel build jobs but attempt to
726           execute all independent build steps in parallel.
727
728       -LDFLAGS flags
729           Add specified C linker flags to the generated makefiles.  For
730           multiple flags either pass them as a single argument with space
731           separators quoted in the shell ("-LDFLAGS "-a -b""), or use
732           multiple -LDFLAGS arguments ("-LDFLAGS -a -LDFLAGS -b").
733
734           When make is run on the generated makefile these will be passed to
735           the C++ linker (ld) *after* the primary file being linked.  This
736           flag is called -LDFLAGS as that's the traditional name in
737           simulators; it's would have been better called LDLIBS as that's the
738           Makefile variable it controls.  (In Make, LDFLAGS is before the
739           first object, LDLIBS after.  -L libraries need to be in the Make
740           variable LDLIBS, not LDFLAGS.)
741
742       --l2-name value
743           Instead of using the module name when showing Verilog scope, use
744           the name provided. This allows simplifying some Verilator-embedded
745           modeling methodologies. Default is an l2-name matching the top
746           module. The default before 3.884 was "--l2-name v"
747
748           For example, the program "module t; initial $display("%m");
749           endmodule" will show by default "t". With "--l2-name v" it will
750           print "v".
751
752       --language value
753           A synonym for "--default-language", for compatibility with other
754           tools and earlier versions of Verilator.
755
756       +libext+ext+ext...
757           Specify the extensions that should be used for finding modules.  If
758           for example module x is referenced, look in x.ext.  Note +libext+
759           is fairly standard across Verilog tools.  Defaults to .v and .sv.
760
761       --lint-only
762           Check the files for lint violations only, do not create any other
763           output.
764
765           You may also want the -Wall option to enable messages that are
766           considered stylistic and not enabled by default.
767
768           If the design is not to be completely Verilated see also the
769           --bbox-sys and --bbox-unsup options.
770
771       -MAKEFLAGS <string>
772           When using --build, add the specified flag to the invoked make
773           command line.  For multiple flags either pass them as a single
774           argument with space separators quoted in the shell (e.g.
775           "-MAKEFLAGS "-a -b""), or use multiple -MAKEFLAGS arguments (e.g.
776           "-MAKEFLAGS -l -MAKEFLAGS -k"). Use of this option should not be
777           required for simple builds using the host toolchain.
778
779       --max-num-width value
780           Set the maximum number literal width (e.g. in 1024'd22 this it the
781           1024).  Defaults to 64K.
782
783       --MMD =item --no-MMD
784           Enable/disable creation of .d dependency files, used for make
785           dependency detection, similar to gcc -MMD option.  By default this
786           option is enabled for --cc or --sc modes.
787
788       --MP
789           When creating .d dependency files with --MMD, make phony targets.
790           Similar to gcc -MP option.
791
792       --Mdir directory
793           Specifies the name of the Make object directory.  All generated
794           files will be placed in this directory.  If not specified,
795           "obj_dir" is used.  The directory is created if it does not exist
796           and the parent directories exist; otherwise manually create the
797           Mdir before calling Verilator.
798
799       --mod-prefix topname
800           Specifies the name to prepend to all lower level classes.  Defaults
801           to the same as --prefix.
802
803       --no-clk signal-name
804           Prevent the specified signal from being marked as clock. See
805           "--clk".
806
807       --no-decoration
808           When creating output Verilated code, minimize comments, white
809           space, symbol names and other decorative items, at the cost of
810           greatly reduced readability. This may assist C++ compile times.
811           This will not typically change the ultimate model's performance,
812           but may in some cases.
813
814       --no-pins64
815           Backward compatible alias for "--pins-bv 33".
816
817       --no-relative-cfuncs
818           Disable 'this->' references in generated functions, and instead
819           Verilator will generate absolute references starting from
820           'vlTOPp->'.  This prevents V3Combine from merging functions from
821           multiple instances of the same module, so it can grow the
822           instruction stream.
823
824           This is a work around for old compilers. Don't set this if your C++
825           compiler supports __restrict__ properly, as GCC 4.5.x and newer do.
826           For older compilers, test if this switch gives you better
827           performance or not.
828
829           Compilers which don't honor __restrict__ will suspect that 'this->'
830           references and 'vlTOPp->' references may alias, and may write slow
831           code with extra loads and stores to handle the (imaginary)
832           aliasing. Using only 'vlTOPp->' references allows these old
833           compilers to produce tight code.
834
835       --no-skip-identical =item --skip-identical
836           Rarely needed.  Disables or enables skipping execution of Verilator
837           if all source files are identical, and all output files exist with
838           newer dates.  By default this option is enabled for --cc or --sc
839           modes only.
840
841       +notimingchecks
842           Ignored for compatibility with other simulators.
843
844       -O0 Disables optimization of the model.
845
846       -O3 Enables slow optimizations for the code Verilator itself generates
847           (as opposed to "-CFLAGS -O3" which effects the C compiler's
848           optimization.  -O3 may improve simulation performance at the cost
849           of compile time.  This currently sets --inline-mult -1.
850
851       -Ooptimization-letter
852           Rarely needed.  Enables or disables a specific optimizations, with
853           the optimization selected based on the letter passed.  A lowercase
854           letter disables an optimization, an upper case letter enables it.
855           This is intended for debugging use only; see the source code for
856           version-dependent mappings of optimizations to -O letters.
857
858       -o executable
859           Specify the name for the final executable built if using --exe.
860           Defaults to the --prefix if not specified.
861
862       --no-order-clock-delay
863           Rarely needed.  Disables a bug fix for ordering of clock enables
864           with delayed assignments.  This flag should only be used when
865           suggested by the developers.
866
867       --output-split statements
868           Enables splitting the output .cpp files into multiple outputs.
869           When a C++ file exceeds the specified number of operations, a new
870           file will be created at the next function boundary.  In addition,
871           if the total output code size exceeds the specified value,
872           VM_PARALLEL_BUILDS will be set to 1 by default in the generated
873           make files, making parallel compilation possible. Using
874           --output-split should have only a trivial impact on model
875           performance. But can greatly improve C++ compilation speed. The use
876           of ccache (set for you if present at configure time) is also more
877           effective with this option.
878
879           This option is on by default with a value of 20000. To disable,
880           pass with a value of 0.
881
882       --output-split-cfuncs statements
883           Enables splitting functions in the output .cpp files into multiple
884           functions.  When a generated function exceeds the specified number
885           of operations, a new function will be created.  With
886           --output-split, this will enable the C++ compiler to compile
887           faster, at a small loss in performance that gets worse with
888           decreasing split values.  Note that this option is stronger than
889           --output-split in the sense that --output-split will not split
890           inside a function.
891
892           Defaults to the value of --output-split, unless explicitly
893           specified.
894
895       --output-split-ctrace statements
896           Similar to --output-split-cfuncs, enables splitting trace functions
897           in the output .cpp files into multiple functions.
898
899           Defaults to the value of --output-split, unless explicitly
900           specified.
901
902       -P  With -E, disable generation of `line markers and blank lines,
903           similar to GCC -P flag.
904
905       --pins64
906           Backward compatible alias for "--pins-bv 65".  Note that's a 65,
907           not a 64.
908
909       --pins-bv width
910           Specifies SystemC inputs/outputs of greater than or equal to width
911           bits wide should use sc_bv's instead of uint32/vluint64_t's.  The
912           default is "--pins-bv 65", and the value must be less than or equal
913           to 65.  Versions before Verilator 3.671 defaulted to "--pins-bv
914           33".  The more sc_bv is used, the worse for performance.  Use the
915           "/*verilator sc_bv*/" attribute to select specific ports to be
916           sc_bv.
917
918       --pins-sc-uint
919           Specifies SystemC inputs/outputs of greater than 2 bits wide should
920           use sc_uint between 2 and 64.  When combined with the
921           "--pins-sc-biguint" combination, it results in sc_uint being used
922           between 2 and 64 and sc_biguint being used between 65 and 512.
923
924       --pins-sc-biguint
925           Specifies SystemC inputs/outputs of greater than 65 bits wide
926           should use sc_biguint between 65 and 512, and sc_bv from 513
927           upwards.  When combined with the "--pins-sc-uint" combination, it
928           results in sc_uint being used between 2 and 64 and sc_biguint being
929           used between 65 and 512.
930
931       --pins-uint8
932           Specifies SystemC inputs/outputs that are smaller than the
933           --pins-bv setting and 8 bits or less should use uint8_t instead of
934           uint32_t.  Likewise pins of width 9-16 will use uint16_t instead of
935           uint32_t.
936
937       --pipe-filter command
938           Rarely needed.  Verilator will spawn the specified command as a
939           subprocess pipe, to allow the command to perform custom edits on
940           the Verilog code before it reaches Verilator.
941
942           Before reading each Verilog file, Verilator will pass the file name
943           to the subprocess' stdin with 'read "<filename>"'.  The filter may
944           then read the file and perform any filtering it desires, and feeds
945           the new file contents back to Verilator on stdout by first emitting
946           a line defining the length in bytes of the filtered output
947           'Content-Length: <bytes>', followed by the new filtered contents.
948           Output to stderr from the filter feeds through to Verilator's
949           stdout and if the filter exits with non-zero status Verilator
950           terminates.  See the t/t_pipe_filter test for an example.
951
952           To debug the output of the filter, try using the -E option to see
953           preprocessed output.
954
955       --pp-comments
956           With -E, show comments in preprocessor output.
957
958       --prefix topname
959           Specifies the name of the top level class and makefile.  Defaults
960           to V prepended to the name of the --top switch, or V prepended to
961           the first Verilog filename passed on the command line.
962
963       --prof-cfuncs
964           Modify the created C++ functions to support profiling.  The
965           functions will be minimized to contain one "basic" statement,
966           generally a single always block or wire statement.  (Note this will
967           slow down the executable by ~5%.)  Furthermore, the function name
968           will be suffixed with the basename of the Verilog module and line
969           number the statement came from.  This allows gprof or oprofile
970           reports to be correlated with the original Verilog source
971           statements. See also verilator_profcfunc.
972
973       --prof-threads
974           Enable gantt chart data collection for threaded builds.
975
976           Verilator will record the start and end time of each macro-task
977           across a number of calls to eval. (What is a macro-task? See the
978           Verilator internals document.)
979
980           When profiling is enabled, the simulation runtime will emit a blurb
981           of profiling data in non-human-friendly form. The "verilator_gantt"
982           script will transform this into a nicer visual format and produce
983           some related statistics.
984
985       --protect-key key
986           Specifies the private key for --protect-ids. For best security this
987           key should be 16 or more random bytes, a reasonable secure choice
988           is the output of "verilator --generate-key". Typically, a key would
989           be created by the user once for a given protected design library,
990           then every Verilator run for subsequent versions of that library
991           would be passed the same --protect-key. Thus, if the input Verilog
992           is similar between library versions (Verilator runs), the Verilated
993           code will likewise be mostly similar.
994
995           If --protect-key is not specified and a key is needed, Verilator
996           will generate a new key for every Verilator run. As the key is not
997           saved, this is best for security, but means every Verilator run
998           will give vastly different output even for identical input, perhaps
999           harming compile times (and certainly thrashing any ccache).
1000
1001       --protect-ids
1002           Hash any private identifiers (variable, module, and assertion block
1003           names that are not on the top level) into hashed random-looking
1004           identifiers, resulting after compilation in protected library
1005           binaries that expose less design information.  This hashing uses
1006           the provided or default --protect-key, see important details there.
1007
1008           Verilator will also create a {prefix}__idmap.xml file which
1009           contains the mapping from the hashed identifiers back to the
1010           original identifiers. This idmap file is to be kept private, and is
1011           to assist mapping any simulation runtime design assertions,
1012           coverage, or trace information, which will report the hashed
1013           identifiers, back to the original design's identifier names.
1014
1015           Using DPI imports/exports is allowed and generally relatively safe
1016           in terms of information disclosed, which is limited to the DPI
1017           function prototyptes.  Use of the VPI is not recommended as many
1018           design details may be exposed, and an INSECURE warning will be
1019           issued.
1020
1021       --protect-lib name
1022           Produces C++, Verilog wrappers and a Makefile which can in turn
1023           produce a DPI library which can be used by Verilator or other
1024           simulators along with the corresponding Verilog wrapper.  The
1025           Makefile will build both a static and dynamic version of the
1026           library named libname.a and libname.so respectively.  This is done
1027           because some simulators require a dynamic library, but the static
1028           library is arguably easier to use if possible.  --protect-lib
1029           implies --protect-ids.
1030
1031           This allows for the secure delivery of sensitive IP without the
1032           need for encrypted RTL (i.e. IEEE P1735).  See
1033           examples/make_protect_lib in the distribution for a demonstration
1034           of how to build and use the DPI library.
1035
1036           When using --protect-lib it is advised to also use
1037           "--timescale-override /1fs" to ensure the model has a time
1038           resolution that is always compatible with the time precision of the
1039           upper instantiating module.
1040
1041       --private
1042           Opposite of --public.  Is the default; this option exists for
1043           backwards compatibility.
1044
1045       --public
1046           This is only for historical debug use.  Using it may result in mis-
1047           simulation of generated clocks.
1048
1049           Declares all signals and modules public.  This will turn off signal
1050           optimizations as if all signals had a /*verilator public*/ comments
1051           and inlining.  This will also turn off inlining as if all modules
1052           had a /*verilator public_module*/, unless the module specifically
1053           enabled it with /*verilator inline_module*/.
1054
1055       --public-flat-rw
1056           Declares all variables, ports and wires public as if they had
1057           /*verilator public_flat_rw @ (<variable's_source_process_edge>)*/
1058           comments.  This will make them VPI accessible by their flat name,
1059           but not turn off module inlining.  This is particularly useful in
1060           combination with --vpi. This may also in some rare cases result in
1061           mis-simulation of generated clocks.  Instead of this global switch,
1062           marking only those signals that need public_flat_rw is typically
1063           significantly better performing.
1064
1065       -pvalue+name=value
1066           Overwrites the given parameter(s) of the toplevel module. See -G
1067           for a detailed description.
1068
1069       --quiet-exit
1070           When exiting due to an error, do not display the "Exiting due to
1071           Errors" nor "Command Failed" messages.
1072
1073       --relative-includes
1074           When a file references an include file, resolve the filename
1075           relative to the path of the referencing file, instead of relative
1076           to the current directory.
1077
1078       --report-unoptflat
1079           Extra diagnostics for UNOPTFLAT warnings. This includes for each
1080           loop, the 10 widest variables in the loop, and the 10 most fanned
1081           out variables in the loop. These are candidates for splitting into
1082           multiple variables to break the loop.
1083
1084           In addition produces a GraphViz DOT file of the entire strongly
1085           connected components within the source associated with each loop.
1086           This is produced irrespective of whether --dump-tree is set. Such
1087           graphs may help in analyzing the problem, but can be very large
1088           indeed.
1089
1090           Various commands exist for viewing and manipulating DOT files. For
1091           example the dot command can be used to convert a DOT file to a PDF
1092           for printing. For example:
1093
1094               dot -Tpdf -O Vt_unoptflat_simple_2_35_unoptflat.dot
1095
1096           will generate a PDF Vt_unoptflat_simple_2_35_unoptflat.dot.pdf from
1097           the DOT file.
1098
1099           As an alternative, the xdot command can be used to view DOT files
1100           interactively:
1101
1102               xdot Vt_unoptflat_simple_2_35_unoptflat.dot
1103
1104       --rr
1105           Run Verilator and record with rr.  See: rr-project.org.
1106
1107       --savable
1108           Enable including save and restore functions in the generated model.
1109
1110           The user code must create a VerilatedSerialize or
1111           VerilatedDeserialze object then calling the << or >> operators on
1112           the generated model and any other data the process needs
1113           saved/restored.  These functions are not thread safe, and are
1114           typically called only by a main thread.
1115
1116           For example:
1117
1118               void save_model(const char* filenamep) {
1119                   VerilatedSave os;
1120                   os.open(filenamep);
1121                   os << main_time;  // user code must save the timestamp, etc
1122                   os << *topp;
1123               }
1124               void restore_model(const char* filenamep) {
1125                   VerilatedRestore os;
1126                   os.open(filenamep);
1127                   os >> main_time;
1128                   os >> *topp;
1129               }
1130
1131       --sc
1132           Specifies SystemC output mode; see also --cc.
1133
1134       --stats
1135           Creates a dump file with statistics on the design in
1136           {prefix}__stats.txt.
1137
1138       --stats-vars
1139           Creates more detailed statistics, including a list of all the
1140           variables by size (plain --stats just gives a count).  See --stats,
1141           which is implied by this.
1142
1143       --structs-packed
1144           Converts all unpacked structures to packed structures and issues a
1145           UNPACKED warning.  Currently this is the default and
1146           --no-structs-packed will not work.  Specifying this option allows
1147           for forward compatibility when a future version of Verilator no
1148           longer always packs unpacked structures.
1149
1150       -sv Specifies SystemVerilog language features should be enabled;
1151           equivalent to "--language 1800-2017".  This option is selected by
1152           default, it exists for compatibility with other simulators.
1153
1154       +systemverilogext+ext
1155           A synonym for "+1800-2017ext+"ext.
1156
1157       --threads threads
1158       --no-threads
1159           With --threads 0 or --no-threads, the default, the generated model
1160           is not thread safe. With --threads 1, the generated model is single
1161           threaded but may run in a multithreaded environment. With --threads
1162           N, where N >= 2, the model is generated to run multithreaded on up
1163           to N threads. See "MULTITHREADING".
1164
1165       --threads-dpi all
1166       --threads-dpi none
1167       --threads-dpi pure
1168           When using --threads, controls which DPI imported tasks and
1169           functions are considered thread safe.
1170
1171           With --threads-dpi all, enable Verilator to assume all DPI imports
1172           are threadsafe, and to use thread-local storage for communication
1173           with DPI, potentially improving performance. Any DPI libraries need
1174           appropriate mutexes to avoid undefined behavior.
1175
1176           With --threads-dpi none, Verilator assume DPI imports are not
1177           thread safe, and Verilator will serialize calls to DPI imports by
1178           default, potentially harming performance.
1179
1180           With --threads-dpi pure, the default, Verilator assumes DPI pure
1181           imports are threadsafe, but non-pure DPI imports are not.
1182
1183       --threads-max-mtasks value
1184           Rarely needed.  When using --threads, specify the number of mtasks
1185           the model is to be partitioned into. If unspecified, Verilator
1186           approximates a good value.
1187
1188       --timescale timeunit/timeprecision
1189           Sets default timescale, timeunit and timeprecision for when
1190           `timescale does not occur in sources.  Default is "1ps/1ps" (to
1191           match SystemC).  This is overridden by "--timescale-override".
1192
1193       --timescale-override timeunit/timeprecision
1194       --timescale-override /timeprecision
1195           Overrides all `timescales in sources. The timeunit may be left
1196           empty to specify only to override the timeprecision, e.g. "/1fs".
1197
1198           The time precision must be consistent with SystemC's
1199           sc_set_time_resolution, or the C++ code instantiating the Verilated
1200           module.  As 1fs is the finest time precision it may be desirable to
1201           always use a precision of 1fs.
1202
1203       --top topname
1204       --top-module topname
1205           When the input Verilog contains more than one top level module,
1206           specifies the name of the Verilog module to become the top level
1207           module, and sets the default for --prefix if not explicitly
1208           specified.  This is not needed with standard designs with only one
1209           top.  See also the MULTITOP warning section.
1210
1211       --trace
1212           Adds waveform tracing code to the model using VCD format. This
1213           overrides "--trace-fst".
1214
1215           Verilator will generate additional {prefix}__Trace*.cpp files that
1216           will need to be compiled.  In addition verilated_vcd_sc.cpp (for
1217           SystemC traces) or verilated_vcd_c.cpp (for both) must be compiled
1218           and linked in.  If using the Verilator generated Makefiles, these
1219           files will be added to the source file lists for you.  If you are
1220           not using the Verilator Makefiles, you will need to add these to
1221           your Makefile manually.
1222
1223           Having tracing compiled in may result in some small performance
1224           losses, even when tracing is not turned on during model execution.
1225
1226           See also "--trace-threads".
1227
1228       --trace-coverage
1229           With --trace and --coverage-*, enable tracing to include a traced
1230           signal for every --coverage-line or --coverage-user inserted
1231           coverage point, to assist in debugging coverage items.  Note
1232           --coverage-toggle does not get additional signals added, as the
1233           original signals being toggle-analyzed are already visible.
1234
1235           The added signal will be a 32-bit value which will increment on
1236           each coverage occurrence. Due to this, this option may greatly
1237           increase trace file sizes and reduce simulation speed.
1238
1239       --trace-depth levels
1240           Specify the number of levels deep to enable tracing, for example
1241           --trace-level 1 to only see the top level's signals.  Defaults to
1242           the entire model.  Using a small number will decrease visibility,
1243           but greatly improve simulation performance and trace file size.
1244
1245       --trace-fst
1246           Enable FST waveform tracing in the model. This overrides "--trace".
1247           See also "--trace-threads".
1248
1249       --trace-max-array depth
1250           Rarely needed.  Specify the maximum array depth of a signal that
1251           may be traced.  Defaults to 32, as tracing large arrays may greatly
1252           slow traced simulations.
1253
1254       --trace-max-width width
1255           Rarely needed.  Specify the maximum bit width of a signal that may
1256           be traced.  Defaults to 256, as tracing large vectors may greatly
1257           slow traced simulations.
1258
1259       --no-trace-params
1260           Disable tracing of parameters.
1261
1262       --trace-structs
1263           Enable tracing to show the name of packed structure, union, and
1264           packed array fields, rather than a single combined packed bus.  Due
1265           to VCD file format constraints this may result in significantly
1266           slower trace times and larger trace files.
1267
1268       --trace-threads threads
1269           Enable waveform tracing using separate threads. This is typically
1270           faster in simulation runtime but uses more total compute. This
1271           option is independent of, and works with, both "--trace" and
1272           "--trace-fst". Different trace formats can take advantage of more
1273           trace threads to varying degrees. Currently VCD tracing can utilize
1274           at most --trace-threads 1, and FST tracing can utilize at most
1275           --trace-threads 2. This overrides "--no-threads".
1276
1277       --trace-underscore
1278           Enable tracing of signals that start with an underscore. Normally,
1279           these signals are not output during tracing.  See also
1280           --coverage-underscore.
1281
1282       -Uvar
1283           Undefines the given preprocessor symbol.
1284
1285       --unroll-count loops
1286           Rarely needed.  Specifies the maximum number of loop iterations
1287           that may be unrolled.  See also BLKLOOPINIT warning.
1288
1289       --unroll-stmts statements
1290           Rarely needed.  Specifies the maximum number of statements in a
1291           loop for that loop to be unrolled. See also BLKLOOPINIT warning.
1292
1293       --unused-regexp regexp
1294           Rarely needed.  Specifies a simple regexp with * and ? that if a
1295           signal name matches will suppress the UNUSED warning.  Defaults to
1296           "*unused*".  Setting it to "" disables matching.
1297
1298       -V  Shows the verbose version, including configuration information
1299           compiled into Verilator.  (Similar to perl -V.)  See also --getenv.
1300
1301       -v filename
1302           Read the filename as a Verilog library.  Any modules in the file
1303           may be used to resolve instances in the top level module, else
1304           ignored.  Note -v is fairly standard across Verilog tools.
1305
1306       --no-verilate
1307           When using --build, disable generation of C++/SystemC code, and
1308           execute only the build. This can be useful for rebuilding Verilated
1309           code produced by a previous invocation of Verilator.
1310
1311       +verilog1995ext+ext
1312       +verilog2001ext+ext
1313           Synonyms for "+1364-1995ext+"ext and "+1364-2001ext+"ext
1314           respectively
1315
1316       --version
1317           Displays program version and exits.
1318
1319       --vpi
1320           Enable use of VPI and linking against the verilated_vpi.cpp files.
1321
1322       --waiver-output <filename>
1323           Generate a waiver file which contains all waiver statements to
1324           suppress the warnings emitted during this Verilator run. This in
1325           particular is useful as a starting point for solving linter
1326           warnings or suppressing them systematically.
1327
1328           The generated file is in the Verilator Configuration format, see
1329           "CONFIGURATION FILES", and can directly be consumed by Verilator.
1330           The standard file extension is .vlt.
1331
1332       -Wall
1333           Enable all code style warnings, including code style warnings that
1334           are normally disabled by default. Equivalent to "-Wwarn-lint
1335           -Wwarn-style".  Excludes some specialty warnings, i.e.
1336           IMPERFECTSCH.
1337
1338       -Werror-message
1339           Promote the specified warning message into an error message.  This
1340           is generally to discourage users from violating important site-wide
1341           rules, for example "-Werror-NOUNOPTFLAT".
1342
1343       -Wfuture-message
1344           Rarely needed.  Suppress unknown Verilator comments or warning
1345           messages with the given message code.  This is used to allow code
1346           written with pragmas for a later version of Verilator to run under
1347           a older version; add -Wfuture- arguments for each message code or
1348           comment that the new version supports which the older version does
1349           not support.
1350
1351       -Wno-message
1352           Disable the specified warning/error message.  This will override
1353           any lint_on directives in the source, i.e. the warning will still
1354           not be printed.
1355
1356       -Wno-context
1357           Disable showing the suspected context of the warning message by
1358           quoting the source text at the suspected location.  This can be
1359           used to appease tools which process the warning messages but may
1360           get confused by lines from the original source.
1361
1362       -Wno-fatal
1363           When warnings are detected, print them, but do not terminate
1364           Verilator.
1365
1366           Having warning messages in builds is sloppy.  It is strongly
1367           recommended you cleanup your code, use inline lint_off, or use
1368           -Wno-... flags rather than using this option.
1369
1370       -Wno-lint
1371           Disable all lint related warning messages, and all style warnings.
1372           This is equivalent to "-Wno-ALWCOMBORDER -Wno-BSSPACE
1373           -Wno-CASEINCOMPLETE -Wno-CASEOVERLAP -Wno-CASEX -Wno-CASTCONST
1374           -Wno-CASEWITHX -Wno-CMPCONST -Wno-COLONPLUS -Wno-ENDLABEL
1375           -Wno-IMPLICIT -Wno-LITENDIAN -Wno-PINCONNECTEMPTY -Wno-PINMISSING
1376           -Wno-SYNCASYNCNET -Wno-UNDRIVEN -Wno-UNSIGNED -Wno-UNUSED
1377           -Wno-WIDTH" plus the list shown for Wno-style.
1378
1379           It is strongly recommended you cleanup your code rather than using
1380           this option, it is only intended to be use when running test-cases
1381           of code received from third parties.
1382
1383       -Wno-style
1384           Disable all code style related warning messages (note by default
1385           they are already disabled).  This is equivalent to
1386           "-Wno-DECLFILENAME -Wno-DEFPARAM -Wno-IMPORTSTAR -Wno-INCABSPATH
1387           -Wno-PINCONNECTEMPTY -Wno-PINNOCONNECT -Wno-SYNCASYNCNET
1388           -Wno-UNDRIVEN -Wno-UNUSED -Wno-VARHIDDEN".
1389
1390       -Wpedantic
1391           Warn on any construct demanded by IEEE, and disable all Verilator
1392           extensions that may interfere with IEEE compliance to the standard
1393           defined with --default-language (etc).  Similar to GCC's
1394           -Wpedantic.  Rarely used, and intended only for strict compliance
1395           tests.
1396
1397       -Wwarn-message
1398           Enables the specified warning message.
1399
1400       -Wwarn-lint
1401           Enable all lint related warning messages (note by default they are
1402           already enabled), but do not affect style messages.  This is
1403           equivalent to "-Wwarn-ALWCOMBORDER -Wwarn-BSSPACE
1404           -Wwarn-CASEINCOMPLETE -Wwarn-CASEOVERLAP -Wwarn-CASEX
1405           -Wwarn-CASTCONST -Wwarn-CASEWITHX -Wwarn-CMPCONST -Wwarn-COLONPLUS
1406           -Wwarn-ENDLABEL -Wwarn-IMPLICIT -Wwarn-LITENDIAN -Wwarn-PINMISSING
1407           -Wwarn-REALCVT -Wwarn-UNSIGNED -Wwarn-WIDTH".
1408
1409       -Wwarn-style
1410           Enable all code style related warning messages.  This is equivalent
1411           to "-Wwarn ASSIGNDLY -Wwarn-DECLFILENAME -Wwarn-DEFPARAM
1412           -Wwarn-INCABSPATH -Wwarn-PINNOCONNECT -Wwarn-SYNCASYNCNET
1413           -Wwarn-UNDRIVEN -Wwarn-UNUSED -Wwarn-VARHIDDEN".
1414
1415       --x-assign 0
1416       --x-assign 1
1417       --x-assign fast (default)
1418       --x-assign unique
1419           Controls the two-state value that is substituted when an explicit X
1420           value is encountered in the source. "--x-assign fast", the default,
1421           converts all Xs to whatever is best for performance.  "--x-assign
1422           0" converts all Xs to 0s, and is also fast.  "--x-assign 1"
1423           converts all Xs to 1s, this is nearly as fast as 0, but more likely
1424           to find reset bugs as active high logic will fire. Using
1425           "--x-assign unique" will result in all explicit Xs being replaced
1426           by a constant value determined at runtime. The value is determined
1427           by calling a function at initialization time. This enables
1428           randomization of Xs with different seeds on different executions.
1429           This method is the slowest, but safest for finding reset bugs.
1430
1431           If using --x-assign unique, you may want to seed your random number
1432           generator such that each regression run gets a different
1433           randomization sequence. The simplest is to use the +verilator+seed
1434           runtime option.  Alternatively use the system's srand48() or for
1435           Windows srand() function to do this.  You'll probably also want to
1436           print any seeds selected, and code to enable rerunning with that
1437           same seed so you can reproduce bugs.
1438
1439           Note. This option applies only to values which are explicitly
1440           written as X in the Verilog source code. Initial values of clocks
1441           are set to 0 unless --x-initial-edge is specified. Initial values
1442           of all other state holding variables are controlled with
1443           --x-initial.
1444
1445       --x-initial 0
1446       --x-initial fast
1447       --x-initial unique (default)
1448           Controls the two-state value that is used to initialize variables
1449           that are not otherwise initialized.
1450
1451           "--x-initial 0", initializes all otherwise uninitialized variables
1452           to zero.
1453
1454           "--x-initial unique", the default, initializes variables using a
1455           function, which determines the value to use each initialization.
1456           This gives greatest flexibility and allows finding reset bugs.  See
1457           "Unknown states".
1458
1459           "--x-initial fast", is best for performance, and initializes all
1460           variables to a state Verilator determines is optimal.  This may
1461           allow further code optimizations, but will likely hide any code
1462           bugs relating to missing resets.
1463
1464           Note. This option applies only to initial values of variables.
1465           Initial values of clocks are set to 0 unless --x-initial-edge is
1466           specified.
1467
1468       --x-initial-edge
1469           Enables emulation of event driven simulators which generally
1470           trigger an edge on a transition from X to 1 ("posedge") or X to 0
1471           ("negedge"). Thus the following code, where "rst_n" is
1472           uninitialized would set "res_n" to "1'b1" when "rst_n" is first set
1473           to zero:
1474
1475               reg  res_n = 1'b0;
1476
1477               always @(negedge rst_n) begin
1478                  if (rst_n == 1'b0) begin
1479                     res_n <= 1'b1;
1480                  end
1481               end
1482
1483           In Verilator, by default, uninitialized clocks are given a value of
1484           zero, so the above "always" block would not trigger.
1485
1486           While it is not good practice, there are some designs that rely on
1487           X X 0 triggering a "negedge", particularly in reset sequences.
1488           Using --x-initial-edge with Verilator will replicate this behavior.
1489           It will also ensure that X X 1 triggers a "posedge".
1490
1491           Note. Some users have reported that using this option can affect
1492           convergence, and that it may be necessary to use --converge-limit
1493           to increase the number of convergence iterations. This may be
1494           another indication of problems with the modeled design that should
1495           be addressed.
1496
1497       --xml-only
1498           Create XML output only, do not create any other output.
1499
1500           The XML format is intended to be used to leverage Verilator's
1501           parser and elaboration to feed to other downstream tools. Be aware
1502           that the XML format is still evolving; there will be some changes
1503           in future versions.
1504
1505       --xml-output filename
1506           Filename for XML output file. Using this option automatically sets
1507           --xml-only.
1508
1509       -y dir
1510           Add the directory to the list of directories that should be
1511           searched for include files or libraries.  The three flags -y,
1512           +incdir and -I have similar effect; +incdir and +y are fairly
1513           standard across Verilog tools while -I is used by many C++
1514           compilers.
1515
1516           Verilator defaults to the current directory ("-y .") and any
1517           specified --Mdir, though these default paths are used after any
1518           user specified directories.  This allows '-y "$(pwd)"' to be used
1519           if absolute filenames are desired for error messages instead of
1520           relative filenames.
1521

SIMULATION RUNTIME ARGUMENTS

1523       The following are the arguments that may be passed to a Verilated
1524       executable, provided that executable calls Verilated::commandArgs().
1525
1526       All simulation runtime arguments begin with +verilator, so that the
1527       user's executable may skip over all +verilator arguments when parsing
1528       its command line.
1529
1530       +verilator+debug
1531           Enable simulation runtime debugging.  Equivalent to
1532           +verilator+debugi+4.
1533
1534       +verilator+debugi+value
1535           Enable simulation runtime debugging at the provided level.
1536
1537       +verilator+error+limit+value
1538           Set number of non-fatal errors (e.g. assertion failures) before
1539           exiting simulation runtime. Also affects number of $stop calls
1540           needed before exit. Defaults to 1.
1541
1542       +verilator+help
1543           Display help and exit.
1544
1545       +verilator+prof+threads+file+filename
1546           When a model was Verilated using --prof-threads, sets the
1547           simulation runtime filename to dump to.  Defaults to
1548           "profile_threads.dat".
1549
1550       +verilator+prof+threads+start+value
1551           When a model was Verilated using --prof-threads, the simulation
1552           runtime will wait until $time is at this value (expressed in units
1553           of the time precision), then start the profiling warmup, then
1554           capturing. Generally this should be set to some time that is well
1555           within the normal operation of the simulation, i.e. outside of
1556           reset. If 0, the dump is disabled. Defaults to 1.
1557
1558       +verilator+prof+threads+window+value
1559           When a model was Verilated using --prof-threads, after $time
1560           reaches +verilator+prof+threads+start, Verilator will warm up the
1561           profiling for this number of eval() calls, then will capture the
1562           profiling of this number of eval() calls.  Defaults to 2, which
1563           makes sense for a single-clock-domain module where it's typical to
1564           want to capture one posedge eval() and one negedge eval().
1565
1566       +verilator+rand+reset+value
1567           When a model was Verilated using "-x-initial unique", sets the
1568           simulation runtime initialization technique.  0 = Reset to zeros. 1
1569           = Reset to all-ones.  2 = Randomize.  See "Unknown states".
1570
1571       +verilator+seed+value
1572           For $random and "-x-initial unique", set the simulation runtime
1573           random seed value.  If zero or not specified picks a value from the
1574           system random number generator.
1575
1576       +verilator+noassert
1577           Disable assert checking per runtime argument. This is the same as
1578           calling "Verilated::assertOn(false)" in the model.
1579
1580       +verilator+V
1581           Shows the verbose version, including configuration information.
1582
1583       +verilator+version
1584           Displays program version and exits.
1585

EXAMPLE C++ EXECUTION

1587       We'll compile this example into C++.
1588
1589           mkdir test_our
1590           cd test_our
1591
1592           cat >our.v <<'EOF'
1593             module our;
1594                initial begin $display("Hello World"); $finish; end
1595             endmodule
1596           EOF
1597
1598           cat >sim_main.cpp <<'EOF'
1599             #include "Vour.h"
1600             #include "verilated.h"
1601             int main(int argc, char** argv, char** env) {
1602                 Verilated::commandArgs(argc, argv);
1603                 Vour* top = new Vour;
1604                 while (!Verilated::gotFinish()) { top->eval(); }
1605                 delete top;
1606                 exit(0);
1607             }
1608           EOF
1609
1610       See the README in the source kit for various ways to install or point
1611       to Verilator binaries.  In brief, if you installed Verilator using the
1612       package manager of your operating system, or did a "make install" to
1613       place Verilator into your default path, you do not need anything
1614       special in your environment, and should not have VERILATOR_ROOT set.
1615       However, if you installed Verilator from sources and want to run
1616       Verilator out of where you compiled Verilator, you need to point to the
1617       kit:
1618
1619           # See above; don't do this if using an OS-distributed Verilator
1620           export VERILATOR_ROOT=/path/to/where/verilator/was/installed
1621           export PATH=$VERILATOR_ROOT/bin:$PATH
1622
1623       Now we run Verilator on our little example.
1624
1625           verilator -Wall --cc our.v --exe --build sim_main.cpp
1626
1627       We can see the source code under the "obj_dir" directory.  See the
1628       FILES section below for descriptions of some of the files that were
1629       created.
1630
1631           ls -l obj_dir
1632
1633       (Verilator included a default compile rule and link rule, since we used
1634       --exe and passed a .cpp file on the Verilator command line.  Verilator
1635       also then used "make" to build a final executable, since we used
1636       --build.  You can also write your own compile rules, and run make
1637       yourself as we'll show in the SYSTEMC section.
1638
1639       And now we run it:
1640
1641           obj_dir/Vour
1642
1643       And we get as output:
1644
1645           Hello World
1646           - our.v:2: Verilog $finish
1647
1648       Really, you're better off writing a Makefile to do all this for you.
1649       Then, when your source changes it will automatically run all of these
1650       steps; to aid this Verilator can create a makefile dependency file.
1651       See the examples directory in the distribution.
1652

EXAMPLE SYSTEMC EXECUTION

1654       This is an example similar to the above, but using SystemC.
1655
1656           mkdir test_our_sc
1657           cd test_our_sc
1658
1659           cat >our.v <<'EOF'
1660             module our (clk);
1661                input clk;  // Clock is required to get initial activation
1662                always @ (posedge clk)
1663                   begin $display("Hello World"); $finish; end
1664             endmodule
1665           EOF
1666
1667           cat >sc_main.cpp <<'EOF'
1668             #include "Vour.h"
1669             int sc_main(int argc, char** argv) {
1670                 Verilated::commandArgs(argc, argv);
1671                 sc_clock clk("clk", 10, SC_NS, 0.5, 3, SC_NS, true);
1672                 Vour* top;
1673                 top = new Vour("top");
1674                 top->clk(clk);
1675                 while (!Verilated::gotFinish()) { sc_start(1, SC_NS); }
1676                 delete top;
1677                 exit(0);
1678             }
1679           EOF
1680
1681       See the README in the source kit for various ways to install or point
1682       to Verilator binaries.  In brief, if you installed Verilator using the
1683       package manager of your operating system, or did a "make install" to
1684       place Verilator into your default path, you do not need anything
1685       special in your environment, and should not have VERILATOR_ROOT set.
1686       However, if you installed Verilator from sources and want to run
1687       Verilator out of where you compiled Verilator, you need to point to the
1688       kit:
1689
1690           # See above; don't do this if using an OS-distributed Verilator
1691           export VERILATOR_ROOT=/path/to/where/verilator/was/installed
1692           export PATH=$VERILATOR_ROOT/bin:$PATH
1693
1694       Now we run Verilator on our little example.
1695
1696           verilator -Wall --sc our.v
1697
1698       We then can compile it
1699
1700           make -j -C obj_dir -f Vour.mk Vour__ALL.a
1701           make -j -C obj_dir -f Vour.mk ../sc_main.o verilated.o
1702
1703       And link with SystemC.  Note your path to the libraries may vary,
1704       depending on the operating system.
1705
1706           cd obj_dir
1707           export SYSTEMC_LIBDIR=/path/to/where/libsystemc.a/exists
1708           export LD_LIBRARY_PATH=$SYSTEMC_LIBDIR:$LD_LIBRARY_PATH
1709           # Might be needed if SystemC 2.3.0
1710           export SYSTEMC_CXX_FLAGS=-pthread
1711
1712           g++ -L$SYSTEMC_LIBDIR ../sc_main.o Vour__ALL.a verilated.o \
1713                     -o Vour -lsystemc
1714
1715       And now we run it
1716
1717           cd ..
1718           obj_dir/Vour
1719
1720       And we get the same output as the C++ example:
1721
1722           Hello World
1723           - our.v:2: Verilog $finish
1724
1725       Really, you're better off using a Makefile to do all this for you.
1726       Then, when your source changes it will automatically run all of these
1727       steps.  See the examples directory in the distribution.
1728

EVALUATION LOOP

1730       When using SystemC, evaluation of the Verilated model is managed by the
1731       SystemC kernel, and for the most part can be ignored.  When using C++,
1732       the user must call eval(), or eval_step() and eval_end_step().
1733
1734       1. When there is a single design instantiated at the C++ level that
1735       needs to evaluate, just call designp->eval().
1736
1737       2. When there are multiple designs instantiated at the C++ level that
1738       need to evaluate, call first_designp->eval_step() then ->eval_step() on
1739       all other designs.  Then call ->eval_end_step() on the first design
1740       then all other designs.  If there is only a single design, you would
1741       call eval_step() then eval_end_step(); in fact eval() described above
1742       is just a wrapper which calls these two functions.
1743
1744       When eval() is called Verilator looks for changes in clock signals and
1745       evaluates related sequential always blocks, such as computing always_ff
1746       @ (posedge...) outputs.  Then Verilator evaluates combinatorial logic.
1747
1748       Note combinatorial logic is not computed before sequential always
1749       blocks are computed (for speed reasons). Therefore it is best to set
1750       any non-clock inputs up with a separate eval() call before changing
1751       clocks.
1752
1753       Alternatively, if all always_ff statements use only the posedge of
1754       clocks, or all inputs go directly to always_ff statements, as is
1755       typical, then you can change non-clock inputs on the negative edge of
1756       the input clock, which will be faster as there will be fewer eval()
1757       calls.
1758
1759       For more information on evaluation, see docs/internals.adoc in the
1760       distribution.
1761

BENCHMARKING & OPTIMIZATION

1763       For best performance, run Verilator with the "-O3 --x-assign fast
1764       --x-initial fast --noassert" flags.  The -O3 flag will require longer
1765       time to run Verilator, and "--x-assign fast --x-initial fast" may
1766       increase the risk of reset bugs in trade for performance; see the above
1767       documentation for these flags.
1768
1769       If using Verilated multithreaded, use "numactl" to ensure you are using
1770       non-conflicting hardware resources. See "MULTITHREADING".
1771
1772       Minor Verilog code changes can also give big wins.  You should not have
1773       any UNOPTFLAT warnings from Verilator.  Fixing these warnings can
1774       result in huge improvements; one user fixed their one UNOPTFLAT warning
1775       by making a simple change to a clock latch used to gate clocks and
1776       gained a 60% performance improvement.
1777
1778       Beyond that, the performance of a Verilated model depends mostly on
1779       your C++ compiler and size of your CPU's caches. Experience shows that
1780       large models are often limited by the size of the instruction cache,
1781       and as such reducing code size if possible can be beneficial.
1782
1783       The supplied $VERILATOR_ROOT/include/verilated.mk file uses the OPT,
1784       OPT_FAST, OPT_SLOW and OPT_GLOBAL variables to control optimization.
1785       You can set these when compiling the output of Verilator with Make, for
1786       example:
1787
1788           make OPT_FAST="-Os -march=native" -f Vour.mk Vour__ALL.a
1789
1790       OPT_FAST specifies optimization flags for those parts of the model that
1791       are on the fast path. This is mostly code that is executed every cycle.
1792       OPT_SLOW applies to slow-path code, which executes rarely, often only
1793       once at the beginning or end of simulation. Note that OPT_SLOW is
1794       ignored if VM_PARALLEL_BUILDS is not 1, in which case all generated
1795       code will be compiled in a single compilation unit using OPT_FAST. See
1796       also the "--output-split" option. The OPT_GLOBAL variable applies to
1797       common code in the runtime library used by Verilated models (shipped in
1798       $VERILATOR_ROOT/include). Additional C++ files passed on the verilator
1799       command line use OPT_FAST. The OPT variable applies to all compilation
1800       units in addition to the specific OPT_* variables described above.
1801
1802       You can also use the -CFLAGS and/or -LDFLAGS options on the verilator
1803       command line to pass flags directly to the compiler or linker.
1804
1805       The default values of the OPT_* variables are chosen to yield good
1806       simulation speed with reasonable C++ compilation times. To this end,
1807       OPT_FAST is set to "-Os" by default. Higher optimization such as "-O2"
1808       or "-O3" may help (though often they provide only a very small
1809       performance benefit), but compile times may be excessively large even
1810       with medium sized designs. Compilation times can be improved at the
1811       expense of simulation speed by reducing optimization, for example with
1812       OPT_FAST="-O0". Often good simulation speed can be achieved with
1813       OPT_FAST="-O1 -fstrict-aliasing" but with improved compilation times.
1814       Files controlled by OPT_SLOW have little effect on performance and
1815       therefore OPT_SLOW is empty by default (equivalent to "-O0") for
1816       improved compilation speed. In common use-cases there should be little
1817       benefit in changing OPT_SLOW.  OPT_GLOBAL is set to "-Os" by default
1818       and there should rarely be a need to change it. As the runtime library
1819       is small in comparison to a lot of Verilated models, disabling
1820       optimization on the runtime library should not have a serious effect on
1821       overall compilation time, but may have detrimental effect on simulation
1822       speed, especially with tracing. In addition to the above, for best
1823       results use OPT="-march=native", the latest Clang compiler (about 10%
1824       faster than GCC), and link statically.
1825
1826       Generally the answer to which optimization level gives the best user
1827       experience depends on the use case and some experimentation can pay
1828       dividends. For a speedy debug cycle during development, especially on
1829       large designs where C++ compilation speed can dominate, consider using
1830       lower optimization to get to an executable faster. For throughput
1831       oriented use cases, for example regressions, it is usually worth
1832       spending extra compilation time to reduce total CPU time.
1833
1834       If you will be running many simulations on a single model, you can
1835       investigate profile guided optimization. With GCC, using
1836       -fprofile-arcs, then -fbranch-probabilities will yield another 15% or
1837       so.
1838
1839       Modern compilers also support link-time optimization (LTO), which can
1840       help especially if you link in DPI code. To enable LTO on GCC, pass
1841       "-flto" in both compilation and link. Note LTO may cause excessive
1842       compile times on large designs.
1843
1844       Unfortunately, using the optimizer with SystemC files can result in
1845       compilation taking several minutes. (The SystemC libraries have many
1846       little inlined functions that drive the compiler nuts.)
1847
1848       If you are using your own makefiles, you may want to compile the
1849       Verilated code with -DVL_INLINE_OPT=inline. This will inline functions,
1850       however this requires that all cpp files be compiled in a single
1851       compiler run.
1852
1853       You may uncover further tuning possibilities by profiling the Verilog
1854       code.  Use Verilator's --prof-cfuncs, then GCC's -g -pg.  You can then
1855       run either oprofile or gprof to see where in the C++ code the time is
1856       spent.  Run the gprof output through verilator_profcfunc and it will
1857       tell you what Verilog line numbers on which most of the time is being
1858       spent.
1859
1860       When done, please let the author know the results.  We like to keep
1861       tabs on how Verilator compares, and may be able to suggest additional
1862       improvements.
1863

FILES

1865       All output files are placed in the output directory specified with the
1866       "--Mdir" option, or "obj_dir" if not specified.
1867
1868       Verilator creates the following files in the output directory:
1869
1870       For --make gmake, it creates:
1871
1872           {prefix}.mk                         // Make include file for compiling
1873           {prefix}_classes.mk                 // Make include file with class names
1874           {prefix}_hier.mk                    // Make file for hierarchy blocks
1875           {prefix}_hierMkArgs.f               // Arguments for hierarchical Verilation.
1876
1877       For --make cmake, it creates:
1878
1879           {prefix}.cmake                      // CMake include script for compiling
1880           {prefix}_hierCMakeArgs.f            // Arguments for hierarchical Verilation.
1881
1882       For -cc and -sc mode, it also creates:
1883
1884           {prefix}.cpp                        // Top level C++ file
1885           {prefix}.h                          // Top level header
1886           {prefix}__Slow{__n}.cpp             // Constructors and infrequent cold routines
1887           {prefix}{__n}.cpp                   // Additional top C++ files (--output-split)
1888           {prefix}{each_verilog_module}.cpp   // Lower level internal C++ files
1889           {prefix}{each_verilog_module}.h     // Lower level internal header files
1890           {prefix}{each_verilog_module}{__n}.cpp   // Additional lower C++ files (--output-split)
1891
1892       For --hierarchy mode, it creates:
1893           {prefix}__hierVer.d                 // Make dependencies of the top
1894       module in the
1895                                                  hierarchical Verilation
1896           {prefix}__hier.dir/                 // Directory to store .dot,
1897       .vpp, .tree of the
1898                                                  top module in the
1899       hierarchical Verilation
1900           V{hier_block}/                      // Directory to Verilate each
1901       hierarchy block
1902
1903       In certain debug and other modes, it also creates:
1904
1905           {prefix}.xml                        // XML tree information (--xml)
1906           {prefix}__Dpi.cpp                   // DPI import and export wrappers
1907           {prefix}__Dpi.h                     // DPI import and export declarations
1908           {prefix}__Inlines.h                 // Inline support functions
1909           {prefix}__Syms.cpp                  // Global symbol table C++
1910           {prefix}__Syms.h                    // Global symbol table header
1911           {prefix}__Trace__Slow{__n}.cpp      // Wave file generation code (--trace)
1912           {prefix}__Trace{__n}.cpp            // Wave file generation code (--trace)
1913           {prefix}__cdc.txt                   // Clock Domain Crossing checks (--cdc)
1914           {prefix}__stats.txt                 // Statistics (--stats)
1915           {prefix}__idmap.txt                 // Symbol demangling (--protect-ids)
1916
1917       It also creates internal files that can be mostly ignored:
1918
1919           {mod_prefix}_{each_verilog_module}{__n}.vpp  // Pre-processed verilog
1920           {prefix}__ver.d                     // Make dependencies (-MMD)
1921           {prefix}__verFiles.dat              // Timestamps for skip-identical
1922           {prefix}{misc}.dot                  // Debugging graph files (--debug)
1923           {prefix}{misc}.tree                 // Debugging files (--debug)
1924
1925       After running Make, the C++ compiler may produce the following:
1926
1927           verilated{misc}.d                   // Intermediate dependencies
1928           verilated{misc}.o                   // Intermediate objects
1929           {mod_prefix}{misc}.d                // Intermediate dependencies
1930           {mod_prefix}{misc}.o                // Intermediate objects
1931           {prefix}                            // Final executable (w/--exe argument)
1932           {prefix}__ALL.a                     // Library of all Verilated objects
1933           {prefix}__ALL.cpp                   // Include of all code for single compile
1934           {prefix}{misc}.d                    // Intermediate dependencies
1935           {prefix}{misc}.o                    // Intermediate objects
1936

ENVIRONMENT

1938       LD_LIBRARY_PATH
1939           A generic Linux/OS variable specifying what directories have shared
1940           object (.so) files.  This path should include SystemC and any other
1941           shared objects needed at simulation runtime.
1942
1943       MAKE
1944           Names the executable of the make command invoked when using the
1945           --build option.  Some operating systems may require "gmake" to this
1946           variable to launch GNU make.  If this variable is not specified,
1947           "make" is used.
1948
1949       OBJCACHE
1950           Optionally specifies a caching or distribution program to place in
1951           front of all runs of the C++ compiler.  For example, "ccache".  If
1952           using distcc or icecc/icecream, they would generally be run under
1953           cache; see the documentation for those programs.  If OBJCACHE is
1954           not set, and at configure time ccache was present, ccache will be
1955           used as a default.
1956
1957       SYSTEMC
1958           Deprecated.  Used only if SYSTEMC_INCLUDE or SYSTEMC_LIBDIR is not
1959           set.  If set, specifies the directory containing the SystemC
1960           distribution.  If not specified, it will come from a default
1961           optionally specified at configure time (before Verilator was
1962           compiled).
1963
1964       SYSTEMC_ARCH
1965           Deprecated.  Used only if SYSTEMC_LIBDIR is not set.  Specifies the
1966           architecture name used by the SystemC kit.  This is the part after
1967           the dash in the lib-{...} directory name created by a 'make' in the
1968           SystemC distribution.  If not set, Verilator will try to intuit the
1969           proper setting, or use the default optionally specified at
1970           configure time (before Verilator was compiled).
1971
1972       SYSTEMC_CXX_FLAGS
1973           Specifies additional flags that are required to be passed to GCC
1974           when building the SystemC model.  System 2.3.0 may need this set to
1975           "-pthread".
1976
1977       SYSTEMC_INCLUDE
1978           If set, specifies the directory containing the systemc.h header
1979           file. If not specified, it will come from a default optionally
1980           specified at configure time (before Verilator was compiled), or
1981           computed from SYSTEMC/include.
1982
1983       SYSTEMC_LIBDIR
1984           If set, specifies the directory containing the libsystemc.a
1985           library. If not specified, it will come from a default optionally
1986           specified at configure time (before Verilator was compiled), or
1987           computed from SYSTEMC/lib-SYSTEMC_ARCH.
1988
1989       VERILATOR_BIN
1990           If set, specifies an alternative name of the "verilator" binary.
1991           May be used for debugging and selecting between multiple operating
1992           system builds.
1993
1994       VERILATOR_COVERAGE_BIN
1995           If set, specifies an alternative name of the "verilator_coverage
1996           binary".  May be used for debugging and selecting between multiple
1997           operating system builds.
1998
1999       VERILATOR_GDB
2000           If set, the command to run when using the --gdb option, such as
2001           "ddd".  If not specified, it will use "gdb".
2002
2003       VERILATOR_ROOT
2004           Specifies the directory containing the distribution kit.  This is
2005           used to find the executable, Perl library, and include files.  If
2006           not specified, it will come from a default optionally specified at
2007           configure time (before Verilator was compiled).  It should not be
2008           specified if using a pre-compiled Verilator package as the hard-
2009           coded value should be correct.
2010

CONNECTING TO C++

2012       Verilator creates a prefix.h and prefix.cpp file for the top level
2013       module, together with additional .h and .cpp files for internals. See
2014       the examples directory in the kit for examples.
2015
2016       After the model is created, there will be a prefix.mk file that may be
2017       used with Make to produce a prefix__ALL.a file with all required
2018       objects in it.  This is then linked with the user's C++ main loop to
2019       create the simulation executable.
2020
2021       The user must write the C++ main loop of the simulation.  Here is a
2022       simple example:
2023
2024               #include <verilated.h>          // Defines common routines
2025               #include <iostream>             // Need std::cout
2026               #include "Vtop.h"               // From Verilating "top.v"
2027
2028               Vtop *top;                      // Instantiation of module
2029
2030               vluint64_t main_time = 0;       // Current simulation time
2031               // This is a 64-bit integer to reduce wrap over issues and
2032               // allow modulus.  This is in units of the timeprecision
2033               // used in Verilog (or from --timescale-override)
2034
2035               double sc_time_stamp () {       // Called by $time in Verilog
2036                   return main_time;           // converts to double, to match
2037                                               // what SystemC does
2038               }
2039
2040               int main(int argc, char** argv) {
2041                   Verilated::commandArgs(argc, argv);   // Remember args
2042
2043                   top = new Vtop;             // Create instance
2044
2045                   top->reset_l = 0;           // Set some inputs
2046
2047                   while (!Verilated::gotFinish()) {
2048                       if (main_time > 10) {
2049                           top->reset_l = 1;   // Deassert reset
2050                       }
2051                       if ((main_time % 10) == 1) {
2052                           top->clk = 1;       // Toggle clock
2053                       }
2054                       if ((main_time % 10) == 6) {
2055                           top->clk = 0;
2056                       }
2057                       top->eval();            // Evaluate model
2058                       cout << top->out << endl;       // Read a output
2059                       main_time++;            // Time passes...
2060                   }
2061
2062                   top->final();               // Done simulating
2063                   //    // (Though this example doesn't get here)
2064                   delete top;
2065               }
2066
2067       Note signals are read and written as member variables of the model.
2068       You call the eval() method to evaluate the model.  When the simulation
2069       is complete call the final() method to execute any SystemVerilog final
2070       blocks, and complete any assertions. See "EVALUATION LOOP".
2071

CONNECTING TO SYSTEMC

2073       Verilator will convert the top level module to a SC_MODULE.  This
2074       module will plug directly into a SystemC netlist.
2075
2076       The SC_MODULE gets the same pinout as the Verilog module, with the
2077       following type conversions: Pins of a single bit become bool.  Pins
2078       2-32 bits wide become uint32_t's.  Pins 33-64 bits wide become sc_bv's
2079       or vluint64_t's depending on the --no-pins64 switch.  Wider pins become
2080       sc_bv's.  (Uints simulate the fastest so are used where possible.)
2081
2082       Lower modules are not pure SystemC code.  This is a feature, as using
2083       the SystemC pin interconnect scheme everywhere would reduce performance
2084       by an order of magnitude.
2085

DIRECT PROGRAMMING INTERFACE (DPI)

2087       Verilator supports SystemVerilog Direct Programming Interface import
2088       and export statements.  Only the SystemVerilog form ("DPI-C") is
2089       supported, not the original Synopsys-only DPI.
2090
2091   DPI Example
2092       In the SYSTEMC example above, if you wanted to import C++ functions
2093       into Verilog, put in our.v:
2094
2095          import "DPI-C" function int add (input int a, input int b);
2096
2097          initial begin
2098             $display("%x + %x = %x", 1, 2, add(1,2));
2099          endtask
2100
2101       Then after Verilating, Verilator will create a file Vour__Dpi.h with
2102       the prototype to call this function:
2103
2104           extern int add (int a, int b);
2105
2106       From the sc_main.cpp file (or another .cpp file passed to the Verilator
2107       command line, or the link), you'd then:
2108
2109           #include "svdpi.h"
2110           #include "Vour__Dpi.h"
2111           int add(int a, int b) { return a+b; }
2112
2113   DPI System Task/Functions
2114       Verilator extends the DPI format to allow using the same scheme to
2115       efficiently add system functions.  Simply use a dollar-sign prefixed
2116       system function name for the import, but note it must be escaped.
2117
2118          export "DPI-C" function integer \$myRand;
2119
2120          initial $display("myRand=%d", $myRand());
2121
2122       Going the other direction, you can export Verilog tasks so they can be
2123       called from C++:
2124
2125          export "DPI-C" task publicSetBool;
2126
2127          task publicSetBool;
2128             input bit in_bool;
2129             var_bool = in_bool;
2130          endtask
2131
2132       Then after Verilating, Verilator will create a file Vour__Dpi.h with
2133       the prototype to call this function:
2134
2135           extern void publicSetBool(svBit in_bool);
2136
2137       From the sc_main.cpp file, you'd then:
2138
2139           #include "Vour__Dpi.h"
2140           publicSetBool(value);
2141
2142       Or, alternatively, call the function under the design class.  This
2143       isn't DPI compatible but is easier to read and better supports multiple
2144       designs.
2145
2146           #include "Vour__Dpi.h"
2147           Vour::publicSetBool(value);
2148           // or top->publicSetBool(value);
2149
2150       Note that if the DPI task or function accesses any register or net
2151       within the RTL, it will require a scope to be set. This can be done
2152       using the standard functions within svdpi.h, after the module is
2153       instantiated, but before the task(s) and/or function(s) are called.
2154
2155       For example, if the top level module is instantiated with the name
2156       "dut" and the name references within tasks are all hierarchical
2157       (dotted) names with respect to that top level module, then the scope
2158       could be set with
2159
2160           #include "svdpi.h"
2161           ...
2162           svSetScope(svGetScopeFromName("TOP.dut"));
2163
2164       (Remember that Verilator adds a "TOP" to the top of the module
2165       hierarchy.)
2166
2167       Scope can also be set from within a DPI imported C function that has
2168       been called from Verilog by querying the scope of that function. See
2169       the sections on DPI Context Functions and DPI Header Isolation below
2170       and the comments within the svdpi.h header for more information.
2171
2172   DPI Display Functions
2173       Verilator allows writing $display like functions using this syntax:
2174
2175          import "DPI-C" function void
2176                \$my_display(input string formatted /*verilator sformat*/ );
2177
2178       The /*verilator sformat*/ indicates that this function accepts a
2179       $display like format specifier followed by any number of arguments to
2180       satisfy the format.
2181
2182   DPI Context Functions
2183       Verilator supports IEEE DPI Context Functions.  Context imports pass
2184       the simulator context, including calling scope name, and filename and
2185       line number to the C code.  For example, in Verilog:
2186
2187          import "DPI-C" context function int dpic_line();
2188          initial $display("This is line %d, again, line %d\n", `line, dpic_line());
2189
2190       This will call C++ code which may then use the svGet* functions to read
2191       information, in this case the line number of the Verilog statement that
2192       invoked the dpic_line function:
2193
2194          int dpic_line() {
2195              // Get a scope:  svScope scope = svGetScope();
2196
2197              const char* scopenamep = svGetNameFromScope(scope);
2198              assert(scopenamep);
2199
2200              const char* filenamep = "";
2201              int lineno = 0;
2202              if (svGetCallerInfo(&filenamep, &lineno)) {
2203                  printf("dpic_line called from scope %s on line %d\n",
2204                     scopenamep, lineno);
2205                  return lineno;
2206              } else {
2207                  return 0;
2208              }
2209          }
2210
2211       See the IEEE Standard for more information.
2212
2213   DPI Header Isolation
2214       Verilator places the IEEE standard header files such as svdpi.h into a
2215       separate include directory, vltstd (VeriLaTor STandarD).  When
2216       compiling most applications $VERILATOR_ROOT/include/vltstd would be in
2217       the include path along with the normal $VERILATOR_ROOT/include.
2218       However, when compiling Verilated models into other simulators which
2219       have their own svdpi.h and similar standard files with different
2220       contents, the vltstd directory should not be included to prevent
2221       picking up incompatible definitions.
2222
2223   Public Functions
2224       Instead of DPI exporting, there's also Verilator public functions,
2225       which are slightly faster, but less compatible.
2226

VERIFICATION PROCEDURAL INTERFACE (VPI)

2228       Verilator supports a very limited subset of the VPI.  This subset
2229       allows inspection, examination, value change callbacks, and depositing
2230       of values to public signals only.
2231
2232       VPI is enabled with the verilator --vpi switch.
2233
2234       To access signals via the VPI, Verilator must be told exactly which
2235       signals are to be accessed.  This is done using the Verilator public
2236       pragmas documented below.
2237
2238       Verilator has an important difference from an event based simulator;
2239       signal values that are changed by the VPI will not immediately
2240       propagate their values, instead the top level header file's eval()
2241       method must be called.  Normally this would be part of the normal
2242       evaluation (i.e. the next clock edge), not as part of the value change.
2243       This makes the performance of VPI routines extremely fast compared to
2244       event based simulators, but can confuse some test-benches that expect
2245       immediate propagation.
2246
2247       Note the VPI by its specified implementation will always be much slower
2248       than accessing the Verilator values by direct reference
2249       (structure->module->signame), as the VPI accessors perform lookup in
2250       functions at simulation runtime requiring at best hundreds of
2251       instructions, while the direct references are evaluated by the compiler
2252       and result in only a couple of instructions.
2253
2254       For signal callbacks to work the main loop of the program must call
2255       VerilatedVpi::callValueCbs().
2256
2257   VPI Example
2258       In the below example, we have readme marked read-only, and writeme
2259       which if written from outside the model will have the same semantics as
2260       if it changed on the specified clock edge.
2261
2262           cat >our.v <<'EOF'
2263             module our (input clk);
2264                reg readme   /*verilator public_flat_rd*/;
2265                reg writeme  /*verilator public_flat_rw @(posedge clk) */;
2266                initial $finish;
2267             endmodule
2268           EOF
2269
2270       There are many online tutorials and books on the VPI, but an example
2271       that accesses the above signal "readme" would be:
2272
2273           cat >sim_main.cpp <<'<<EOF'
2274             #include "Vour.h"
2275             #include "verilated.h"
2276             #include "verilated_vpi.h"  // Required to get definitions
2277
2278             vluint64_t main_time = 0;   // See comments in first example
2279             double sc_time_stamp() { return main_time; }
2280
2281             void read_and_check() {
2282                 vpiHandle vh1 = vpi_handle_by_name((PLI_BYTE8*)"TOP.our.readme", NULL);
2283                 if (!vh1) { vl_fatal(__FILE__, __LINE__, "sim_main", "No handle found"); }
2284                 const char* name = vpi_get_str(vpiName, vh1);
2285                 printf("Module name: %s\n", name);  // Prints "readme"
2286
2287                 s_vpi_value v;
2288                 v.format = vpiIntVal;
2289                 vpi_get_value(vh1, &v);
2290                 printf("Value of v: %d\n", v.value.integer);  // Prints "readme"
2291             }
2292
2293             int main(int argc, char** argv, char** env) {
2294                 Verilated::commandArgs(argc, argv);
2295                 Vour* top = new Vour;
2296                 Verilated::internalsDump();  // See scopes to help debug
2297                 while (!Verilated::gotFinish()) {
2298                     top->eval();
2299                     VerilatedVpi::callValueCbs();  // For signal callbacks
2300                     read_and_check();
2301                 }
2302                 delete top;
2303                 exit(0);
2304             }
2305           EOF
2306

CROSS COMPILATION

2308       Verilator supports cross-compiling Verilated code.  This is generally
2309       used to run Verilator on a Linux system and produce C++ code that is
2310       then compiled on Windows.
2311
2312       Cross compilation involves up to three different OSes.  The build
2313       system is where you configured and compiled Verilator, the host system
2314       where you run Verilator, and the target system where you compile the
2315       Verilated code and run the simulation.
2316
2317       Currently, Verilator requires the build and host system type to be the
2318       same, though the target system type may be different.  To support this,
2319       ./configure and make Verilator on the build system.  Then, run
2320       Verilator on the host system.  Finally, the output of Verilator may be
2321       compiled on the different target system.
2322
2323       To support this, none of the files that Verilator produces will
2324       reference any configure generated build-system specific files, such as
2325       config.h (which is renamed in Verilator to config_build.h to reduce
2326       confusion.)  The disadvantage of this approach is that
2327       include/verilatedos.h must self-detect the requirements of the target
2328       system, rather than using configure.
2329
2330       The target system may also require edits to the Makefiles, the simple
2331       Makefiles produced by Verilator presume the target system is the same
2332       type as the build system.
2333
2334   CMake
2335       Verilator can be run using CMake, which takes care of both running
2336       Verilator and compiling the output. There is a CMake example in the
2337       examples/ directory. The following is a minimal CMakeLists.txt that
2338       would build the code listed in "EXAMPLE C++ EXECUTION":
2339
2340           project(cmake_example)
2341           find_package(verilator HINTS $ENV{VERILATOR_ROOT})
2342           add_executable(Vour sim_main.cpp)
2343           verilate(Vour SOURCES our.v)
2344
2345       find_package will automatically find an installed copy of Verilator, or
2346       use a local build if VERILATOR_ROOT is set.
2347
2348       It is recommended to use CMake >= 3.12 and the Ninja generator, though
2349       other combinations should work. To build with CMake, change to the
2350       folder containing CMakeLists.txt and run:
2351
2352           mkdir build
2353           cd build
2354           cmake -GNinja ..
2355           ninja
2356
2357       Or to build with your system default generator:
2358
2359           mkdir build
2360           cd build
2361           cmake ..
2362           cmake --build .
2363
2364       If you're building the example you should have an executable to run:
2365
2366           ./Vour
2367
2368       The package sets the CMake variables verilator_FOUND, VERILATOR_ROOT
2369       and VERILATOR_BIN to the appropriate values, and also creates a
2370       verilate() function. verilate() will automatically create custom
2371       commands to run Verilator and add the generated C++ sources to the
2372       target specified.
2373
2374           verilate(target SOURCES source ... [TOP_MODULE top] [PREFIX name]
2375                    [TRACE] [TRACE_FST] [SYSTEMC] [COVERAGE]
2376                    [INCLUDE_DIRS dir ...] [OPT_SLOW ...] [OPT_FAST ...]
2377                    [OPT_GLOBAL ..] [DIRECTORY dir] [VERILATOR_ARGS ...])
2378
2379       Lowercase and ... should be replaced with arguments, the uppercase
2380       parts delimit the arguments and can be passed in any order, or left out
2381       entirely if optional.
2382
2383       verilate(target ...) can be called multiple times to add other verilog
2384       modules to an executable or library target.
2385
2386       When generating Verilated SystemC sources, you should also include the
2387       SystemC include directories and link to the SystemC libraries.
2388
2389       Verilator's CMake support provides a convenience function to
2390       automatically find and link to the SystemC library.  It can be used as:
2391
2392           verilator_link_systemc(target)
2393
2394       where target is the name of your target.
2395
2396       The search paths can be configured by setting some variables:
2397
2398       - The variables SYSTEMC_INCLUDE and SYSTEMC_LIBDIR to give a direct
2399       path to the SystemC include an library path.
2400
2401       - SYSTEMC_ROOT to set the installation prefix of an installed SystemC
2402         library.
2403
2404       - SYSTEMC to set the installation prefix of an installed SystemC
2405       library
2406         (same as above).
2407
2408       - When using Accellera's SystemC with CMake support, a CMake target is
2409       available that simplifies the above steps. This will only work if the
2410       SystemC installation can be found by CMake. This can be configured by
2411       setting the CMAKE_PREFIX_PATH variable during CMake configuration.
2412
2413       Don't forget to set the same C++ standard for the Verilated sources as
2414       the SystemC library. This can be specified using the SYSTEMC_CXX_FLAGS
2415       environment variable.
2416
2417       target
2418           Name of a target created by add_executable or add_library.
2419
2420       SOURCES
2421           List of Verilog files to Verilate. Must have at least one file.
2422
2423       PREFIX
2424           Optional. Sets the Verilator output prefix. Defaults to the name of
2425           the first source file with a "V" prepended. Must be unique in each
2426           call to verilate(), so this is necessary if you build a module
2427           multiple times with different parameters. Must be a valid C++
2428           identifier, i.e. contains no white space and only characters A-Z,
2429           a-z, 0-9 or _.
2430
2431       TOP_MODULE
2432           Optional. Sets the name of the top module. Defaults to the name of
2433           the first file in the SOURCES array.
2434
2435       TRACE
2436           Optional. Enables VCD tracing if present, equivalent to
2437           "VERILATOR_ARGS --trace".
2438
2439       TRACE_FST
2440           Optional. Enables FST tracing if present, equivalent to
2441           "VERILATOR_ARGS --trace-fst".
2442
2443       SYSTEMC
2444           Optional. Enables SystemC mode, defaults to C++ if not specified.
2445
2446       COVERAGE
2447           Optional. Enables coverage if present, equivalent to
2448           "VERILATOR_ARGS --coverage"
2449
2450       INCLUDE_DIRS
2451           Optional. Sets directories that Verilator searches (same as -y).
2452
2453       OPT_SLOW
2454           Optional. Set compiler flags for the slow path. You may want to
2455           reduce the optimization level to improve compile times with large
2456           designs.
2457
2458       OPT_FAST
2459           Optional. Set compiler flags for the fast path.
2460
2461       OPT_GLOBAL
2462           Optional. Set compiler flags for the common runtime library used by
2463           Verilated models.
2464
2465       DIRECTORY
2466           Optional. Set the verilator output directory. It is preferable to
2467           use the default, which will avoid collisions with other files.
2468
2469       VERILATOR_ARGS
2470           Optional. Extra arguments to Verilator. Do not specify --Mdir or
2471           --prefix here, use DIRECTORY or PREFIX.
2472

HIERARCHICAL VERILATION

2474       Large designs may take long (e.g. 10+ minutes) and huge memory (e.g.
2475       100+GB) to Verilate. One workaround is hierarchical Verilation, it is
2476       to Verilate each moderate size of building blocks and finally combine
2477       the building blocks.  The building block will be called "hierarchy
2478       block" later.
2479
2480       The current hierarchical Verilation is based on protect-lib. Each
2481       hierarchy block is Verilated to protect-lib. User modules of the
2482       hierarchy blocks will see a tiny wrapper generated by protect-lib
2483       instead of the actual design.
2484
2485   Usage
2486       All user need to do is mark moderate size of module as hierarchy block
2487       and pass --hierarchical option to verilator command.  There are two
2488       ways to mark a module:
2489
2490         a) Write /* verilator hier_block */ metacomment in HDL code
2491             See L</"LANGUAGE EXTENSIONS"> for more detail.
2492         b) add hier_block line in the configuration file.
2493            See C<hier_block> in L</"CONFIGURATION FILES"> for example.
2494
2495       You don't have to take care of hierarchical blocks when compiling
2496       Verilated C++ code. You can compile as usual.
2497           make -C obj_dir -f Vtop_module_name.mk
2498
2499       See also "Overlapping Verilation and compilation" to get executable
2500       quickly.
2501
2502   Limitations
2503       Because hierarchy blocks are Verilated to protect-lib, they have some
2504        limitations such as:
2505
2506          The block cannot be accessed using dot (.) from upper module.
2507          Signals in the block cannot be traced.
2508          Modport cannot be used at the hirarchical block boundary.
2509
2510       On the other hand, the following usage is supported.
2511
2512           - Nested hierarchy block. A hierarchy block may instantiate other
2513             hierarchy blocks.
2514           - Parameterized hierarchy block. Parameters of a hierarchy block can be
2515             overridden using #(.param_name(value)) construct.
2516
2517       The simulation speed may not be as fast as flat Verilation, in which
2518       all modules are globally scheduled.
2519
2520   Overlapping Verilation and compilation
2521       Verilator needs to run N + 2 times in hierarchical Verilation, where N
2522       is the number of hierarchy blocks.  1 of 2 is for the top module which
2523       refers wrappers of all other hierarchy blocks.  The other 1 of 2 is the
2524       initial run that searches modules marked with /*verilator hier_block*/
2525       metacomment and creates a plan and write in (prefix)_hier.mk.  This
2526       initial run internally invokes other N + 1 runs, so you don't have to
2527       care about these N + 1 times of run.
2528
2529       If -j <jobs> option is specified, Verilation for hierarchy blocks runs
2530       in parallel.
2531
2532       If --build option is also specified, C++ compilation also runs as soon
2533       as a hierarchy block is Verilated. C++ compilation and Verilation for
2534       other hierarchy blocks run simultaneously.
2535

MULTITHREADING

2537       Verilator supports multithreaded simulation models.
2538
2539       With --no-threads, the default, the model is not thread safe, and any
2540       use of more than one thread calling into one or even different
2541       Verilated models may result in unpredictable behavior. This gives the
2542       highest single thread performance.
2543
2544       With --threads 1, the generated model is single threaded, however the
2545       support libraries are multithread safe. This allows different
2546       instantiations of model(s) to potentially each be run under a different
2547       thread. All threading is the responsibility of the user's C++
2548       testbench.
2549
2550       With --threads N, where N is at least 2, the generated model will be
2551       designed to run in parallel on N threads. The thread calling eval()
2552       provides one of those threads, and the generated model will create and
2553       manage the other N-1 threads. It's the client's responsibility not to
2554       oversubscribe the available CPU cores. Under CPU oversubscription, the
2555       Verilated model should not livelock nor deadlock, however, you can
2556       expect performance to be far worse than it would be with proper ratio
2557       of threads and CPU cores.
2558
2559       The remainder of this section describe behavior with --threads 1 or
2560       --threads N (not --no-threads).
2561
2562       VL_THREADED is defined when compiling a threaded Verilated module,
2563       causing the Verilated support classes become threadsafe.
2564
2565       The thread used for constructing a model must be the same thread that
2566       calls eval() into the model, this is called the "eval thread". The
2567       thread used to perform certain global operations such as saving and
2568       tracing must be done by a "main thread". In most cases the eval thread
2569       and main thread are the same thread (i.e. the user's top C++ testbench
2570       runs on a single thread), but this is not required.
2571
2572       The --trace-threads options can be used to produce trace dumps using
2573       multiple threads. If --trace-threads is set without --threads, then
2574       --trace-threads will imply --threads 1, i.e.: the support libraries
2575       will be thread safe.
2576
2577       With --trace-threads 0, trace dumps are produced on the main thread.
2578       This again gives the highest single thread performance.
2579
2580       With --trace-threads N, where N is at least 1, N additional threads
2581       will be created and managed by the trace files (e.g.: VerilatedVcdC or
2582       VerilatedFstC), to generate the trace dump. The main thread will be
2583       released to proceed with execution as soon as possible, though some
2584       blocking of the main thread is still necessary while capturing the
2585       trace. Different trace formats can utilize a various number of threads.
2586       See the --trace-threads option.
2587
2588       When running a multithreaded model, the default Linux task scheduler
2589       often works against the model, by assuming threads are short lived, and
2590       thus often schedules threads using multiple hyperthreads within the
2591       same physical core. For best performance use the "numactl" program to
2592       (when the threading count fits) select unique physical cores on the
2593       same socket. The same applies for --trace-threads as well.
2594
2595       As an example, if a model was Verilated with "--threads 4", we consult
2596
2597          egrep 'processor|physical id|core id' /proc/cpuinfo
2598
2599       To select cores 0, 1, 2, and 3 that are all located on the same socket
2600       (0) but different physical cores.  (Also useful is "numactl
2601       --hardware", or "lscpu" but those doesn't show Hyperthreading cores.)
2602       Then we execute
2603
2604          numactl -m 0 -C 0,1,2,3 -- verilated_executable_name
2605
2606       This will limit memory to socket 0, and threads to cores 0, 1, 2, 3,
2607       (presumably on socket 0) optimizing performance.  Of course this must
2608       be adjusted if you want another simulator using e.g. socket 1, or if
2609       you Verilated with a different number of threads.  To see what CPUs are
2610       actually used, use --prof-threads.
2611
2612   Multithreaded Verilog and Library Support
2613       $display/$stop/$finish are delayed until the end of an eval() call in
2614       order to maintain ordering between threads. This may result in
2615       additional tasks completing after the $stop or $finish.
2616
2617           If using --coverage, the coverage routines are fully thread safe.
2618
2619           If using --dpi, Verilator assumes pure DPI imports are thread safe,
2620           balancing performance versus safety. See --threads-dpi.
2621
2622           If using --savable, the save/restore classes are not multithreaded
2623           and must be called only by the eval thread.
2624
2625           If using --sc, the SystemC kernel is not thread safe, therefore the
2626           eval thread and main thread must be the same.
2627
2628           If using --trace, the tracing classes must be constructed and
2629           called from the main thread.
2630
2631           If using --vpi, since SystemVerilog VPI was not architected by IEEE
2632           to be multithreaded, Verilator requires all VPI calls are only made
2633           from the main thread.
2634

CONFIGURATION FILES

2636       In addition to the command line, warnings and other features may be
2637       controlled by configuration files, typically named with the .vlt
2638       extension. An example:
2639
2640         `verilator_config
2641         lint_off -rule WIDTH
2642         lint_off -rule CASEX  -file "silly_vendor_code.v"
2643
2644       This disables WIDTH warnings globally, and CASEX for a specific file.
2645
2646       Configuration files are fed through the normal Verilog preprocessor
2647       prior to parsing, so `ifdefs, `defines, and comments may be used as if
2648       it were normal Verilog code.
2649
2650       Note that file or line-specific configuration only applies to files
2651       read after the configuration file. It is therefore recommended to pass
2652       the configuration file to Verilator as the first file.
2653
2654       The grammar of configuration commands is as follows:
2655
2656       `verilator_config
2657           Take remaining text and treat it as Verilator configuration
2658           commands.
2659
2660       coverage_on  [-file "<filename>" [-lines <line> [ - <line> ]]]
2661       coverage_off [-file "<filename>" [-lines <line> [ - <line> ]]]
2662           Enable/disable coverage for the specified filename (or wildcard
2663           with '*' or '?', or all files if omitted) and range of line numbers
2664           (or all lines if omitted).  Often used to ignore an entire module
2665           for coverage analysis purposes.
2666
2667       lint_on  [-rule <message>] [-file "<filename>" [-lines <line> [ -
2668       <line>]]]
2669       lint_off [-rule <message>] [-file "<filename>" [-lines <line> [ -
2670       <line>]]]
2671       lint_off [-rule <message>] [-file "<filename>"] [-match "<string>"]
2672           Enable/disables the specified lint warning, in the specified
2673           filename (or wildcard with '*' or '?', or all files if omitted) and
2674           range of line numbers (or all lines if omitted).
2675
2676           With lint_off using '*' will override any lint_on directives in the
2677           source, i.e. the warning will still not be printed.
2678
2679           If the -rule is omitted, all lint warnings (see list in -Wno-lint)
2680           are enabled/disabled.  This will override all later lint warning
2681           enables for the specified region.
2682
2683           If -match is set the linter warnings are matched against this
2684           (wildcard) string and are waived in case they match and iff rule
2685           and file (with wildcard) also match.
2686
2687           In previous versions -rule was named -msg. The latter is
2688           deprecated, but still works with a deprecation info, it may be
2689           removed in future versions.
2690
2691       tracing_on  [-file "<filename>" [-lines <line> [ - <line> ]]]
2692       tracing_off [-file "<filename>" [-lines <line> [ - <line> ]]]
2693           Enable/disable waveform tracing for all future signals declared in
2694           the specified filename (or wildcard with '*' or '?', or all files
2695           if omitted) and range of line numbers (or all lines if omitted).
2696
2697           For tracing_off, instances below any module in the files/ranges
2698           specified will also not be traced.
2699
2700       clock_enable -module "<modulename>" -var "<signame>"
2701           Indicate the signal is used to gate a clock, and the user takes
2702           responsibility for insuring there are no races related to it.
2703
2704           Same as /*verilator clock_enable*/, see "LANGUAGE EXTENSIONS" for
2705           more information and an example.
2706
2707       clocker -module "<modulename>" [-task "<taskname>"] -var "<signame>"
2708       clocker -module "<modulename>" [-function "<funcname>"] -var
2709       "<signame>"
2710       no_clocker -module "<modulename>" [-task "<taskname>"] -var "<signame>"
2711       no_clocker -module "<modulename>" [-function "<funcname>"] -var
2712       "<signame>"
2713           Indicate the signal is used as clock or not. This information is
2714           used by Verilator to mark the signal as clocker and propagate the
2715           clocker attribute automatically to derived signals. See "--clk" for
2716           more information.
2717
2718           Same as /*verilator clocker*/, see "LANGUAGE EXTENSIONS" for more
2719           information.
2720
2721       coverage_block_off -module "<modulename>" -block "<blockname>"
2722       coverage_block_off -file "<filename>" -line <lineno>
2723           Specifies the entire begin/end block should be ignored for coverage
2724           analysis purposes.  Can either be specified as a named block or as
2725           a filename and line number.
2726
2727           Same as /*verilator coverage_block_off*/, see "LANGUAGE EXTENSIONS"
2728           for more information.
2729
2730       full_case -file "<filename>" -lines <lineno>
2731       parallel_case -file "<filename>" -lines <lineno>
2732           Same as "//synopsys full_case" and "//synopsys parallel_case". When
2733           these synthesis directives are discovered, Verilator will either
2734           formally prove the directive to be true, or failing that, will
2735           insert the appropriate code to detect failing cases at simulation
2736           runtime and print an "Assertion failed" error message.
2737
2738       hier_block -module "<modulename>"
2739           Specifies that the module is a unit of hierarchical Verilation.
2740           Note that the setting is ignored unless --hierachical option is
2741           specified.  See "HIERARCHICAL VERILATION" for more information.
2742
2743       inline -module "<modulename>"
2744           Specifies the module may be inlined into any modules that use this
2745           module.  Same as /*verilator inline_module*/, and see that under
2746           "LANGUAGE EXTENSIONS" for more information.
2747
2748       isolate_assignments -module "<modulename>" [-task "<taskname>"] -var
2749       "<signame>"
2750       isolate_assignments -module "<modulename>" [-function "<funcname>"]
2751       -var "<signame>"
2752       isolate_assignments -module "<modulename>" -function "<fname>"
2753           Used to indicate the assignments to this signal in any blocks
2754           should be isolated into new blocks.  When there is a large
2755           combinatorial block that is resulting in a UNOPTFLAT warning,
2756           attaching this to the signal causing a false loop may clear up the
2757           problem.
2758
2759           Same as /* verilator isolate_assignments */, see "LANGUAGE
2760           EXTENSIONS" for more information.
2761
2762       no_inline -module "<modulename>"
2763           Specifies the module should not be inlined into any modules that
2764           use this module.  Same as /*verilator no_inline_module*/, and see
2765           that under "LANGUAGE EXTENSIONS" for more information.
2766
2767       no_inline [-module "<modulename>"] -task "<taskname>"
2768       no_inline [-module "<modulename>"] -function "<funcname>"
2769           Specify the function or task should not be inlined into where it is
2770           used.  This may reduce the size of the final executable when a task
2771           is used a very large number of times.  For this flag to work, the
2772           task and tasks below it must be pure; they cannot reference any
2773           variables outside the task itself.
2774
2775           Same as /*verilator no_inline_task*/, see "LANGUAGE EXTENSIONS" for
2776           more information.
2777
2778       public [-module "<modulename>"] [-task/-function "<taskname>"] -var
2779       "<signame>"
2780       public_flat [-module "<modulename>"] [-task/-function "<taskname>"]
2781       -var "<signame>"
2782       public_flat_rd [-module "<modulename>"] [-task/-function "<taskname>"]
2783       -var "<signame>"
2784       public_flat_rw [-module "<modulename>"] [-task/-function "<taskname>"]
2785       -var "<signame>" "@(edge)"
2786           Sets the variable to be public.  Same as /*verilator public*/ or
2787           /*verilator public_flat*/ etc, see those under "LANGUAGE
2788           EXTENSIONS" for more information.
2789
2790       sc_bv -module "<modulename>" [-task "<taskname>"] -var "<signame>"
2791       sc_bv -module "<modulename>" [-function "<funcname>"] -var "<signame>"
2792           Sets the port to be of sc_bv<width> type, instead of bool,
2793           vluint32_t or vluint64_t.  Same as /*verilator sc_bv*/, see that
2794           under "LANGUAGE EXTENSIONS" for more information.
2795
2796       sformat [-module "<modulename>"] [-task "<taskname>"] -var "<signame>"
2797       sformat [-module "<modulename>"] [-function "<funcname>"] -var
2798       "<signame>"
2799           Must be applied to the final argument of type "input string" of a
2800           function or task to indicate the function or task should pass all
2801           remaining arguments through $sformatf.  This allows creation of DPI
2802           functions with $display like behavior.  See the
2803           test_regress/t/t_dpi_display.v file for an example.
2804
2805           Same as /*verilator sformat*/, see "LANGUAGE EXTENSIONS" for more
2806           information.
2807
2808       split_var [-module "<modulename>"] [-task "<taskname>"] -var
2809       "<varname>"
2810       split_var [-module "<modulename>"] [-function "<funcname>"] -var
2811       "<varname>"
2812           Break the variable into multiple pieces typically to resolve
2813           UNOPTFLAT performance issues. Typically the variables to attach
2814           this to are recommended by Verilator itself, see UNOPTFLAT.
2815
2816           Same as /*verilator split_var*/, see "LANGUAGE EXTENSIONS" for more
2817           information.
2818

LANGUAGE STANDARD SUPPORT

2820   Verilog 2001 (IEEE 1364-2001) Support
2821       Verilator supports most Verilog 2001 language features.  This includes
2822       signed numbers, "always @*", generate statements, multidimensional
2823       arrays, localparam, and C-style declarations inside port lists.
2824
2825   Verilog 2005 (IEEE 1364-2005) Support
2826       Verilator supports most Verilog 2005 language features.  This includes
2827       the `begin_keywords and `end_keywords compiler directives, $clog2, and
2828       the uwire keyword.
2829
2830   SystemVerilog 2005 (IEEE 1800-2005) Support
2831       Verilator supports ==? and !=? operators, ++ and -- in some contexts,
2832       $bits, $countbits, $countones, $error, $fatal, $info, $isunknown,
2833       $onehot, $onehot0, $unit, $warning, always_comb, always_ff,
2834       always_latch, bit, byte, chandle, const, do-while, enum, export, final,
2835       import, int, interface, logic, longint, modport, package, program,
2836       shortint, struct, time, typedef, union, var, void, priority case/if,
2837       and unique case/if.
2838
2839       It also supports .name and .* interconnection.
2840
2841       Verilator partially supports concurrent assert and cover statements;
2842       see the enclosed coverage tests for the syntax which is allowed.
2843
2844   SystemVerilog 2012 (IEEE 1800-2012) Support
2845       Verilator implements a full SystemVerilog 2012 preprocessor, including
2846       function call-like preprocessor defines, default define arguments,
2847       `__FILE__, `__LINE__ and `undefineall.
2848
2849       Verilator currently has some support for SystemVerilog synthesis
2850       constructs. As SystemVerilog features enter common usage they are
2851       added; please file a bug if a feature you need is missing.
2852
2853   SystemVerilog 2017 (IEEE 1800-2017) Support
2854       Verilator supports the 2017 "for" loop constructs, and several minor
2855       cleanups made in 1800-2017.
2856
2857   Verilog AMS Support
2858       Verilator implements a very small subset of Verilog AMS (Verilog Analog
2859       and Mixed-Signal Extensions) with the subset corresponding to those VMS
2860       keywords with near equivalents in the Verilog 2005 or SystemVerilog
2861       2009 languages.
2862
2863       AMS parsing is enabled with "--language VAMS" or "--language
2864       1800+VAMS".
2865
2866       At present Verilator implements ceil, exp, floor, ln, log, pow, sqrt,
2867       string, and wreal.
2868
2869   Synthesis Directive Assertion Support
2870       With the --assert switch, Verilator reads any "//synopsys full_case" or
2871       "//synopsys parallel_case" directives.  The same applies to any
2872       "//ambit synthesis", "//cadence" or "//pragma" directives of the same
2873       form.
2874
2875       When these synthesis directives are discovered, Verilator will either
2876       formally prove the directive to be true, or failing that, will insert
2877       the appropriate code to detect failing cases at simulation runtime and
2878       print an "Assertion failed" error message.
2879
2880       Verilator likewise also asserts any "unique" or "priority"
2881       SystemVerilog keywords on case statement, as well as "unique" on if
2882       statements.  However, "priority if" is currently simply ignored.
2883

LANGUAGE EXTENSIONS

2885       The following additional constructs are the extensions Verilator
2886       supports on top of standard Verilog code.  Using these features outside
2887       of comments or `ifdef's may break other tools.
2888
2889       `__FILE__
2890           The __FILE__ define expands to the current filename as a string,
2891           like C++'s __FILE__.  This was incorporated into to the 1800-2009
2892           standard (but supported by Verilator since 2006!)
2893
2894       `__LINE__
2895           The __LINE__ define expands to the current filename as a string,
2896           like C++'s __LINE__.  This was incorporated into to the 1800-2009
2897           standard (but supported by Verilator since 2006!)
2898
2899       `error string
2900           This will report an error when encountered, like C++'s #error.
2901
2902       $c(string, ...);
2903           The string will be embedded directly in the output C++ code at the
2904           point where the surrounding Verilog code is compiled.  It may
2905           either be a standalone statement (with a trailing ; in the string),
2906           or a function that returns up to a 32-bit number (without a
2907           trailing ;). This can be used to call C++ functions from your
2908           Verilog code.
2909
2910           String arguments will be put directly into the output C++ code.
2911           Expression arguments will have the code to evaluate the expression
2912           inserted.  Thus to call a C++ function, $c("func(",a,")") will
2913           result in 'func(a)' in the output C++ code.  For input arguments,
2914           rather than hard-coding variable names in the string $c("func(a)"),
2915           instead pass the variable as an expression $c("func(",a,")").  This
2916           will allow the call to work inside Verilog functions where the
2917           variable is flattened out, and also enable other optimizations.
2918
2919           If you will be reading or writing any Verilog variables inside the
2920           C++ functions, the Verilog signals must be declared with
2921           /*verilator public*/.
2922
2923           You may also append an arbitrary number to $c, generally the width
2924           of the output.  [signal_32_bits = $c32("...");] This allows for
2925           compatibility with other simulators which require a differently
2926           named PLI function name for each different output width.
2927
2928       $display, $write, $fdisplay, $fwrite, $sformat, $swrite
2929           Format arguments may use C fprintf sizes after the % escape.  Per
2930           the Verilog standard, %x prints a number with the natural width,
2931           and %0x prints a number with minimum width.  Verilator extends this
2932           so %5x prints 5 digits per the C standard (this is unspecified in
2933           Verilog, but was incorporated into the 1800-2009).
2934
2935       `coverage_block_off
2936           Specifies the entire begin/end block should be ignored for coverage
2937           analysis.  Must be inside a code block, e.g. within a begin/end
2938           pair.  Same as /* verilator coverage_block_off */ and
2939           "coverage_block_off" in "CONFIGURATION FILES".
2940
2941       `systemc_header
2942           Take remaining text up to the next `verilog or `systemc_... mode
2943           switch and place it verbatim into the output .h file's header.
2944           Must be placed as a module item, e.g. directly inside a
2945           module/endmodule pair. Despite the name of this macro, this also
2946           works in pure C++ code.
2947
2948       `systemc_ctor
2949           Take remaining text up to the next `verilog or `systemc_... mode
2950           switch and place it verbatim into the C++ class constructor.  Must
2951           be placed as a module item, e.g. directly inside a module/endmodule
2952           pair. Despite the name of this macro, this also works in pure C++
2953           code.
2954
2955       `systemc_dtor
2956           Take remaining text up to the next `verilog or `systemc_... mode
2957           switch and place it verbatim into the C++ class destructor.  Must
2958           be placed as a module item, e.g. directly inside a module/endmodule
2959           pair. Despite the name of this macro, this also works in pure C++
2960           code.
2961
2962       `systemc_interface
2963           Take remaining text up to the next `verilog or `systemc_... mode
2964           switch and place it verbatim into the C++ class interface.  Must be
2965           placed as a module item, e.g. directly inside a module/endmodule
2966           pair. Despite the name of this macro, this also works in pure C++
2967           code.
2968
2969       `systemc_imp_header
2970           Take remaining text up to the next `verilog or `systemc_... mode
2971           switch and place it verbatim into the header of all files for this
2972           C++ class implementation.  Must be placed as a module item, e.g.
2973           directly inside a module/endmodule pair. Despite the name of this
2974           macro, this also works in pure C++ code.
2975
2976       `systemc_implementation
2977           Take remaining text up to the next `verilog or `systemc_... mode
2978           switch and place it verbatim into a single file of the C++ class
2979           implementation.  Must be placed as a module item, e.g. directly
2980           inside a module/endmodule pair. Despite the name of this macro,
2981           this also works in pure C++ code.
2982
2983           If you will be reading or writing any Verilog variables in the C++
2984           functions, the Verilog signals must be declared with /*verilator
2985           public*/.  See also the public task feature; writing an accessor
2986           may result in cleaner code.
2987
2988       `SYSTEMVERILOG
2989           The SYSTEMVERILOG, SV_COV_START and related standard defines are
2990           set by default when --language is 1800-*.
2991
2992       `VERILATOR
2993       `verilator
2994       `verilator3
2995           The VERILATOR, verilator and verilator3 defines are set by default
2996           so you may `ifdef around tool specific constructs.
2997
2998       `verilator_config
2999           Take remaining text up to the next `verilog mode switch and treat
3000           it as Verilator configuration commands.
3001
3002       `verilog
3003           Switch back to processing Verilog code after a `systemc_... mode
3004           switch.  The Verilog code returns to the last language mode
3005           specified with `begin_keywords, or SystemVerilog if none was
3006           specified.
3007
3008       /*verilator clock_enable*/
3009           Used after a signal declaration to indicate the signal is used to
3010           gate a clock, and the user takes responsibility for insuring there
3011           are no races related to it. (Typically by adding a latch, and
3012           running static timing analysis.) For example:
3013
3014              reg enable_r /*verilator clock_enable*/;
3015              wire gated_clk = clk & enable_r;
3016              always_ff @ (posedge clk)
3017                 enable_r <= enable_early;
3018
3019           The clock_enable attribute will cause the clock gate to be ignored
3020           in the scheduling algorithm, sometimes required for correct clock
3021           behavior, and always improving performance.  It's also a good idea
3022           to enable the IMPERFECTSCH warning, to ensure all clock enables are
3023           properly recognized.
3024
3025           Same as "clock_enable" in configuration files, see "CONFIGURATION
3026           FILES" for more information.
3027
3028       /*verilator clocker*/
3029       /*verilator no_clocker*/
3030           Used after a signal declaration to indicate the signal is used as
3031           clock or not. This information is used by Verilator to mark the
3032           signal as clocker and propagate the clocker attribute automatically
3033           to derived signals. See "--clk" for more information.
3034
3035           Same as "clocker" and "no_clocker" in configuration files, see
3036           "CONFIGURATION FILES" for more information.
3037
3038       /*verilator coverage_block_off*/
3039           Specifies the entire begin/end block should be ignored for coverage
3040           analysis purposes.
3041
3042           Same as "coverage_block_off" in configuration files, see
3043           "CONFIGURATION FILES" for more information.
3044
3045       /*verilator coverage_off*/
3046           Specifies that following lines of code should have coverage
3047           disabled.  Often used to ignore an entire module for coverage
3048           analysis purposes.
3049
3050       /*verilator coverage_on*/
3051           Specifies that following lines of code should have coverage re-
3052           enabled (if appropriate --coverage flags are passed) after being
3053           disabled earlier with /*verilator coverage_off*/.
3054
3055       /*verilator hier_block*/
3056           Specifies that the module is a unit of hierarchical Verilation.
3057           This metacomment must be between
3058            "module module_name(...);" and "endmodule".  The module will not
3059           be inlined nor uniquified for each instance in hierarchical
3060           Verilation.  Note that the metacomment is ignored unless
3061           --hierachical option is specified.
3062
3063           See "HIERARCHICAL VERILATION" for more information.
3064
3065       /*verilator inline_module*/
3066           Specifies the module the comment appears in may be inlined into any
3067           modules that use this module.  This is useful to speed up
3068           simulation runtime.  Note if using "--public" that signals under
3069           inlined submodules will be named submodule__DOT__subsignal as C++
3070           does not allow "." in signal names.
3071
3072           Same as "inline" in configuration files, see "CONFIGURATION FILES"
3073           for more information.
3074
3075       /*verilator isolate_assignments*/
3076           Used after a signal declaration to indicate the assignments to this
3077           signal in any blocks should be isolated into new blocks.  When
3078           there is a large combinatorial block that is resulting in a
3079           UNOPTFLAT warning, attaching this to the signal causing a false
3080           loop may clear up the problem.
3081
3082           IE, with the following
3083
3084               reg splitme /* verilator isolate_assignments*/;
3085               // Note the placement of the semicolon above
3086               always @* begin
3087                 if (....) begin
3088                    splitme = ....;
3089                    other assignments
3090                 end
3091               end
3092
3093           Verilator will internally split the block that assigns to "splitme"
3094           into two blocks:
3095
3096           It would then internally break it into (sort of):
3097
3098               // All assignments excluding those to splitme
3099               always @* begin
3100                 if (....) begin
3101                    other assignments
3102                 end
3103               end
3104               // All assignments to splitme
3105               always @* begin
3106                 if (....) begin
3107                    splitme = ....;
3108                 end
3109               end
3110
3111           Same as "isolate_assignments" in configuration files, see
3112           "CONFIGURATION FILES" for more information.
3113
3114       /*verilator lint_off msg*/
3115           Disable the specified warning message for any warnings following
3116           the comment.
3117
3118       /*verilator lint_on msg*/
3119           Re-enable the specified warning message for any warnings following
3120           the comment.
3121
3122       /*verilator lint_restore*/
3123           After a /*verilator lint_save*/, pop the stack containing lint
3124           message state.  Often this is useful at the bottom of include
3125           files.
3126
3127       /*verilator lint_save*/
3128           Push the current state of what lint messages are turned on or
3129           turned off to a stack.  Later meta-comments may then lint_on or
3130           lint_off specific messages, then return to the earlier message
3131           state by using /*verilator lint_restore*/.  For example:
3132
3133               // verilator lint_save
3134               // verilator lint_off SOME_WARNING
3135               ...  // code needing SOME_WARNING turned off
3136               // verilator lint_restore
3137
3138           If SOME_WARNING was on before the lint_off, it will now be restored
3139           to on, and if it was off before the lint_off it will remain off.
3140
3141       /*verilator no_inline_module*/
3142           Specifies the module the comment appears in should not be inlined
3143           into any modules that use this module.
3144
3145           Same as "no_inline" in configuration files, see "CONFIGURATION
3146           FILES" for more information.
3147
3148       /*verilator no_inline_task*/
3149           Used in a function or task variable definition section to specify
3150           the function or task should not be inlined into where it is used.
3151           This may reduce the size of the final executable when a task is
3152           used a very large number of times.  For this flag to work, the task
3153           and tasks below it must be pure; they cannot reference any
3154           variables outside the task itself.
3155
3156           Same as "no_inline" in configuration files, see "CONFIGURATION
3157           FILES" for more information.
3158
3159       /*verilator public*/ (parameter)
3160           Used after a parameter declaration to indicate the emitted C code
3161           should have the parameter values visible. Due to C++ language
3162           restrictions, this may only be used on 64-bit or narrower integral
3163           enumerations.
3164
3165               parameter [2:0] PARAM /*verilator public*/ = 2'b0;
3166
3167       /*verilator public*/ (typedef enum)
3168           Used after an enum typedef declaration to indicate the emitted C
3169           code should have the enum values visible. Due to C++ language
3170           restrictions, this may only be used on 64-bit or narrower integral
3171           enumerations.
3172
3173               typedef enum logic [2:0] { ZERO = 3'b0 } pub_t /*verilator public*/;
3174
3175       /*verilator public*/ (variable)
3176           Used after an input, output, register, or wire declaration to
3177           indicate the signal should be declared so that C code may read or
3178           write the value of the signal.  This will also declare this module
3179           public, otherwise use /*verilator public_flat*/.
3180
3181           Instead of using public variables, consider instead making a DPI or
3182           public function that accesses the variable.  This is nicer as it
3183           provides an obvious entry point that is also compatible across
3184           simulators.
3185
3186           Same as "public" in configuration files, see "CONFIGURATION FILES"
3187           for more information.
3188
3189       /*verilator public*/ (task/function)
3190           Used inside the declaration section of a function or task
3191           declaration to indicate the function or task should be made into a
3192           C++ function, public to outside callers.  Public tasks will be
3193           declared as a void C++ function, public functions will get the
3194           appropriate non-void (bool, uint32_t, etc) return type.  Any input
3195           arguments will become C++ arguments to the function.  Any output
3196           arguments will become C++ reference arguments.  Any local
3197           registers/integers will become function automatic variables on the
3198           stack.
3199
3200           Wide variables over 64 bits cannot be function returns, to avoid
3201           exposing complexities.  However, wide variables can be
3202           input/outputs; they will be passed as references to an array of
3203           32-bit numbers.
3204
3205           Generally, only the values of stored state (flops) should be
3206           written, as the model will NOT notice changes made to variables in
3207           these functions.  (Same as when a signal is declared public.)
3208
3209           You may want to use DPI exports instead, as it's compatible with
3210           other simulators.
3211
3212           Same as "public" in configuration files, see "CONFIGURATION FILES"
3213           for more information.
3214
3215       /*verilator public_flat*/ (variable)
3216           Used after an input, output, register, or wire declaration to
3217           indicate the signal should be declared so that C code may read or
3218           write the value of the signal.  This will not declare this module
3219           public, which means the name of the signal or path to it may change
3220           based upon the module inlining which takes place.
3221
3222           Same as "public_flat" in configuration files, see "CONFIGURATION
3223           FILES" for more information.
3224
3225       /*verilator public_flat_rd*/ (variable)
3226           Used after an input, output, register, or wire declaration to
3227           indicate the signal should be declared public_flat (see above), but
3228           read-only.
3229
3230           Same as "public_flat_rd" in configuration files, see "CONFIGURATION
3231           FILES" for more information.
3232
3233       /*verilator public_flat_rw @(<edge_list>) */ (variable)
3234           Used after an input, output, register, or wire declaration to
3235           indicate the signal should be declared public_flat_rd (see above),
3236           and also writable, where writes should be considered to have the
3237           timing specified by the given sensitivity edge list.  Set for all
3238           variables, ports and wires using the --public-flat-rw switch.
3239
3240           Same as "public_flat_rw" in configuration files, see "CONFIGURATION
3241           FILES" for more information.
3242
3243       /*verilator public_module*/
3244           Used after a module statement to indicate the module should not be
3245           inlined (unless specifically requested) so that C code may access
3246           the module.  Verilator automatically sets this attribute when the
3247           module contains any public signals or `systemc_ directives.  Also
3248           set for all modules when using the --public switch.
3249
3250           Same as "public" in configuration files, see "CONFIGURATION FILES"
3251           for more information.
3252
3253       /*verilator sc_clock*/
3254           Deprecated and ignored.  Previously used after an input declaration
3255           to indicate the signal should be declared in SystemC as a sc_clock
3256           instead of a bool.  This was needed in SystemC 1.1 and 1.2 only;
3257           versions 2.0 and later do not require clock pins to be sc_clocks
3258           and this is no longer needed and is ignored.
3259
3260       /*verilator sc_bv*/
3261           Used after a port declaration.  It sets the port to be of
3262           sc_bv<width> type, instead of bool, vluint32_t or vluint64_t.  This
3263           may be useful if the port width is parameterized and the
3264           instantiating C++ code wants to always have a sc_bv so it can
3265           accept any width.  In general you should avoid using this attribute
3266           when not necessary as with increasing usage of sc_bv the
3267           performance decreases significantly.
3268
3269           Same as "sc_bv" in configuration files, see "CONFIGURATION FILES"
3270           for more information.
3271
3272       /*verilator sformat*/
3273           Attached to the final argument of type "input string" of a function
3274           or task to indicate the function or task should pass all remaining
3275           arguments through $sformatf.  This allows creation of DPI functions
3276           with $display like behavior.  See the
3277           test_regress/t/t_dpi_display.v file for an example.
3278
3279           Same as "sformat" in configuration files, see "CONFIGURATION FILES"
3280           for more information.
3281
3282       /*verilator split_var*/
3283           Attached to a variable or a net declaration to break the variable
3284           into multiple pieces typically to resolve UNOPTFLAT performance
3285           issues.  Typically the variables to attach this to are recommended
3286           by Verilator itself, see UNOPTFLAT below.
3287
3288           For example, Verilator will internally convert a variable with the
3289           metacomment such as:
3290
3291               logic [7:0] x [0:1]  /*verilator split_var*/;
3292
3293           To:
3294
3295               logic [7:0] x__BRA__0__KET__ /*verilator split_var*/;
3296               logic [7:0] x__BRA__1__KET__ /*verilator split_var*/;
3297
3298           Note that the generated packed variables retain the split_var
3299           metacomment because they may be split into further smaller pieces
3300           according to the access patterns.
3301
3302           This only supports unpacked arrays, packed arrays, and packed
3303           structs of integer types (reg, logic, bit, byte, int...); otherwise
3304           if a split was requested but cannot occur a SPLITVAR warning is
3305           issued.  Splitting large arrays may slow down the Verilation speed,
3306           so use this only on variables that require it.
3307
3308           Same as "split_var" in configuration files, see "CONFIGURATION
3309           FILES" for more information.
3310
3311       /*verilator tag <text...>*/
3312           Attached after a variable or structure member to indicate opaque
3313           (to Verilator) text that should be passed through to the XML output
3314           as a tag, for use by downstream applications.
3315
3316       /*verilator tracing_off*/
3317           Disable waveform tracing for all future signals that are declared
3318           in this module, or instances below this module.  Often this is
3319           placed just after a primitive's module statement, so that the
3320           entire module and instances below it are not traced.
3321
3322       /*verilator tracing_on*/
3323           Re-enable waveform tracing for all future signals or instances that
3324           are declared.
3325

LANGUAGE LIMITATIONS

3327       There are some limitations and lack of features relative to the major
3328       closed-source simulators, by intent.
3329
3330   Synthesis Subset
3331       Verilator supports the Synthesis subset with other verification
3332       constructs being added over time. Verilator also simulates events as
3333       Synopsys's Design Compiler would; namely given a block of the form:
3334
3335               always @ (x)   y = x & z;
3336
3337       This will recompute y when there is even a potential for change in x or
3338       a change in z, that is when the flops computing x or z evaluate (which
3339       is what Design Compiler will synthesize.)  A compliant simulator would
3340       only calculate y if x changes.  We recommend using always_comb to make
3341       the code run the same everywhere.  Also avoid putting $displays in
3342       combo blocks, as they may print multiple times when not desired, even
3343       on compliant simulators as event ordering is not specified.
3344
3345   Signal Naming
3346       To avoid conflicts with C symbol naming, any character in a signal name
3347       that is not alphanumeric nor a single underscore will be replaced by
3348       __0hh where hh is the hex code of the character. To avoid conflicts
3349       with Verilator's internal symbols, any double underscore are replaced
3350       with ___05F (5F is the hex code of an underscore.)
3351
3352   Bind
3353       Verilator only supports "bind" to a target module name, not an instance
3354       path.
3355
3356   Class
3357       Verilator class support is limited but in active development.
3358       Verilator supports members, and methods. Verilator does not support
3359       class static members, class extend, or class parameters.
3360
3361   Dotted cross-hierarchy references
3362       Verilator supports dotted references to variables, functions and tasks
3363       in different modules. The portion before the dot must have a constant
3364       value; for example a[2].b is acceptable, while a[x].b is generally not.
3365
3366       References into generated and arrayed instances use the instance names
3367       specified in the Verilog standard; arrayed instances are named
3368       {instanceName}[{instanceNumber}] in Verilog, which becomes
3369       {instanceName}__BRA__{instanceNumber}__KET__ inside the generated C++
3370       code.
3371
3372   Latches
3373       Verilator is optimized for edge sensitive (flop based) designs.  It
3374       will attempt to do the correct thing for latches, but most performance
3375       optimizations will be disabled around the latch.
3376
3377   Structures and Unions
3378       Presently Verilator only supports packed structs and packed unions.
3379       Rand and randc tags on members are simply ignored.  All structures and
3380       unions are represented as a single vector, which means that generating
3381       one member of a structure from blocking, and another from non-blocking
3382       assignments is unsupported.
3383
3384   Time
3385       All delays (#) are ignored, as they are in synthesis.
3386
3387   Unknown states
3388       Verilator is mostly a two state simulator, not a four state simulator.
3389       However, it has two features which uncover most initialization bugs
3390       (including many that a four state simulator will miss.)
3391
3392       Identity comparisons (=== or !==) are converted to standard ==/!= when
3393       neither side is a constant.  This may make the expression yield a
3394       different result compared to a four state simulator.  An === comparison
3395       to X will always be false, so that Verilog code which checks for
3396       uninitialized logic will not fire.
3397
3398       Assigning X to a variable will actually assign a constant value as
3399       determined by the --x-assign switch.  This allows runtime
3400       randomization, thus if the value is actually used, the random value
3401       should cause downstream errors.  Integers also get randomized, even
3402       though the Verilog 2001 specification says they initialize to zero.
3403       Note however that randomization happens at initialization time and
3404       hence during a single simulation run, the same constant (but random)
3405       value will be used every time the assignment is executed.
3406
3407       All variables, depending on --x-initial setting, are typically randomly
3408       initialized using a function.  By running several random simulation
3409       runs you can determine that reset is working correctly.  On the first
3410       run, have the function initialize variables to zero.  On the second,
3411       have it initialize variables to one.  On the third and following runs
3412       have it initialize them randomly.  If the results match, reset works.
3413       (Note this is what the hardware will really do.)  In practice, just
3414       setting all variables to one at startup finds most problems (since
3415       typically control signals are active-high).
3416
3417       --x-assign applies to variables explicitly initialized or assigned an
3418       X. Uninitialized clocks are initialized to zero, while all other state
3419       holding variables are initialized to a random value.  Event driven
3420       simulators will generally trigger an edge on a transition from X to 1
3421       ("posedge") or X to 0 ("negedge"). However, by default, since clocks
3422       are initialized to zero, Verilator will not trigger an initial negedge.
3423       Some code (particularly for reset) may rely on X->0 triggering an edge.
3424       The --x-initial-edge switch enables this behavior. Comparing runs with
3425       and without this switch will find such problems.
3426
3427   Tri/Inout
3428       Verilator converts some simple tristate structures into two state.
3429       Pullup, pulldown, bufif0, bufif1, notif0, notif1, pmos, nmos, tri0 and
3430       tri1 are also supported.  Simple comparisons with === 1'bz are also
3431       supported.
3432
3433       An assignment of the form:
3434
3435           inout driver;
3436           wire driver = (enable) ? output_value : 1'bz;
3437
3438       Will be converted to
3439
3440           input driver;       // Value being driven in from "external" drivers
3441           output driver__en;  // True if driven from this module
3442           output driver__out; // Value being driven from this module
3443
3444       External logic will be needed to combine these signals with any
3445       external drivers.
3446
3447       Tristate drivers are not supported inside functions and tasks; an inout
3448       there will be considered a two state variable that is read and written
3449       instead of a four state variable.
3450
3451   Functions & Tasks
3452       All functions and tasks will be inlined (will not become functions in
3453       C.)  The only support provided is for simple statements in tasks (which
3454       may affect global variables).
3455
3456       Recursive functions and tasks are not supported.  All inputs and
3457       outputs are automatic, as if they had the Verilog 2001 "automatic"
3458       keyword prepended.  (If you don't know what this means, Verilator will
3459       do what you probably expect -- what C does. The default behavior of
3460       Verilog is different.)
3461
3462   Generated Clocks
3463       Verilator attempts to deal with generated and gated clocks correctly,
3464       however some cases cause problems in the scheduling algorithm which is
3465       optimized for performance.  The safest option is to have all clocks as
3466       primary inputs to the model, or wires directly attached to primary
3467       inputs.  For proper behavior clock enables may also need the
3468       /*verilator clock_enable*/ attribute.
3469
3470   Gate Primitives
3471       The 2-state gate primitives (and, buf, nand, nor, not, or, xnor, xor)
3472       are directly converted to behavioral equivalents.  The 3-state and MOS
3473       gate primitives are not supported.  Tables are not supported.
3474
3475   Specify blocks
3476       All specify blocks and timing checks are ignored. All min:typ:max
3477       delays use the typical value.
3478
3479   Array Initialization
3480       When initializing a large array, you need to use non-delayed
3481       assignments.  Verilator will tell you when this needs to be fixed; see
3482       the BLKLOOPINIT error for more information.
3483
3484   Array Out of Bounds
3485       Writing a memory element that is outside the bounds specified for the
3486       array may cause a different memory element inside the array to be
3487       written instead.  For power-of-2 sized arrays, Verilator will give a
3488       width warning and the address.  For non-power-of-2-sizes arrays, index
3489       0 will be written.
3490
3491       Reading a memory element that is outside the bounds specified for the
3492       array will give a width warning and wrap around the power-of-2 size.
3493       For non-power-of-2 sizes, it will return a unspecified constant of the
3494       appropriate width.
3495
3496   Assertions
3497       Verilator is beginning to add support for assertions.  Verilator
3498       currently only converts assertions to simple "if (...) error"
3499       statements, and coverage statements to increment the line counters
3500       described in the coverage section.
3501
3502       Verilator does not support SEREs yet.  All assertion and coverage
3503       statements must be simple expressions that complete in one cycle.
3504
3505   Encrypted Verilog
3506       Open source simulators like Verilator are unable to use encrypted RTL
3507       (i.e. IEEE P1735).  Talk to your IP vendor about delivering IP blocks
3508       via Verilator's --protect-lib feature.
3509
3510   Language Keyword Limitations
3511       This section describes specific limitations for each language keyword.
3512
3513       `__FILE__, `__LINE__, `begin_keywords, `begin_keywords,
3514       `begin_keywords, `begin_keywords, `begin_keywords, `define, `else,
3515       `elsif, `end_keywords, `endif, `error, `ifdef, `ifndef, `include,
3516       `line, `systemc_ctor, `systemc_dtor, `systemc_header,
3517       `systemc_imp_header, `systemc_implementation, `systemc_interface,
3518       `undef, `verilog
3519           Fully supported.
3520
3521       always, always_comb, always_ff, always_latch, and, assign, begin, buf,
3522       byte, case, casex, casez, default, defparam, do-while, else, end,
3523       endcase, endfunction, endgenerate, endmodule, endspecify, endtask,
3524       final, for, function, generate, genvar, if, initial, inout, input, int,
3525       integer, localparam, logic, longint, macromodule, module, nand,
3526       negedge, nor, not, or, output, parameter, posedge, reg, scalared,
3527       shortint, signed, supply0, supply1, task, time, tri, typedef, var,
3528       vectored, while, wire, xnor, xor
3529           Generally supported.
3530
3531       ++, -- operators
3532           Increment/decrement can only be used as standalone statements or in
3533           certain limited cases.
3534
3535       '{} operator
3536           Assignment patterns with order based, default, constant integer
3537           (array) or member identifier (struct/union) keys are supported.
3538           Data type keys and keys which are computed from a constant
3539           expression are not supported.
3540
3541       `uselib
3542           Uselib, a vendor specific library specification method, is ignored
3543           along with anything following it until the end of that line.
3544
3545       cast operator
3546           Casting is supported only between simple scalar types, signed and
3547           unsigned, not arrays nor structs.
3548
3549       chandle
3550           Treated as a "longint"; does not yet warn about operations that are
3551           specified as illegal on chandles.
3552
3553       disable
3554           Disable statements may be used only if the block being disabled is
3555           a block the disable statement itself is inside.  This was commonly
3556           used to provide loop break and continue functionality before
3557           SystemVerilog added the break and continue keywords.
3558
3559       inside
3560           Inside expressions may not include unpacked array traversal or $ as
3561           an upper bound.  Case inside and case matches are also unsupported.
3562
3563       interface
3564           Interfaces and modports, including with generated data types are
3565           supported.  Generate blocks around modports are not supported, nor
3566           are virtual interfaces nor unnamed interfaces.
3567
3568       shortreal
3569           Short floating point (shortreal) numbers are converted to real.
3570           Most other simulators either do not support float, or convert
3571           likewise.
3572
3573       specify specparam
3574           All specify blocks and timing checks are ignored.
3575
3576       uwire
3577           Verilator does not perform warning checking on uwires, it treats
3578           the uwire keyword as if it were the normal wire keyword.
3579
3580       $bits, $countbits, $countones, $error, $fatal, $finish, $info,
3581       $isunknown, $onehot, $onehot0, $readmemb, $readmemh, $signed, $stime,
3582       $stop, $time, $unsigned, $warning.
3583           Generally supported.
3584
3585       $dump/$dumpports and related
3586           $dumpfile or $dumpports will create a VCD or FST file (which is
3587           based on the --trace argument given when the model was Verilated).
3588           This will take effect starting at the next eval() call.  If you
3589           have multiple Verilated designs under the same C model, then this
3590           will dump signals only from the design containing the $dumpvars.
3591
3592           $dumpvars and $dumpports module identifier is ignored; the traced
3593           instances will always start at the top of the design. The levels
3594           argument is also ignored, use tracing_on/tracing_off pragmas
3595           instead.
3596
3597           $dumpportson/$dumpportsoff/$dumpportsall/$dumpportslimit filename
3598           argument is ignored, only a single trace file may be active at
3599           once.
3600
3601           $dumpall/$dumpportsall, $dumpon/$dumpportson,
3602           $dumpoff/$dumpportsoff, and $dumplimit/$dumpportlimit are currently
3603           ignored.
3604
3605       $exit, $finish, $stop
3606           The rarely used optional parameter to $finish and $stop is ignored.
3607           $exit is aliased to $finish.
3608
3609       $fopen, $fclose, $fdisplay, $ferror, $feof, $fflush, $fgetc, $fgets,
3610       $fscanf, $fwrite, $fscanf, $sscanf
3611           Generally supported.
3612
3613       $fullskew, $hold, $nochange, $period, $recovery, $recrem, $removal,
3614       $setup, $setuphold, $skew, $timeskew, $width
3615           All specify blocks and timing checks are ignored.
3616
3617       $random, $urandom, $urandom_range
3618           Use +verilator+seed argument to set the seed if there is no $random
3619           or $urandom optional argument to set the seed.  There is one random
3620           seed per C thread, not per module for $random, nor per object for
3621           random stability of $urandom/$urandom_range.
3622
3623       $readmemb, $readmemh
3624           Read memory commands should work properly.  Note Verilator and the
3625           Verilog specification does not include support for readmem to
3626           multi-dimensional arrays.
3627
3628       $test$plusargs, $value$plusargs
3629           Supported, but the instantiating C++/SystemC testbench must call
3630
3631               Verilated::commandArgs(argc, argv);
3632
3633           to register the command line before calling $test$plusargs or
3634           $value$plusargs.
3635

ERRORS AND WARNINGS

3637       Warnings may be disabled in three ways.  First, when the warning is
3638       printed it will include a warning code.  Simply surround the offending
3639       line with a lint_off/lint_on pair:
3640
3641               // verilator lint_off UNSIGNED
3642               if (`DEF_THAT_IS_EQ_ZERO <= 3) $stop;
3643               // verilator lint_on UNSIGNED
3644
3645       Second, warnings may be disabled using a configuration file with a
3646       lint_off command.  This is useful when a script is suppressing warnings
3647       and the Verilog source should not be changed.
3648
3649       Warnings may also be globally disabled by invoking Verilator with the
3650       "-Wno-warning" switch.  This should be avoided, as it removes all
3651       checking across the designs, and prevents other users from compiling
3652       your code without knowing the magic set of disables needed to
3653       successfully compile your design.
3654
3655   Error and Warning Format
3656       Warnings and errors printed by Verilator always match this regular
3657       expression:
3658
3659               %(Error|Warning)(-[A-Z0-9_]+)?: ((\S+):(\d+):((\d+):)? )?.*
3660
3661       Errors and warning start with a percent sign (historical heritage from
3662       Digital Equipment Corporation).  Some errors or warning have a code
3663       attached, with meanings described below.  Some errors also have a
3664       filename, line number and optional column number (starting at column 1
3665       to match GCC).
3666
3667       Following the error message, Verilator will typically show the user's
3668       source code corresponding to the error, prefixed by the line number and
3669       a " | ".  Following this is typically an arrow and ~ pointing at the
3670       error on the source line directly above.
3671
3672   List of all warnings
3673       ALWCOMBORDER
3674           Warns that an always_comb block has a variable which is set after
3675           it is used.  This may cause simulation-synthesis mismatches, as not
3676           all simulators allow this ordering.
3677
3678               always_comb begin
3679                  a = b;
3680                  b = 1;
3681               end
3682
3683           Ignoring this warning will only suppress the lint check, it will
3684           simulate correctly.
3685
3686       ASSIGNIN
3687           Error that an assignment is being made to an input signal.  This is
3688           almost certainly a mistake, though technically legal.
3689
3690               input a;
3691               assign a = 1'b1;
3692
3693           Ignoring this warning will only suppress the lint check, it will
3694           simulate correctly.
3695
3696       ASSIGNDLY
3697           Warns that you have an assignment statement with a delayed time in
3698           front of it, for example:
3699
3700               a <= #100 b;
3701               assign #100 a = b;
3702
3703           Ignoring this warning may make Verilator simulations differ from
3704           other simulators, however at one point this was a common style so
3705           disabled by default as a code style warning.
3706
3707       BLKANDNBLK
3708           BLKANDNBLK is an error that a variable comes from a mix of blocking
3709           and non-blocking assignments.
3710
3711           This is not illegal in SystemVerilog, but a violation of good
3712           coding practice. Verilator reports this as an error, because
3713           ignoring this warning may make Verilator simulations differ from
3714           other simulators.
3715
3716           It is generally safe to disable this error (with a "// verilator
3717           lint_off BLKANDNBLK" metacomment or the -Wno-BLKANDNBLK option)
3718           when one of the assignments is inside a public task, or when the
3719           blocking and non-blocking assignments have non-overlapping bits and
3720           structure members.
3721
3722           Generally, this is caused by a register driven by both combo logic
3723           and a flop:
3724
3725                 logic [1:0] foo;
3726                 always @ (posedge clk)  foo[0] <= ...
3727                 always @* foo[1] = ...
3728
3729           Simply use a different register for the flop:
3730
3731                 logic [1:0] foo;
3732                 always @ (posedge clk)  foo_flopped[0] <= ...
3733                 always @* foo[0] = foo_flopped[0];
3734                 always @* foo[1] = ...
3735
3736           Or, this may also avoid the error:
3737
3738                 logic [1:0] foo /*verilator split_var*/;
3739
3740       BLKSEQ
3741           This indicates that a blocking assignment (=) is used in a
3742           sequential block.  Generally non-blocking/delayed assignments (<=)
3743           are used in sequential blocks, to avoid the possibility of
3744           simulator races.  It can be reasonable to do this if the generated
3745           signal is used ONLY later in the same block, however this style is
3746           generally discouraged as it is error prone.
3747
3748                 always @ (posedge clk)  foo = ...
3749
3750           Disabled by default as this is a code style warning; it will
3751           simulate correctly.
3752
3753       BLKLOOPINIT
3754           This indicates that the initialization of an array needs to use
3755           non-delayed assignments.  This is done in the interest of speed; if
3756           delayed assignments were used, the simulator would have to copy
3757           large arrays every cycle.  (In smaller loops, loop unrolling allows
3758           the delayed assignment to work, though it's a bit slower than a
3759           non-delayed assignment.)  Here's an example
3760
3761                   always @ (posedge clk)
3762                       if (~reset_l) begin
3763                           for (i=0; i<`ARRAY_SIZE; i++) begin
3764                               array[i] = 0;  // Non-delayed for verilator
3765                           end
3766
3767           This message is only seen on large or complicated loops because
3768           Verilator generally unrolls small loops.  You may want to try
3769           increasing --unroll-count (and occasionally --unroll-stmts) which
3770           will raise the small loop bar to avoid this error.
3771
3772       BOUNDED
3773           This indicates that bounded queues (e.g. "var name[$ : 3]") are
3774           unsupported.
3775
3776           Ignoring this warning may make Verilator simulations differ from
3777           other simulators.
3778
3779       BSSPACE
3780           Warns that a backslash is followed by a space then a newline.
3781           Likely the intent was to have a backslash directly followed by a
3782           newline (e.g. when making a `define) and there's accidentally white
3783           space at the end of the line.  If the space is not accidental,
3784           suggest removing the backslash in the code as it serves no
3785           function.
3786
3787           Ignoring this warning will only suppress the lint check, it will
3788           simulate correctly.
3789
3790       CASEINCOMPLETE
3791           Warns that inside a case statement there is a stimulus pattern for
3792           which there is no case item specified.  This is bad style, if a
3793           case is impossible, it's better to have a "default: $stop;" or just
3794           "default: ;" so that any design assumption violations will be
3795           discovered in simulation.
3796
3797           Ignoring this warning will only suppress the lint check, it will
3798           simulate correctly.
3799
3800       CASEOVERLAP
3801           Warns that inside a case statement you have case values which are
3802           detected to be overlapping.  This is bad style, as moving the order
3803           of case values will cause different behavior.  Generally the values
3804           can be respecified to not overlap.
3805
3806           Ignoring this warning will only suppress the lint check, it will
3807           simulate correctly.
3808
3809       CASEWITHX
3810           Warns that a case statement contains a constant with a "x".
3811           Verilator is two-state so interpret such items as always false.
3812           Note a common error is to use a "X" in a case or casez statement
3813           item; often what the user instead intended is to use a casez with
3814           "?".
3815
3816           Ignoring this warning will only suppress the lint check, it will
3817           simulate correctly.
3818
3819       CASEX
3820           Warns that it is simply better style to use casez, and "?" in place
3821           of "x"'s.  See
3822           <http://www.sunburst-design.com/papers/CummingsSNUG1999Boston_FullParallelCase_rev1_1.pdf>
3823
3824           Ignoring this warning will only suppress the lint check, it will
3825           simulate correctly.
3826
3827       CASTCONST
3828           Warns that a dynamic cast ($cast) is unnecessary as the $cast will
3829           always succeed or fail.  If it will always fail, the $cast is
3830           useless. If it will always succeed a static cast may be preferred.
3831
3832           Ignoring this warning will only suppress the lint check, it will
3833           simulate correctly.  On other simulators, not fixing CASTCONST may
3834           result in decreased performance.
3835
3836       CDCRSTLOGIC
3837           With --cdc only, warns that asynchronous flop reset terms come from
3838           other than primary inputs or flopped outputs, creating the
3839           potential for reset glitches.
3840
3841       CLKDATA
3842           Warns that clock signal is mixed used with/as data signal. The
3843           checking for this warning is enabled only if user has explicitly
3844           marked some signal as clocker using command line option or in-
3845           source meta comment (see "--clk").
3846
3847           The warning can be disabled without affecting the simulation
3848           result. But it is recommended to check the warning as this may
3849           degrade the performance of the Verilated model.
3850
3851       CMPCONST
3852           Warns that you are comparing a value in a way that will always be
3853           constant.  For example "X > 1" will always be true when X is a
3854           single bit wide.
3855
3856           Ignoring this warning will only suppress the lint check, it will
3857           simulate correctly.
3858
3859       COLONPLUS
3860           Warns that a :+ is seen. Likely the intent was to use +: to select
3861           a range of bits. If the intent was a range that is explicitly
3862           positive, suggest adding a space, e.g. use ": +".
3863
3864           Ignoring this warning will only suppress the lint check, it will
3865           simulate correctly.
3866
3867       COMBDLY
3868           Warns that you have a delayed assignment inside of a combinatorial
3869           block.  Using delayed assignments in this way is considered bad
3870           form, and may lead to the simulator not matching synthesis.  If
3871           this message is suppressed, Verilator, like synthesis, will convert
3872           this to a non-delayed assignment, which may result in logic races
3873           or other nasties.  See
3874           <http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA_rev1_2.pdf>
3875
3876           Ignoring this warning may make Verilator simulations differ from
3877           other simulators.
3878
3879       CONTASSREG
3880           Error that a continuous assignment is setting a reg. According to
3881           IEEE Verilog, but not SystemVerilog, a wire must be used as the
3882           target of continuous assignments.
3883
3884           This error is only reported when "--language 1364-1995",
3885           "--language 1364-2001", or "--language 1364-2005" is used.
3886
3887           Ignoring this error will only suppress the lint check, it will
3888           simulate correctly.
3889
3890       DECLFILENAME
3891           Warns that a module or other declaration's name doesn't match the
3892           filename with path and extension stripped that it is declared in.
3893           The filename a modules/interfaces/programs is declared in should
3894           match the name of the module etc. so that -y directory searching
3895           will work.  This warning is printed for only the first mismatching
3896           module in any given file, and -v library files are ignored.
3897
3898           Disabled by default as this is a code style warning; it will
3899           simulate correctly.
3900
3901       DEFPARAM
3902           Warns that the "defparam" statement was deprecated in Verilog 2001
3903           and all designs should now be using the #(...) format to specify
3904           parameters.
3905
3906           Disabled by default as this is a code style warning; it will
3907           simulate correctly.
3908
3909       DETECTARRAY
3910           Error when Verilator tries to deal with a combinatorial loop that
3911           could not be flattened, and which involves a datatype which
3912           Verilator cannot handle, such as an unpacked struct or a large
3913           unpacked array. This typically occurs when -Wno-UNOPTFLAT has been
3914           used to override an UNOPTFLAT warning (see below).
3915
3916           The solution is to break the loop, as described for UNOPTFLAT.
3917
3918       DIDNOTCONVERGE
3919           Error at simulation runtime when model did not properly settle.
3920
3921           Verilator sometimes has to evaluate combinatorial logic multiple
3922           times, usually around code where a UNOPTFLAT warning was issued,
3923           but disabled.  For example:
3924
3925              always_comb b = ~a;
3926              always_comb a = b
3927
3928           This code will toggle forever, and thus to prevent an infinite
3929           loop, the executable will give the didn't converge error.
3930
3931           To debug this, first review any UNOPTFLAT warnings that were
3932           ignored.  Though typically it is safe to ignore UNOPTFLAT (at a
3933           performance cost), at the time of issuing a UNOPTFLAT Verilator did
3934           not know if the logic would eventually converge and assumed it
3935           would.
3936
3937           Next, run Verilator with --prof-cfuncs.  Run make on the generated
3938           files with "CPP_FLAGS=-DVL_DEBUG", to allow enabling simulation
3939           runtime debug messages.  Rerun the test.  Now just before the
3940           convergence error you should see additional output similar to this:
3941
3942              CHANGE: filename.v:1: b
3943              CHANGE: filename.v:2: a
3944
3945           This means that signal b and signal a keep changing, inspect the
3946           code that modifies these signals.  Note if many signals are getting
3947           printed then most likely all of them are oscillating.  It may also
3948           be that e.g. "a" may be oscillating, then "a" feeds signal "c"
3949           which then is also reported as oscillating.
3950
3951           Finally, rare, more difficult cases can be debugged like a "C"
3952           program; either enter GDB and use its tracing facilities, or edit
3953           the generated C++ code to add appropriate prints to see what is
3954           going on.
3955
3956       ENDLABEL
3957           Warns that a label attached to a "end"-something statement does not
3958           match the label attached to the block start.
3959
3960           Ignoring this warning will only suppress the lint check, it will
3961           simulate correctly.
3962
3963       GENCLK
3964           Deprecated and no longer used as a warning.  Used to indicate that
3965           the specified signal was is generated inside the model, and also
3966           being used as a clock.
3967
3968       HIERBLOCK
3969           Warns that the top module is marked as a hierarchy block by
3970           hier_block metacomment, which is not legal.  This setting on the
3971           top module will be ignored.  =item IFDEPTH
3972
3973           Warns that if/if else statements have exceeded the depth specified
3974           with --if-depth, as they are likely to result in slow priority
3975           encoders.  Statements below unique and priority if statements are
3976           ignored.  Solutions include changing the code to a case statement,
3977           or a SystemVerilog 'unique if' or 'priority if'.
3978
3979           Disabled by default as this is a code style warning; it will
3980           simulate correctly.
3981
3982       IGNOREDRETURN
3983           Warns that a non-void function is being called as a task, and hence
3984           the return value is being ignored.
3985
3986           This warning is required by IEEE. The portable way to suppress this
3987           warning (in SystemVerilog) is to use a void cast, e.g.
3988
3989               void'(function_being_called_as_task());
3990
3991           Ignoring this warning will only suppress the lint check, it will
3992           simulate correctly.
3993
3994       IMPERFECTSCH
3995           Warns that the scheduling of the model is not absolutely perfect,
3996           and some manual code edits may result in faster performance.  This
3997           warning defaults to off, is not part of -Wall, and must be turned
3998           on explicitly before the top module statement is processed.
3999
4000       IMPLICIT
4001           Warns that a wire is being implicitly declared (it is a single bit
4002           wide output from a sub-module.)  While legal in Verilog, implicit
4003           declarations only work for single bit wide signals (not buses), do
4004           not allow using a signal before it is implicitly declared by an
4005           instance, and can lead to dangling nets.  A better option is the
4006           /*AUTOWIRE*/ feature of Verilog-Mode for Emacs, available from
4007           <https://www.veripool.org/verilog-mode>
4008
4009           Ignoring this warning will only suppress the lint check, it will
4010           simulate correctly.
4011
4012       IMPORTSTAR
4013           Warns that an "import package::*" statement is in $unit scope. This
4014           causes the imported symbols to pollute the global namespace,
4015           defeating much of the purpose of having a package. Generally
4016           "import ::*" should only be used inside a lower scope such as a
4017           package or module.
4018
4019           Disabled by default as this is a code style warning; it will
4020           simulate correctly.
4021
4022       IMPURE
4023           Warns that a task or function that has been marked with /*verilator
4024           no_inline_task*/ references variables that are not local to the
4025           task.  Verilator cannot schedule these variables correctly.
4026
4027           Ignoring this warning may make Verilator simulations differ from
4028           other simulators.
4029
4030       INCABSPATH
4031           Warns that an `include filename specifies an absolute path.  This
4032           means the code will not work on any other system with a different
4033           file system layout.  Instead of using absolute paths, relative
4034           paths (preferably without any directory specified whatsoever)
4035           should be used, and +incdir used on the command line to specify the
4036           top include source directories.
4037
4038           Disabled by default as this is a code style warning; it will
4039           simulate correctly.
4040
4041       INFINITELOOP
4042           Warns that a while or for statement has a condition that is always
4043           true.  and thus results in an infinite loop if the statement ever
4044           executes.
4045
4046           This might be unintended behavior if the loop body contains
4047           statements that in other simulators would make time pass, which
4048           Verilator is ignoring due to e.g. STMTDLY warnings being disabled.
4049
4050           Ignoring this warning will only suppress the lint check, it will
4051           simulate correctly (i.e. hang due to the infinite loop).
4052
4053       INITIALDLY
4054           Warns that you have a delayed assignment inside of an initial or
4055           final block.  If this message is suppressed, Verilator will convert
4056           this to a non-delayed assignment.  See also the COMBDLY warning.
4057
4058           Ignoring this warning may make Verilator simulations differ from
4059           other simulators.
4060
4061       INSECURE
4062           Warns that the combination of options selected may be defeating the
4063           attempt to protect/obscure identifiers or hide information in the
4064           model.  Correct the options provided, or inspect the output code to
4065           see if the information exposed is acceptable.
4066
4067           Ignoring this warning will only suppress the lint check, it will
4068           simulate correctly.
4069
4070       LATCH
4071           Warns that a signal is not assigned in all control paths of a
4072           combinational always block, resulting in the inference of a latch.
4073           For intentional latches, consider using the always_latch
4074           (SystemVerilog) keyword instead.  The warning may be disabled with
4075           a lint_off pragma around the always block.
4076
4077           Ignoring this warning will only suppress the lint check, it will
4078           simulate correctly.
4079
4080       LITENDIAN
4081           Warns that a packed vector is declared with little endian bit
4082           numbering (i.e. [0:7]).  Big endian bit numbering is now the
4083           overwhelming standard, and little numbering is now thus often due
4084           to simple oversight instead of intent.
4085
4086           Also warns that an instance is declared with little endian range
4087           (i.e. [0:7] or [7]) and is connected to a N-wide signal. Based on
4088           IEEE the bits will likely be backwards from what you expect (i.e.
4089           instance [0] will connect to signal bit [N-1] not bit [0]).
4090
4091           Ignoring this warning will only suppress the lint check, it will
4092           simulate correctly.
4093
4094       MODDUP
4095           Warns that a module has multiple definitions.  Generally this
4096           indicates a coding error, or a mistake in a library file and it's
4097           good practice to have one module per file (and only put each file
4098           once on the command line) to avoid these issues.  For some gate
4099           level netlists duplicates are sometimes unavoidable, and MODDUP
4100           should be disabled.
4101
4102           Ignoring this warning will cause the more recent module definition
4103           to be discarded.
4104
4105       MULTIDRIVEN
4106           Warns that the specified signal comes from multiple always blocks.
4107           This is often unsupported by synthesis tools, and is considered bad
4108           style.  It will also cause longer simulation runtimes due to
4109           reduced optimizations.
4110
4111           Ignoring this warning will only slow simulations, it will simulate
4112           correctly.
4113
4114       MULTITOP
4115           Warns that there are multiple top level modules, that is modules
4116           not instantiated by any other module, and both modules were put on
4117           the command line (not in a library). Three likely cases:
4118
4119           1. A single module is intended to be the top. This warning then
4120           occurs because some low level instance is being read in, but is not
4121           really needed as part of the design.  The best solution for this
4122           situation is to ensure that only the top module is put on the
4123           command line without any flags, and all remaining library files are
4124           read in as libraries with -v, or are automatically resolved by
4125           having filenames that match the module names.
4126
4127           2. A single module is intended to be the top, the name of it is
4128           known, and all other modules should be ignored if not part of the
4129           design.  The best solution is to use the --top option to specify
4130           the top module's name. All other modules that are not part of the
4131           design will be for the most part ignored (they must be clean in
4132           syntax and their contents will be removed as part of the Verilog
4133           module elaboration process.)
4134
4135           3. Multiple modules are intended to be design tops, e.g. when
4136           linting a library file.  As multiple modules are desired, disable
4137           the MULTITOP warning.  All input/outputs will go uniquely to each
4138           module, with any conflicting and identical signal names being made
4139           unique by adding a prefix based on the top module name followed by
4140           __02E (a Verilator-encoded ASCII ".').  This renaming is done even
4141           if the two modules' signals seem identical, e.g. multiple modules
4142           with a "clk" input.
4143
4144       NOLATCH
4145           Warns that no latch was detected in an always_latch block. The
4146           warning may be disabled with a lint_off pragma around the always
4147           block, but recoding using a regular always may be more appropriate.
4148
4149           Ignoring this warning will only suppress the lint check, it will
4150           simulate correctly.
4151
4152       PINCONNECTEMPTY
4153           Warns that an instance has a pin which is connected to .pin_name(),
4154           e.g. not another signal, but with an explicit mention of the pin.
4155           It may be desirable to disable PINCONNECTEMPTY, as this indicates
4156           intention to have a no-connect.
4157
4158           Disabled by default as this is a code style warning; it will
4159           simulate correctly.
4160
4161       PINMISSING
4162           Warns that a module has a pin which is not mentioned in an
4163           instance.  If a pin is not missing it should still be specified on
4164           the instance declaration with a empty connection, using
4165           "(.pin_name())".
4166
4167           Ignoring this warning will only suppress the lint check, it will
4168           simulate correctly.
4169
4170       PINNOCONNECT
4171           Warns that an instance has a pin which is not connected to another
4172           signal.
4173
4174           Disabled by default as this is a code style warning; it will
4175           simulate correctly.
4176
4177       PKGNODECL
4178           Error that a package/class appears to have been referenced that has
4179           not yet been declared.  According to IEEE 1800-2017 26.3 all
4180           packages must be declared before being used.
4181
4182       PROCASSWIRE
4183           Error that a procedural assignment is setting a wire. According to
4184           IEEE, a var/reg must be used as the target of procedural
4185           assignments.
4186
4187       RANDC
4188           Warns that the 'randc' keyword is currently unsupported, and that
4189           it is being converted to 'rand'.
4190
4191       REALCVT
4192           Warns that a real number is being implicitly rounded to an integer,
4193           with possible loss of precision.
4194
4195       REDEFMACRO
4196           Warns that you have redefined the same macro with a different
4197           value, for example:
4198
4199               `define MACRO def1
4200               //...
4201               `define MACRO otherdef
4202
4203           The best solution is to use a different name for the second macro.
4204           If this is not possible, add a undef to indicate the code is
4205           overriding the value:
4206
4207               `define MACRO def1
4208               //...
4209               `undef MACRO
4210               `define MACRO otherdef
4211
4212       SELRANGE
4213           Warns that a selection index will go out of bounds:
4214
4215               wire vec[6:0];
4216               initial out = vec[7];  // There is no 7
4217
4218           Verilator will assume zero for this value, instead of X.  Note that
4219           in some cases this warning may be false, when a condition upstream
4220           or downstream of the access means the access out of bounds will
4221           never execute or be used.
4222
4223               wire vec[6:0];
4224               initial begin
4225                   seven = 7;
4226                   ...
4227                   if (seven != 7) out = vec[seven];  // Never will use vec[7]
4228
4229       SHORTREAL
4230           Warns that Verilator does not support "shortreal" and they will be
4231           automatically promoted to "real".  The recommendation is to replace
4232           any "shortreal" in the code with "real", as "shortreal" is not
4233           widely supported across industry tools.
4234
4235           Ignoring this warning may make Verilator simulations differ from
4236           other simulators, if the increased precision of real affects your
4237           model or DPI calls.
4238
4239       SPLITVAR
4240           Warns that a variable with a "split_var" metacomment was not split.
4241           Some possible reasons for this are:
4242
4243           * The datatype of the variable is not supported for splitting.
4244           (e.g. is a real).
4245
4246           * The access pattern of the variable can not be determined
4247           statically. (e.g. is accessed as a memory).
4248
4249           * The index of the array exceeds the array size.
4250
4251           * The variable is accessed from outside using dotted reference.
4252           (e.g. top.instance0.variable0 = 1).
4253
4254           * The variable is not declared in a module, but in a package or an
4255           interface.
4256
4257           * The variable is a parameter, localparam, genvar, or queue.
4258
4259           * The variable is tristate or bidirectional. (e.g. inout or ref).
4260
4261       STMTDLY
4262           Warns that you have a statement with a delayed time in front of it,
4263           for example:
4264
4265               #100 $finish;
4266
4267           Ignoring this warning may make Verilator simulations differ from
4268           other simulators.
4269
4270       SYMRSVDWORD
4271           Warning that a symbol matches a C++ reserved word and using this as
4272           a symbol name would result in odd C++ compiler errors.  You may
4273           disable this warning, but the symbol will be renamed by Verilator
4274           to avoid the conflict.
4275
4276       SYNCASYNCNET
4277           Warns that the specified net is used in at least two different
4278           always statements with posedge/negedges (i.e. a flop).  One usage
4279           has the signal in the sensitivity list and body, probably as an
4280           async reset, and the other usage has the signal only in the body,
4281           probably as a sync reset.  Mixing sync and async resets is usually
4282           a mistake.  The warning may be disabled with a lint_off pragma
4283           around the net, or either flopped block.
4284
4285           Disabled by default as this is a code style warning; it will
4286           simulate correctly.
4287
4288       TASKNSVAR
4289           Error when a call to a task or function has an inout from that task
4290           tied to a non-simple signal.  Instead connect the task output to a
4291           temporary signal of the appropriate width, and use that signal to
4292           set the appropriate expression as the next statement.  For example:
4293
4294                 task foo(inout sig); ... endtask
4295                 always @* begin
4296                      foo(bus_we_select_from[2]);  // Will get TASKNSVAR error
4297                 end
4298
4299           Change this to:
4300
4301                 reg foo_temp_out;
4302                 always @* begin
4303                      foo(foo_temp_out);
4304                      bus_we_select_from[2] = foo_temp_out;
4305                 end
4306
4307           Verilator doesn't do this conversion for you, as some more
4308           complicated cases would result in simulator mismatches.
4309
4310       TICKCOUNT
4311           Warns that the number of ticks to delay a $past variable is greater
4312           than 10.  At present Verilator effectively creates a flop for each
4313           delayed signals, and as such any large counts may lead to large
4314           design size increases.
4315
4316           Ignoring this warning will only slow simulations, it will simulate
4317           correctly.
4318
4319       TIMESCALEMOD
4320           Error that `timescale is used in some but not all modules.
4321           Recommend using --timescale argument, or in front of all modules
4322           use:
4323
4324              `include "timescale.vh"
4325
4326           Then in that file set the timescale.
4327
4328           This is an error due to IEEE specifications, but it may be disabled
4329           similar to warnings.  Ignoring this error may result in a module
4330           having an unexpected timescale.
4331
4332       UNDRIVEN
4333           Warns that the specified signal has no source.  Verilator is fairly
4334           liberal in the usage calculations; making a signal public, or
4335           setting only a single array element marks the entire signal as
4336           driven.
4337
4338           Disabled by default as this is a code style warning; it will
4339           simulate correctly.
4340
4341       UNOPT
4342           Warns that due to some construct, optimization of the specified
4343           signal or block is disabled.  The construct should be cleaned up to
4344           improve simulation performance.
4345
4346           A less obvious case of this is when a module instantiates two
4347           submodules.  Inside submodule A, signal I is input and signal O is
4348           output.  Likewise in submodule B, signal O is an input and I is an
4349           output.  A loop exists and a UNOPT warning will result if AI & AO
4350           both come from and go to combinatorial blocks in both submodules,
4351           even if they are unrelated always blocks.  This affects performance
4352           because Verilator would have to evaluate each submodule multiple
4353           times to stabilize the signals crossing between the modules.
4354
4355           Ignoring this warning will only slow simulations, it will simulate
4356           correctly.
4357
4358       UNOPTFLAT
4359           Warns that due to some construct, optimization of the specified
4360           signal is disabled.  The signal reported includes a complete scope
4361           to the signal; it may be only one particular usage of a multiply
4362           instantiated block.  The construct should be cleaned up to improve
4363           simulation performance; two times better performance may be
4364           possible by fixing these warnings.
4365
4366           Unlike the UNOPT warning, this occurs after flattening the netlist,
4367           and indicates a more basic problem, as the less obvious case
4368           described under UNOPT does not apply.
4369
4370           Often UNOPTFLAT is caused by logic that isn't truly circular as
4371           viewed by synthesis which analyzes interconnection per-bit, but is
4372           circular to simulation which analyzes per-bus:
4373
4374                 wire [2:0] x = {x[1:0], shift_in};
4375
4376           This statement needs to be evaluated multiple times, as a change in
4377           "shift_in" requires "x" to be computed 3 times before it becomes
4378           stable.  This is because a change in "x" requires "x" itself to
4379           change value, which causes the warning.
4380
4381           For significantly better performance, split this into 2 separate
4382           signals:
4383
4384                 wire [2:0] xout = {x[1:0], shift_in};
4385
4386           and change all receiving logic to instead receive "xout".
4387           Alternatively, change it to
4388
4389                 wire [2:0] x = {xin[1:0], shift_in};
4390
4391           and change all driving logic to instead drive "xin".
4392
4393           With this change this assignment needs to be evaluated only once.
4394           These sort of changes may also speed up your traditional event
4395           driven simulator, as it will result in fewer events per cycle.
4396
4397           The most complicated UNOPTFLAT path we've seen was due to low bits
4398           of a bus being generated from an always statement that consumed
4399           high bits of the same bus processed by another series of always
4400           blocks.  The fix is the same; split it into two separate signals
4401           generated from each block.
4402
4403           Another way to resolve this warning is to add a "split_var"
4404           metacomment described above. This will cause the variable to be
4405           split internally, potentially resolving the conflict. If you run
4406           with --report-unoptflat Verilator will suggest possible candidates
4407           for "split_var".
4408
4409           The UNOPTFLAT warning may also be due to clock enables, identified
4410           from the reported path going through a clock gating instance.  To
4411           fix these, use the clock_enable meta comment described above.
4412
4413           The UNOPTFLAT warning may also occur where outputs from a block of
4414           logic are independent, but occur in the same always block.  To fix
4415           this, use the isolate_assignments meta comment described above.
4416
4417           To assist in resolving UNOPTFLAT, the option "--report-unoptflat"
4418           can be used, which will provide suggestions for variables that can
4419           be split up, and a graph of all the nodes connected in the loop.
4420           See the Arguments section for more details.
4421
4422           Ignoring this warning will only slow simulations, it will simulate
4423           correctly.
4424
4425       UNOPTTHREADS
4426           Warns that the thread scheduler was unable to partition the design
4427           to fill the requested number of threads.
4428
4429           One workaround is to request fewer threads with "--threads".
4430
4431           Another possible workaround is to allow more MTasks in the
4432           simulation runtime, by increasing the value of
4433           --threads-max-mtasks. More MTasks will result in more communication
4434           and synchronization overhead at simulation runtime; the scheduler
4435           attempts to minimize the number of MTasks for this reason.
4436
4437           Ignoring this warning will only slow simulations, it will simulate
4438           correctly.
4439
4440       UNPACKED
4441           Warns that unpacked structs and unions are not supported.
4442
4443           Ignoring this warning will make Verilator treat the structure as
4444           packed, which may make Verilator simulations differ from other
4445           simulators. This downgrading may also result what would normally be
4446           a legal unpacked struct/array inside an unpacked struct/array
4447           becoming an illegal unpacked struct/array inside a packed
4448           struct/array.
4449
4450       UNSIGNED
4451           Warns that you are comparing a unsigned value in a way that implies
4452           it is signed, for example "X < 0" will always be false when X is
4453           unsigned.
4454
4455           Ignoring this warning will only suppress the lint check, it will
4456           simulate correctly.
4457
4458       UNSUPPORTED
4459           UNSUPPORTED is an error that the construct might be legal according
4460           to IEEE but is not currently supported.
4461
4462           This error may be ignored with --bbox-unsup, however this will make
4463           the design simulate incorrectly; see the details under
4464           --bbox-unsup.
4465
4466       UNUSED
4467           Warns that the specified signal or parameter is never
4468           used/consumed.  Verilator is fairly liberal in the usage
4469           calculations; making a signal public, a signal matching
4470           --unused-regexp ("*unused*") or accessing only a single array
4471           element marks the entire signal as used.
4472
4473           Disabled by default as this is a code style warning; it will
4474           simulate correctly.
4475
4476           A recommended style for unused nets is to put at the bottom of a
4477           file code similar to the following:
4478
4479               wire _unused_ok = &{1'b0,
4480                                   sig_not_used_a,
4481                                   sig_not_used_yet_b,  // To be fixed
4482                                   1'b0};
4483
4484           The reduction AND and constant zeros mean the net will always be
4485           zero, so won't use simulation runtime.  The redundant leading and
4486           trailing zeros avoid syntax errors if there are no signals between
4487           them.  The magic name "unused" (-unused-regexp) is recognized by
4488           Verilator and suppresses warnings; if using other lint tools,
4489           either teach it to the tool to ignore signals with "unused" in the
4490           name, or put the appropriate lint_off around the wire.  Having
4491           unused signals in one place makes it easy to find what is unused,
4492           and reduces the number of lint_off pragmas, reducing bugs.
4493
4494       USERINFO, USERWARN, USERERROR, USERFATAL
4495           A SystemVerilog elaboration-time assertion print was executed.
4496
4497       VARHIDDEN
4498           Warns that a task, function, or begin/end block is declaring a
4499           variable by the same name as a variable in the upper level module
4500           or begin/end block (thus hiding the upper variable from being able
4501           to be used.)  Rename the variable to avoid confusion when reading
4502           the code.
4503
4504           Disabled by default as this is a code style warning; it will
4505           simulate correctly.
4506
4507       WIDTH
4508           Warns that based on width rules of Verilog, two operands have
4509           different widths.  Verilator generally can intuit the common usages
4510           of widths, and you shouldn't need to disable this message like you
4511           do with most lint programs.  Generally other than simple mistakes,
4512           you have two solutions:
4513
4514           If it's a constant 0 that's 32 bits or less, simply leave it
4515           unwidthed. Verilator considers zero to be any width needed.
4516
4517           Concatenate leading zeros when doing arithmetic.  In the statement
4518
4519                   wire [5:0] plus_one = from[5:0] + 6'd1 + carry[0];
4520
4521           The best fix, which clarifies intent and will also make all tools
4522           happy is:
4523
4524                   wire [5:0] plus_one = from[5:0] + 6'd1 + {5'd0, carry[0]};
4525
4526           Ignoring this warning will only suppress the lint check, it will
4527           simulate correctly.
4528
4529       WIDTHCONCAT
4530           Warns that based on width rules of Verilog, a concatenate or
4531           replication has an indeterminate width.  In most cases this
4532           violates the Verilog rule that widths inside concatenates and
4533           replicates must be sized, and should be fixed in the code.
4534
4535               wire [63:0] concat = {1, 2};
4536
4537           An example where this is technically legal (though still bad form)
4538           is:
4539
4540               parameter PAR = 1;
4541               wire [63:0] concat = {PAR, PAR};
4542
4543           The correct fix is to either size the 1 ("32'h1"), or add the width
4544           to the parameter definition ("parameter [31:0]"), or add the width
4545           to the parameter usage ("{PAR[31:0],PAR[31:0]}".
4546
4547       The following describes the less obvious errors:
4548
4549       Internal Error
4550           This error should never occur first, though may occur if earlier
4551           warnings or error messages have corrupted the program.  If there
4552           are no other warnings or errors, submit a bug report.
4553
4554       Unsupported: ....
4555           This error indicates that you are using a Verilog language
4556           construct that is not yet supported in Verilator.  See the
4557           Limitations chapter.
4558

DEPRECATIONS

4560       The following deprecated items are scheduled for future removal:
4561
4562       C++11 compiler support
4563           Verilator currently requires C++11 or newer compilers.  Verilator
4564           will require C++14 or newer compilers for both compiling Verilator
4565           and compiling Verilated models no sooner than January 2022.
4566
4567       Configuration File -msg
4568           The -msg argument to lint_off has been replaced with -rule.  -msg
4569           is planned for removal no sooner than January 2021.
4570
4571       XML locations
4572           The XML "fl" attribute has been replaced with "loc".  "fl" is
4573           planned for removal no sooner than January 2021.
4574

FAQ/FREQUENTLY ASKED QUESTIONS

4576       Can I contribute?
4577           Please contribute!  Just submit a pull request, or raise an issue
4578           to discuss if looking for something to help on.  For more
4579           information see our contributor agreement.
4580
4581       How widely is Verilator used?
4582           Verilator is used by many of the largest silicon design companies,
4583           and all the way down to college projects.  Verilator is one of the
4584           "big 4" simulators, meaning one of the 4 main SystemVerilog
4585           simulators available, namely the commercial products Synopsys VCS
4586           (tm), Mentor Questa/ModelSim (tm), Cadence
4587           Xcelium/Incisive/NC-Verilog/NC-Sim (tm), and the open-source
4588           Verilator.  The three commercial offerings are often collectively
4589           called the "big 3" simulators.
4590
4591       Does Verilator run under Windows?
4592           Yes, using Cygwin.  Verilated output also compiles under Microsoft
4593           Visual C++, but this is not tested every release.
4594
4595       Can you provide binaries?
4596           You can install Verilator via the system package manager (apt, yum,
4597           etc.) on many Linux distributions, including Debian, Ubuntu, SuSE,
4598           Fedora, and others.  These packages are provided by the Linux
4599           distributions and generally will lag the version of the mainline
4600           Verilator repository.  If no binary package is available for your
4601           distribution, how about you set one up?  Please contact the authors
4602           for assistance.
4603
4604       How can it be faster than (name-a-big-3-closed-source-simulator)?
4605           Generally, the implied part of the question is "... with all of the
4606           manpower they can put into developing it."
4607
4608           Most simulators have to be compliant with the complete IEEE 1364
4609           (Verilog) and IEEE 1800 (SystemVerilog) standards, meaning they
4610           have to be event driven.  This prevents them from being able to
4611           reorder blocks and make netlist-style optimizations, which are
4612           where most of the gains come from.
4613
4614           You should not be scared by non-compliance.  Your synthesis tool
4615           isn't compliant with the whole standard to start with, so your
4616           simulator need not be either.  Verilator is closer to the synthesis
4617           interpretation, so this is a good thing for getting working
4618           silicon.
4619
4620       Will Verilator output remain under my own license?
4621           Yes, it's just like using GCC on your programs; this is why
4622           Verilator uses the "GNU *Lesser* Public License Version 3" instead
4623           of the more typical "GNU Public License".  See the licenses for
4624           details, but in brief, if you change Verilator itself or the header
4625           files Verilator includes, you must make the source code available
4626           under the GNU Lesser Public License.  However, Verilator output
4627           (the Verilated code) only "include"s the licensed files, and so you
4628           are NOT required to release any output from Verilator.
4629
4630           You also have the option of using the Perl Artistic License, which
4631           again does not require you to release your Verilog or generated
4632           code, and also allows you to modify Verilator for internal use
4633           without distributing the modified version.  But please contribute
4634           back to the community!
4635
4636           One limit is that you cannot under either license release a
4637           commercial Verilog simulation product incorporating Verilator
4638           without making the source code available.
4639
4640           As is standard with Open Source, contributions back to Verilator
4641           will be placed under the Verilator copyright and LGPL/Artistic
4642           license.  Small test cases will be released into the public domain
4643           so they can be used anywhere, and large tests under the
4644           LGPL/Artistic, unless requested otherwise.
4645
4646       Why is running Verilator (to create a model) so slow?
4647           Verilator needs more memory than the resulting simulator will
4648           require, as Verilator internally creates all of the state of the
4649           resulting generated simulator in order to optimize it.  If it takes
4650           more than a few minutes or so (and you're not using --debug since
4651           debug mode is disk bound), see if your machine is paging; most
4652           likely you need to run it on a machine with more memory. Very large
4653           designs are known to have topped 16GB resident set size.
4654
4655       How do I generate waveforms (traces) in C++?
4656           See the next question for tracing in SystemC mode.
4657
4658           A. Add the --trace switch to Verilator, and in your top level C
4659           code, call Verilated::traceEverOn(true).  Then you may use
4660           $dumpfile and $dumpvars to enable traces, same as with any Verilog
4661           simulator. See "examples/make_tracing_c".
4662
4663           B. Or, for finer-grained control, or C++ files with multiple
4664           Verilated modules you may also create the trace purely from C++.
4665           Create a VerilatedVcdC object, and in your main loop call
4666           "trace_object->dump(time)" every time step, and finally call
4667           "trace_object->close()".  You also need to compile
4668           verilated_vcd_c.cpp and add it to your link, preferably by adding
4669           the dependencies in $(VK_GLOBAL_OBJS) to your Makefile's link rule.
4670           This is done for you if using the Verilator --exe flag.  Note you
4671           can also call ->trace on multiple Verilated objects with the same
4672           trace file if you want all data to land in the same output file.
4673
4674               #include "verilated_vcd_c.h"
4675               ...
4676               int main(int argc, char** argv, char** env) {
4677                   ...
4678                   Verilated::traceEverOn(true);
4679                   VerilatedVcdC* tfp = new VerilatedVcdC;
4680                   topp->trace(tfp, 99);  // Trace 99 levels of hierarchy
4681                   tfp->open("obj_dir/t_trace_ena_cc/simx.vcd");
4682                   ...
4683                   while (sc_time_stamp() < sim_time && !Verilated::gotFinish()) {
4684                       main_time += #;
4685                       tfp->dump(main_time);
4686                   }
4687                   tfp->close();
4688               }
4689
4690       How do I generate waveforms (traces) in SystemC?
4691           A. Add the --trace switch to Verilator, and in your top level
4692           sc_main, call Verilated::traceEverOn(true).  Then you may use
4693           $dumpfile and $dumpvars to enable traces, same as with any Verilog
4694           simulator, see the non-SystemC example in
4695           "examples/make_tracing_c". This will trace only the module
4696           containing the $dumpvar.
4697
4698           B. Or, you may create a trace purely from SystemC, which may trace
4699           all Verilated designs in the SystemC model. Create a VerilatedVcdSc
4700           object as you would create a normal SystemC trace file.  For an
4701           example, see the call to VerilatedVcdSc in the
4702           examples/make_tracing_sc/sc_main.cpp file of the distribution, and
4703           below.
4704
4705           Alternatively you may use the C++ trace mechanism described in the
4706           previous question, note the timescale and timeprecision will be
4707           inherited from your SystemC settings.
4708
4709           You also need to compile verilated_vcd_sc.cpp and
4710           verilated_vcd_c.cpp and add them to your link, preferably by adding
4711           the dependencies in $(VK_GLOBAL_OBJS) to your Makefile's link rule.
4712           This is done for you if using the Verilator --exe flag.
4713
4714           Note you can also call ->trace on multiple Verilated objects with
4715           the same trace file if you want all data to land in the same output
4716           file.
4717
4718           When using SystemC 2.3, the SystemC library must have been built
4719           with the experimental simulation phase callback based tracing
4720           disabled. This is disabled by default when building SystemC with
4721           its configure based build system, but when building SystemC with
4722           CMake, you must pass -DENABLE_PHASE_CALLBACKS_TRACING=OFF to
4723           disable this feature.
4724
4725               #include "verilated_vcd_sc.h"
4726               ...
4727               int main(int argc, char** argv, char** env) {
4728                   ...
4729                   Verilated::traceEverOn(true);
4730                   VerilatedVcdSc* tfp = new VerilatedVcdSc;
4731                   topp->trace(tfp, 99);  // Trace 99 levels of hierarchy
4732                   tfp->open("obj_dir/t_trace_ena_cc/simx.vcd");
4733                   ...
4734                   sc_start(1);
4735                   ...
4736                   tfp->close();
4737               }
4738
4739       How do I generate FST waveforms (traces) in C++?
4740           FST is a trace file format developed by GTKWave.  Verilator
4741           provides basic FST support.  To dump traces in FST format, add the
4742           --trace-fst switch to Verilator and either A. use
4743           $dumpfile/$dumpvars in Verilog as described in the VCD example
4744           above, or B. in C++ change the include described in the VCD example
4745           above:
4746
4747               #include "verilated_fst_c.h"
4748               VerilatedFstC* tfp = new VerilatedFstC;
4749
4750           Note that currently supporting both FST and VCD in a single
4751           simulation is impossible, but such requirement should be rare.  You
4752           can however ifdef around the trace format in your C++ main loop,
4753           and select VCD or FST at build time, should you require.
4754
4755       How do I generate FST waveforms (aka dumps or traces) in SystemC?
4756           The FST library from GTKWave does not currently support SystemC;
4757           use VCD format instead.
4758
4759       How do I view waveforms (aka dumps or traces)?
4760           Verilator creates standard VCD (Value Change Dump) and FST files.
4761           VCD files are viewable with the open source GTKWave (recommended)
4762           or Dinotrace (legacy) programs, or any of the many closed-source
4763           offerings; FST is supported only by GTKWave.
4764
4765       How do I reduce the size of large waveform (trace) files?
4766           First, instead of calling VerilatedVcdC->open at the beginning of
4767           time, delay calling it until the time stamp where you want tracing
4768           to begin.  Likewise you can also call VerilatedVcdC->open before
4769           the end of time (perhaps a short period after you detect a
4770           verification error).
4771
4772           Next, add /*verilator tracing_off*/ to any very low level modules
4773           you never want to trace (such as perhaps library cells).  Finally,
4774           use the --trace-depth option to limit the depth of tracing, for
4775           example --trace-depth 1 to see only the top level signals.
4776
4777           Also be sure you write your trace files to a local solid-state
4778           drive, instead of to a network drive.  Network drives are generally
4779           far slower.
4780
4781           You can also consider using FST tracing instead of VCD. FST dumps
4782           are a fraction of the size of the equivalent VCD. FST tracing can
4783           be slower than VCD tracing, but it might be the only option if the
4784           VCD file size is prohibitively large.
4785
4786       How do I do coverage analysis?
4787           Verilator supports both block (line) coverage and user inserted
4788           functional coverage.
4789
4790           First, run verilator with the --coverage option.  If you are using
4791           your own makefile, compile the model with the GCC flag
4792           -DVM_COVERAGE (if using the makefile provided by Verilator, it will
4793           do this for you).
4794
4795           At the end of your test, call VerilatedCov::write passing the name
4796           of the coverage data file (typically "logs/coverage.dat").
4797
4798           Run each of your tests in different directories.  Each test will
4799           create a logs/coverage.dat file.
4800
4801           After running all of your tests, execute the verilator_coverage
4802           tool.  The verilator_coverage tool reads the logs/coverage.dat
4803           file(s), and creates an annotated source code listing showing code
4804           coverage details.
4805
4806           For an example, after running 'make test' in the Verilator
4807           distribution, see the examples/make_tracing_c/logs directory.  Grep
4808           for lines starting with '%' to see what lines Verilator believes
4809           need more coverage.
4810
4811           Info files can be written by verilator_coverage for import to
4812           "lcov".  This enables use of "genhtml" for HTML reports and
4813           importing reports to sites such as <https://codecov.io>.
4814
4815       Where is the translate_off command?  (How do I ignore a construct?)
4816           Translate on/off pragmas are generally a bad idea, as it's easy to
4817           have mismatched pairs, and you can't see what another tool sees by
4818           just preprocessing the code.  Instead, use the preprocessor;
4819           Verilator defines the "VERILATOR" define for you, so just wrap the
4820           code in an ifndef region:
4821
4822              `ifndef VERILATOR
4823                 Something_Verilator_Dislikes;
4824              `endif
4825
4826           Most synthesis tools similarly define SYNTHESIS for you.
4827
4828       Why do I get "unexpected "do"" or "unexpected "bit"" errors?
4829           The words "do", "bit", "ref", "return", and others are reserved
4830           keywords in SystemVerilog.  Older Verilog code might use these as
4831           identifiers.  You should change your code to not use them to ensure
4832           it works with newer tools.  Alternatively, surround them by the
4833           Verilog 2005/SystemVerilog begin_keywords pragma to indicate
4834           Verilog 2001 code.
4835
4836              `begin_keywords "1364-2001"
4837                 integer bit; initial bit = 1;
4838              `end_keywords
4839
4840           If you want the whole design to be parsed as Verilog 2001, please
4841           see the "--default-language" option.
4842
4843       How do I prevent my assertions from firing during reset?
4844           Call Verilated::assertOn(false) before you first call the model,
4845           then turn it back on after reset.  It defaults to true.  When
4846           false, all assertions controlled by --assert are disabled.
4847
4848       Why do I get "undefined reference to `sc_time_stamp()'"?
4849           In C++ (non SystemC) code you need to define this function so that
4850           the simulator knows the current time.  See the "CONNECTING TO C++"
4851           examples.
4852
4853       Why do I get "undefined reference to `VL_RAND_RESET_I' or
4854       `Verilated::...'"?
4855           You need to link your compiled Verilated code against the
4856           verilated.cpp file found in the include directory of the Verilator
4857           kit.  This is one target in the $(VK_GLOBAL_OBJS) make variable,
4858           which should be part of your Makefile's link rule.  If you use
4859           --exe, this is done for you.
4860
4861       Is the PLI supported?
4862           Only somewhat.  More specifically, the common PLI-ish calls
4863           $display, $finish, $stop, $time, $write are converted to C++
4864           equivalents.  You can also use the "import DPI" SystemVerilog
4865           feature to call C code (see the chapter above).  There is also
4866           limited VPI access to public signals.
4867
4868           If you want something more complex, since Verilator emits standard
4869           C++ code, you can simply write your own C++ routines that can
4870           access and modify signal values without needing any PLI interface
4871           code, and call it with $c("{any_c++_statement}").
4872
4873       How do I make a Verilog module that contain a C++ object?
4874           You need to add the object to the structure that Verilator creates,
4875           then use $c to call a method inside your object.  The
4876           test_regress/t/t_extend_class files show an example of how to do
4877           this.
4878
4879       How do I get faster build times?
4880           When running make pass the make variable VM_PARALLEL_BUILDS=1 so
4881           that builds occur in parallel. Note this is now set by default if
4882           an output file was large enough to be split due to the
4883           --output-split option.
4884
4885           Verilator emits any infrequently executed "cold" routines into
4886           separate __Slow.cpp files. This can accelerate compilation as
4887           optimization can be disabled on these routines. See the OPT_FAST
4888           and OPT_SLOW make variables and the BENCHMARKING & OPTIMIZATION
4889           section of the manual.
4890
4891           Use a recent compiler.  Newer compilers tend to be faster.
4892
4893           Compile in parallel on many machines and use caching; see the web
4894           for the ccache, distcc and icecream packages. ccache will skip GCC
4895           runs between identical source builds, even across different users.
4896           If ccache was installed when Verilator was built it is used, or see
4897           OBJCACHE environment variable to override this. Also see the
4898           --output-split option.
4899
4900           To reduce the compile time of classes that use a Verilated module
4901           (e.g. a top CPP file) you may wish to add /*verilator
4902           no_inline_module*/ to your top level module. This will decrease the
4903           amount of code in the model's Verilated class, improving compile
4904           times of any instantiating top level C++ code, at a relatively
4905           small cost of execution performance.
4906
4907       Why do so many files need to recompile when I add a signal?
4908           Adding a new signal requires the symbol table to be recompiled.
4909           Verilator uses one large symbol table, as that results in 2-3 less
4910           assembly instructions for each signal access.  This makes the
4911           execution time 10-15% faster, but can result in more compilations
4912           when something changes.
4913
4914       How do I access Verilog functions/tasks in C?
4915           Use the SystemVerilog Direct Programming Interface.  You write a
4916           Verilog function or task with input/outputs that match what you
4917           want to call in with C.  Then mark that function as a DPI export
4918           function.  See the DPI chapter in the IEEE Standard.
4919
4920       How do I access C++ functions/tasks in Verilog?
4921           Use the SystemVerilog Direct Programming Interface.  You write a
4922           Verilog function or task with input/outputs that match what you
4923           want to call in with C.  Then mark that function as a DPI import
4924           function.  See the DPI chapter in the IEEE Standard.
4925
4926       How do I access signals in C?
4927           The best thing to do is to make a SystemVerilog "export DPI" task
4928           or function that accesses that signal, as described in the DPI
4929           chapter in the manual and DPI tutorials on the web.  This will
4930           allow Verilator to better optimize the model and should be portable
4931           across simulators.
4932
4933           If you really want raw access to the signals, declare the signals
4934           you will be accessing with a /*verilator public*/ comment before
4935           the closing semicolon.  Then scope into the C++ class to read the
4936           value of the signal, as you would any other member variable.
4937
4938           Signals are the smallest of 8-bit unsigned chars (equivalent to
4939           uint8_t), 16-bit unsigned shorts (uint16_t), 32-bit unsigned longs
4940           (uint32_t), or 64-bit unsigned long longs (uint64_t) that fits the
4941           width of the signal.  Generally, you can use just uint32_t's for 1
4942           to 32 bits, or vluint64_t for 1 to 64 bits, and the compiler will
4943           properly up-convert smaller entities.  Note even signed ports are
4944           declared as unsigned; you must sign extend yourself to the
4945           appropriate signal width.
4946
4947           Signals wider than 64 bits are stored as an array of 32-bit
4948           uint32_t's.  Thus to read bits 31:0, access signal[0], and for bits
4949           63:32, access signal[1].  Unused bits (for example bit numbers
4950           65-96 of a 65-bit vector) will always be zero.  If you change the
4951           value you must make sure to pack zeros in the unused bits or core-
4952           dumps may result, because Verilator strips array bound checks where
4953           it believes them to be unnecessary to improve performance.
4954
4955           In the SYSTEMC example above, if you had in our.v:
4956
4957               input clk /*verilator public*/;
4958               // Note the placement of the semicolon above
4959
4960           From the sc_main.cpp file, you'd then:
4961
4962               #include "Vour.h"
4963               #include "Vour_our.h"
4964               cout << "clock is " << top->our->clk << endl;
4965
4966           In this example, clk is a bool you can read or set as any other
4967           variable.  The value of normal signals may be set, though clocks
4968           shouldn't be changed by your code or you'll get strange results.
4969
4970       Should a module be in Verilog or SystemC?
4971           Sometimes there is a block that just interconnects instances, and
4972           have a choice as to if you write it in Verilog or SystemC.
4973           Everything else being equal, best performance is when Verilator
4974           sees all of the design.  So, look at the hierarchy of your design,
4975           labeling instances as to if they are SystemC or Verilog.  Then:
4976
4977           A module with only SystemC instances below must be SystemC.
4978
4979           A module with a mix of Verilog and SystemC instances below must be
4980           SystemC. (As Verilator cannot connect to lower-level SystemC
4981           instances.)
4982
4983           A module with only Verilog instances below can be either, but for
4984           best performance should be Verilog.  (The exception is if you have
4985           a design that is instantiated many times; in this case Verilating
4986           one of the lower modules and instantiating that Verilated instances
4987           multiple times into a SystemC module *may* be faster.)
4988

BUGS

4990       First, check the "LANGUAGE LIMITATIONS" section.
4991
4992       Next, try the --debug switch.  This will enable additional internal
4993       assertions, and may help identify the problem.
4994
4995       Finally, reduce your code to the smallest possible routine that
4996       exhibits the bug.  Even better, create a test in the test_regress/t
4997       directory, as follows:
4998
4999           cd test_regress
5000           cp -p t/t_EXAMPLE.pl t/t_BUG.pl
5001           cp -p t/t_EXAMPLE.v t/t_BUG.v
5002
5003       There are many hints on how to write a good test in the driver.pl
5004       documentation which can be seen by running:
5005
5006           cd $VERILATOR_ROOT  # Need the original distribution kit
5007           test_regress/driver.pl --help
5008
5009       Edit t/t_BUG.pl to suit your example; you can do anything you want in
5010       the Verilog code there; just make sure it retains the single clk input
5011       and no outputs.  Now, the following should fail:
5012
5013           cd $VERILATOR_ROOT  # Need the original distribution kit
5014           cd test_regress
5015           t/t_BUG.pl  # Run on Verilator
5016           t/t_BUG.pl --debug # Run on Verilator, passing --debug to Verilator
5017           t/t_BUG.pl --vcs  # Run on VCS simulator
5018           t/t_BUG.pl --nc|--iv|--ghdl  # Likewise on other simulators
5019
5020       The test driver accepts a number of options, many of which mirror the
5021       main Verilator option. For example the previous test could have been
5022       run with debugging enabled.  The full set of test options can be seen
5023       by running driver.pl --help as shown above.
5024
5025       Finally, report the bug using the bug tracker at
5026       <https://verilator.org/issues>.  The bug will become publicly visible;
5027       if this is unacceptable, mail the bug report to "wsnyder@wsnyder.org".
5028

HISTORY

5030       Verilator was conceived in 1994 by Paul Wasson at the Core Logic Group
5031       at Digital Equipment Corporation.  The Verilog code that was converted
5032       to C was then merged with a C based CPU model of the Alpha processor
5033       and simulated in a C based environment called CCLI.
5034
5035       In 1995 Verilator started being used also for Multimedia and Network
5036       Processor development inside Digital.  Duane Galbi took over active
5037       development of Verilator, and added several performance enhancements.
5038       CCLI was still being used as the shell.
5039
5040       In 1998, through the efforts of existing DECies, mainly Duane Galbi,
5041       Digital graciously agreed to release the source code.  (Subject to the
5042       code not being resold, which is compatible with the GNU Public
5043       License.)
5044
5045       In 2001, Wilson Snyder took the kit, and added a SystemC mode, and
5046       called it Verilator2.  This was the first packaged public release.
5047
5048       In 2002, Wilson Snyder created Verilator 3.000 by rewriting Verilator
5049       from scratch in C++.  This added many optimizations, yielding about a
5050       2-5x performance gain.
5051
5052       In 2009, major SystemVerilog and DPI language support was added.
5053
5054       In 2018, Verilator 4.000 was released with multithreaded support.
5055
5056       Currently, various language features and performance enhancements are
5057       added as the need arises.  Verilator is now about 3x faster than in
5058       2002, and is faster than most (if not every) other simulator.
5059

AUTHORS

5061       When possible, please instead report bugs to
5062       <https://verilator.org/issues>.
5063
5064       Wilson Snyder <wsnyder@wsnyder.org>
5065
5066       Major concepts by Paul Wasson, Duane Galbi, John Coiner and Jie Xu.
5067

CONTRIBUTORS

5069       Many people have provided ideas and other assistance with Verilator.
5070
5071       Verilator is receiving major development support from the CHIPS
5072       Alliance.
5073
5074       Previous major corporate sponsors of Verilator, by providing
5075       significant contributions of time or funds included include Atmel
5076       Corporation, Cavium Inc., Compaq Corporation, Digital Equipment
5077       Corporation, Embecosm Ltd., Hicamp Systems, Intel Corporation,
5078       Mindspeed Technologies Inc., MicroTune Inc., picoChip Designs Ltd., Sun
5079       Microsystems Inc., Nauticus Networks Inc., and SiCortex Inc.
5080
5081       The people who have contributed major functionality are Byron Bradley,
5082       Jeremy Bennett, Lane Brooks, John Coiner, Duane Galbi, Geza Lore, Todd
5083       Strader, Stefan Wallentowitz, Paul Wasson, Jie Xu, and Wilson Snyder.
5084       Major testers included Jeff Dutton, Jonathon Donaldson, Ralf Karge,
5085       David Hewson, Iztok Jeras, Wim Michiels, Alex Solomatnikov, Sebastien
5086       Van Cauwenberghe, Gene Weber, and Clifford Wolf.
5087
5088       Some of the people who have provided ideas, and feedback for Verilator
5089       include: David Addison, Tariq B. Ahmad, Nikana Anastasiadis, Hans Van
5090       Antwerpen, Vasu Arasanipalai, Jens Arm, Sharad Bagri, Matthew Ballance,
5091       Andrew Bardsley, Matthew Barr, Geoff Barrett, Julius Baxter, Jeremy
5092       Bennett, Michael Berman, Victor Besyakov, Moinak Bhattacharyya, David
5093       Binderman, Piotr Binkowski, Johan Bjork, David Black, Tymoteusz
5094       Blazejczyk, Daniel Bone, Gregg Bouchard, Christopher Boumenot, Nick
5095       Bowler, Byron Bradley, Bryan Brady, Maarten De Braekeleer, Charlie
5096       Brej, J Briquet, Lane Brooks, John Brownlee, Jeff Bush, Lawrence
5097       Butcher, Tony Bybell, Ted Campbell, Chris Candler, Lauren Carlson,
5098       Donal Casey, Sebastien Van Cauwenberghe, Alex Chadwick, Terry Chen, Yi-
5099       Chung Chen, Enzo Chi, Robert A. Clark, Allan Cochrane, John Coiner,
5100       Gianfranco Costamagna, Sean Cross, George Cuan, Joe DErrico, Lukasz
5101       Dalek, Laurens van Dam, Gunter Dannoritzer, Ashutosh Das, Bernard
5102       Deadman, John Demme, Mike Denio, John Deroo, Philip Derrick, John
5103       Dickol, Ruben Diez, Danny Ding, Jacko Dirks, Ivan Djordjevic, Jonathon
5104       Donaldson, Leendert van Doorn, Sebastian Dressler, Alex Duller, Jeff
5105       Dutton, Tomas Dzetkulic, Usuario Eda, Charles Eddleston, Chandan
5106       Egbert, Joe Eiler, Ahmed El-Mahmoudy, Trevor Elbourne, Mats Engstrom,
5107       Robert Farrell, Eugen Fekete, Fabrizio Ferrandi, Udi Finkelstein, Brian
5108       Flachs, Andrea Foletto, Bob Fredieu, Duane Galbi, Benjamin Gartner,
5109       Christian Gelinek, Peter Gerst, Glen Gibb, Michael Gielda, Shankar
5110       Giri, Dan Gisselquist, Petr Gladkikh, Sam Gladstone, Amir Gonnen,
5111       Chitlesh Goorah, Kai Gossner, Sergi Granell, Al Grant, Alexander
5112       Grobman, Xuan Guo, Driss Hafdi, Neil Hamilton, James Hanlon, Oyvind
5113       Harboe, Jannis Harder, Junji Hashimoto, Thomas Hawkins, Mitch Hayenga,
5114       Robert Henry, Stephen Henry, David Hewson, Jamey Hicks, Joel
5115       Holdsworth, Andrew Holme, Hiroki Honda, Alex Hornung, David Horton,
5116       Peter Horvath, Jae Hossell, Alan Hunter, James Hutchinson, Jamie Iles,
5117       Ben Jackson, Shareef Jalloq, Krzysztof Jankowski, HyungKi Jeong, Iztok
5118       Jeras, James Johnson, Christophe Joly, Franck Jullien, James Jung, Mike
5119       Kagen, Arthur Kahlich, Kaalia Kahn, Guy-Armand Kamendje, Vasu Kandadi,
5120       Kanad Kanhere, Patricio Kaplan, Pieter Kapsenberg, Ralf Karge, Dan
5121       Katz, Sol Katzman, Ian Kennedy, Jonathan Kimmitt, Olof Kindgren, Kevin
5122       Kiningham, Dan Kirkham, Sobhan Klnv, Gernot Koch, Soon Koh, Nathan
5123       Kohagen, Steve Kolecki, Brett Koonce, Will Korteland, Wojciech Koszek,
5124       Varun Koyyalagunta, David Kravitz, Roland Kruse, Sergey Kvachonok,
5125       Charles Eric LaForest, Ed Lander, Steve Lang, Stephane Laurent, Walter
5126       Lavino, Christian Leber, Larry Lee, Igor Lesik, John Li, Eivind Liland,
5127       Yu Sheng Lin, Charlie Lind, Andrew Ling, Jiuyang Liu, Paul Liu, Derek
5128       Lockhart, Jake Longo, Geza Lore, Arthur Low, Stefan Ludwig, Dan
5129       Lussier, Fred Ma, Duraid Madina, Affe Mao, Julien Margetts, Mark
5130       Marshall, Alfonso Martinez, Yves Mathieu, Patrick Maupin, Jason
5131       McMullan, Elliot Mednick, Wim Michiels, Miodrag Milanovic, Wai Sum
5132       Mong, Peter Monsson, Sean Moore, Dennis Muhlestein, John Murphy, Matt
5133       Myers, Nathan Myers, Richard Myers, Dimitris Nalbantis, Peter Nelson,
5134       Bob Newgard, Cong Van Nguyen, Paul Nitza, Yossi Nivin, Pete Nixon, Lisa
5135       Noack, Mark Nodine, Kuba Ober, Andreas Olofsson, Aleksander Osman,
5136       James Pallister, Vassilis Papaefstathiou, Brad Parker, Dan Petrisko,
5137       Maciej Piechotka, David Pierce, Dominic Plunkett, David Poole, Mike
5138       Popoloski, Roman Popov, Rich Porter, Niranjan Prabhu, Usha
5139       Priyadharshini, Mark Jackson Pulver, Prateek Puri, Marshal Qiao, Danilo
5140       Ramos, Chris Randall, Anton Rapp, Josh Redford, Odd Magne Reitan,
5141       Frederic Requin, Frederick Requin, Dustin Richmond, Alberto Del Rio,
5142       Eric Rippey, Oleg Rodionov, Ludwig Rogiers, Paul Rolfe, Arjen
5143       Roodselaar, Tobias Rosenkranz, Huang Rui, Jan Egil Ruud, Denis Rystsov,
5144       John Sanguinetti, Galen Seitz, Salman Sheikh, Hao Shi, Mike
5145       Shinkarovsky, Rafael Shirakawa, Jeffrey Short, Anderson Ignacio Da
5146       Silva, Rodney Sinclair, Steven Slatter, Brian Small, Garrett Smith, Tim
5147       Snyder, Maciej Sobkowski, Stan Sokorac, Alex Solomatnikov, Wei Song,
5148       Art Stamness, David Stanford, John Stevenson, Pete Stevenson, Patrick
5149       Stewart, Rob Stoddard, Todd Strader, John Stroebel, Sven Stucki, Howard
5150       Su, Emerson Suguimoto, Gene Sullivan, Qingyao Sun, Renga Sundararajan,
5151       Rupert Swarbrick, Yutetsu Takatsukasa, Peter Tengstrand, Wesley
5152       Terpstra, Rui Terra, Stefan Thiede, Gary Thomas, Ian Thompson, Kevin
5153       Thompson, Mike Thyer, Hans Tichelaar, Viktor Tomov, Steve Tong, Michael
5154       Tresidder, Neil Turton, Srini Vemuri, Yuri Victorovich, Bogdan
5155       Vukobratovic, Holger Waechtler, Philipp Wagner, Stefan Wallentowitz,
5156       Shawn Wang, Paul Wasson, Greg Waters, Thomas Watts, Eugene Weber, David
5157       Welch, Thomas J Whatson, Marco Widmer, Leon Wildman, Daniel Wilkerson,
5158       Gerald Williams, Trevor Williams, Jan Van Winkel, Jeff Winston, Joshua
5159       Wise, Clifford Wolf, Tobias Wolfel, Johan Wouters, Junyi Xi, Ding
5160       Xiaoliang, Jie Xu, Mandy Xu, Takatsukasa Y, Luke Yang, and Amir
5161       Yazdanbakhsh.
5162
5163       Thanks to them, and all those we've missed including above, or wished
5164       to remain anonymous.
5165

DISTRIBUTION

5167       The latest version is available from <https://verilator.org>.
5168
5169       Copyright 2003-2021 by Wilson Snyder. This program is free software;
5170       you can redistribute it and/or modify the Verilator internals under the
5171       terms of either the GNU Lesser General Public License Version 3 or the
5172       Perl Artistic License Version 2.0.
5173
5174       All Verilog and C++/SystemC code quoted within this documentation file
5175       are released as Creative Commons Public Domain (CC0).  Many example
5176       files and test files are likewise released under CC0 into effectively
5177       the Public Domain as described in the files themselves.
5178

SEE ALSO

5180       verilator_coverage, verilator_gantt, verilator_profcfunc, make,
5181
5182       "verilator --help" which is the source for this document,
5183
5184       and docs/internals.adoc in the distribution.
5185
5186
5187
5188perl v5.34.0                      2021-07-23                      VERILATOR(1)
Impressum