DVT VHDL IDE User Guide
Rev. 24.1.12, 12 June 2024

33.6.5 Performance

The following build config directives can restrict the elaboration and therefore improve performance when needed.

+dvt_elaboration_controlDisable or change steps in the elaboration.


Use EACH_GENERATE_BLOCK_ONCE to elaborate each generate block, whether active or inactive, only once. All branches of conditional generate blocks will be elaborated. Loop generate blocks will be elaborated only once, for index 0. Similarly, an array of instances will have only one element per dimension, corresponding to index 0.


Use NO_GENERATE_BLOCKS to not elaborate generate blocks. Any sub-instance found under a generate block will also not be elaborated.


Use NO_PARAM_EVAL to disable parameter evaluation. Parameters and constants will not have their values computed, not even their default values.


Use EACH_SPEC_ONCE to stop the SINGLE_PASS elaboration of an instance whose design specialization has already been elaborated (the instance is BBOX-ed).


Use NO_SUBINSTANCE_COPIES to not optimize the SINGLE_PASS elaboration through copies of identical sub-instances.
E.g. +dvt_elaboration_control+NO_GENERATE_BLOCK_EVAL+NO_PARAM_EVAL
+dvt_elaboration_loop_block_cutoffConfigure the cut-off number for elaborated loop blocks.


In a design with many loop generate constructs, limiting the number to 1 per loop can drastically reduce the elaboration time.
E.g. +dvt_elaboration_loop_block_cutoff+1 (default: 200)
+dvt_elaboration_loop_statement_cutoffConfigure the cut-off number for elaborated function loop statements.


In a design with many evaluated functions, limiting the number to 100 per loop statement (e.g. for, foreach, while) can drastically reduce the elaboration time. Functions affected by the cutoff are not elaborated.
E.g. +dvt_elaboration_loop_statement_cutoff+100 (default: 1000)
+dvt_elaboration_kindConfigure the kind of elaboration performed at full build.


Use SINGLE_PASS to have the elaboration be performed in one pass. A notable performance improvement can be observed but note that any usage of defparam assignments or configurations may lead to unexpected elaboration results.


Use MULTI_PASS to have the elaboration use multiple passes. In most cases it is slower than the SINGLE_PASS elaboration, but ensures correct handling of defparam assignments and configurations.


Use ADAPTIVE to let the tool determine the kind based on multiple criteria.
E.g. +dvt_elaboration_kind+SINGLE_PASS (default: ADAPTIVE)
+dvt_elaboration_max_nof_resolve_binds_passesConfigure the maximum number of passes allowed when resolving bind directives.E.g. +dvt_elaboration_max_nof_resolve_binds_passes+1 (default:5)
+dvt_elaboration_disable_method_evalDisable function call evaluation in elaboration.E.g. +dvt_elaboration_disable_method_eval+true
+dvt_elaboration_skip_defparamsSkip defparam assignments during elaboration. E.g. +dvt_elaboration_skip_defparams+true
+dvt_elaboration_skip_modulesSkip elaboration of an instance based on design name.


Instance port connections and parameter overrides are not checked and sub-instances are not elaborated.


Skipped designs are considered unelaborated.


Elaboration tops cannot be skipped.


Wildcards such as '*' (any string) and '?' (any character) can be used in the pattern.
E.g. +dvt_elaboration_skip_modules+*amod*
+dvt_elaboration_skip_pathsSkip elaboration of an instance based on design file absolute path.


Instance port connections and parameter overrides are not checked and sub-instances are not elaborated.


Skipped designs are considered unelaborated.


Elaboration tops cannot be skipped.


Wildcards such as '*' (any string) and '?' (any character) can be used in the pattern.
E.g. +dvt_elaboration_skip_paths+/home/user/dvt_project/rtl/*
+dvt_elaboration_skip_instancesSkip elaboration of an instance based on hierarchical path.


Instance port connections and parameter overrides are not checked and sub-instances are not elaborated.


Skipped designs are considered unelaborated.


Elaboration tops cannot be skipped.


Wildcards such as '*' (any string) and '?' (any character) can be used in the pattern.
E.g. +dvt_elaboration_skip_instances+top.dut.*
+dvt_elaboration_bbox_modulesBlack box an instance based on design name.


Instance port connections and parameter overrides are checked but sub-instances are not elaborated.


Black boxed designs are considered unelaborated. In the Design Hierarchy View, they are marked as BLOCK BOX.


Elaboration tops cannot be black boxed.


Wildcards such as '*' (any string) and '?' (any character) can be used in the pattern.
E.g. +dvt_elaboration_bbox_modules+*amod*
+dvt_elaboration_bbox_pathsBlack box an instance based on design file absolute path.


Instance port connections and parameter overrides are checked but sub-instances are not elaborated.


Black boxed designs are considered unelaborated. In the Design Hierarchy View, they are marked as BLOCK BOX.


Elaboration tops cannot be black boxed.


Wildcards such as '*' (any string) and '?' (any character) can be used in the pattern.
E.g. +dvt_elaboration_bbox_paths+/home/user/dvt_project/rtl/*
+dvt_elaboration_bbox_instancesBlack box an instance based on hierarchical path.


Instance port connections and parameter overrides are checked but sub-instances are not elaborated.


Black boxed designs are considered unelaborated. In the Design Hierarchy View, they are marked as BLOCK BOX.


Elaboration tops cannot be black boxed.


Wildcards such as '*' (any string) and '?' (any character) can be used in the pattern.
E.g. +dvt_elaboration_bbox_instances+top.dut.*

The following build config directives can restrict the functionality in the unelaborated code in order to improve performance.

+dvt_unelaborated_compile_checksControl the scope of the unelaborated design build checks and functionality.


If set to NONE, functionality and checking in the unelaborated modules and unelaborated local generate blocks is limited.


If set to GENERATE_BLOCKS, functionality and checking in all unelaborated modules is limited.


If set to DISCRETE, functionality and checking in the unelaborated modules found in library files is limited. This is the default value of the directive.


If set to FULL, functionality and checking is not limited in the unelaborated code.
E.g. +dvt_unelaborated_compile_checks+GENERATE_BLOCKS
+dvt_unelaborated_disable_package_constantsDisable unelaborated package constants evaluation and checking.E.g. +dvt_unelaborated_disable_package_constants+true