Scripts

dvt.sh

DVT Eclipse IDE Launcher

dvt.sh [-h[elp]] [-site site] [-bg] [-dvt_log_location <file>]
       [-workspace <dir> [-import_workspace_settings <dir> | -force_import_workspace_settings <dir>]]
       [-eclipsespace <dir>] [-heap_size <size>] [-stack_size <size>] [-options <opt>] [-eclipse_args <args> --]

 -help                                   Show this help.
 -bg                                     Launch DVT in background.
 -dvt_log_location <file>                Path to the log of stdout/sterr. Default is /tmp/dvt_log_<PID>.
 -workspace <dir>                        Path to the eclipse workspace (temporary eclipse directory).
 -import_workspace_settings <dir>        Path to the eclipse workspace from which settings will be imported.
 -force_import_workspace_settings <dir>  Same as -import_workspace_settings, but it will overwrite target workspace settings.
 -eclipsespace <dir>                     Path to the Eclipse configuration and user area. Default is /home/user/.eclipse.
 -heap_size <size>                       Set the Java heap size (syntax is <N>[g|G|m|M|k|K]). Default is 3072m.
 -stack_size <size>                      Set the Java thread stack size (syntax is <N>[g|G|m|M|k|K]). Default is 4m.
 -options <option list>                  Comma separated list of options:
                                             disable_browser                   - do not use SWT browser component and skip auto-config
                                             disable_swt_auto_config           - do not auto-config SWT GTK version and SWT browser engine
                                             disable_chromium                  - do not use bundled Chromium browser engine
                                             disable_xulrunner                 - do not use bundled XULRunner browser engine
                                             disable_webkit                    - do not use OS's WebKit browser engine
                                             disable_cairo                     - do not use Cairo advanced graphics library
                                             disable_force_gtk2                - do not force Eclipse to use GTK2
                                             disable_gtk_theme                 - do not use custom GTK2 themes generated through DVT
                                             disable_force_classic_theme       - do not force Eclipse to use the classic theme
                                             disable_shutdown_timeout          - do not force stop JVM when shutdown exceeds 5 seconds
                                             disable_chromium_mtml             - do not use Chromium multithreaded message loop
                                             disable_chromium_launcher_library - do not use Chromium launcher library
                                             disable_chromium_early_init       - do not use early init for Chromium browser engine
                                             dump_allocated_swt_resources      - dump SWT allocated resources when 'No more handles' error is thrown
 -eclipse_args <args>                    A list of eclipse.ini arguments to be passed directly to the Eclipse binary.
                                         To indicate the end of list use -- argument.

Examples

Start DVT without any option. You will be prompted for the workspace location.

$> dvt.sh

Start DVT with the maximum heap size of 4096 MB. You will be prompted for the workspace location.

$> dvt.sh -heap_size 4096m

Start DVT in the specified workspace.

$> dvt.sh -workspace /home/$USER/dvt/workspace

Start DVT in the specified workspace and use the specified Eclipse configuration and user area (plugins installed by user on top of a shared installation).

$> dvt.sh -workspace /home/$USER/dvt/workspace -eclipsespace /path/to/$USER/dvt/eclipsespace

Start DVT with a custom configuration file. The default is $DVT_HOME/eclipse/eclipse.ini.

$> dvt.sh -eclipse_args --launcher.ini /home/$USER/dvt/eclipse.ini

dvt_cli.sh

See Command Line Interface.

dvt_kit_installer.sh

This script is a command line utility that can be used to install / uninstall plugins delivered with the DVT Kit Distros.

The script allows you to enable in a DVT distro any of the following plugins:

Available Plugins

Revision Control System Plugins:
  • CVS (org.eclipse.cvs)

  • CLEARCASE (net.sourceforge.eclipseccase)

  • GIT (org.eclipse.egit)

  • PERFORCE.2020 (com.perforce.team.feature)

  • SVN (org.eclipse.team.svn)

Language Support Plugins:
  • BASH (de.jcup.basheditor)

  • CPP (org.eclipse.cdt)

  • JAVA (org.eclipse.jdt)

  • JSON (jsonedit-feature)

  • PERL (org.epic.feature.main)

  • PYTHON (org.python.pydev.feature)

  • TCL (org.eclipse.dltk.tcl)

  • YAML (de.jcup.yamleditor)

Review and Task Management Plugins:
  • GERRIT (org.eclipse.egerrit.feature)

  • MYLYN (org.eclipse.mylyn_feature)

Other Plugins:
  • EDITOR_CONFIG (editorconfig-eclipse-feature)

Usage

dvt_kit_installer.sh [options] operation

OPTIONS:

    The options must be specified before the operation

        [-w|workspace <dir>]
            - Temporary workspace directory (default /tmp/)

        [-s|simulate]
            - Simulate the operation

        [-h|help]
            - Display this help

OPERATIONS:

    The operation must be specified after the options and only one operation
    can be specified followed by a list of plugins (containing at least one plugin)

    [-i|install <space separated list of plugins>]
        - Install the plugins specified in the list

    [-d|delete|uninstall <space separated list of plugins>]
        - Uninstall the plugins specified in the list

    [-l|list]
        - List the plugins installed with this script

Examples

Install the plugins for GIT and C++

$DVT_HOME/bin/dvt_kit_installer.sh install GIT CPP

Uninstall the plugin for GIT

$DVT_HOME/bin/dvt_kit_installer.sh uninstall GIT

List installed plugins

$DVT_HOME/bin/dvt_kit_installer.sh list

Simulate the installation of the JAVA plugin

$DVT_HOME/bin/dvt_kit_installer.sh -s install JAVA

dvt_plugin_installer.sh

This script is a command line utility that can be used to install/uninstall/update plugins from any type of update site into the DVT Eclipse distribution.

Usage: $DVT_HOME/bin/dvt_plugin_installer.sh ...

    [-i|install <feature>]*
        - The name of the feature to be installed

    [-d|delete|uninstall <feature>]*
        - The name of the feature to be uninstalled

    [-u|update <feature>]*
        - The name of the feature to be updated

    [-r|repo|repository <uri>]*
        - Repository URI or filesystem path

    [-w|workspace <dir>]
        - Temporary workspace directory for this script (default /tmp/)

    [-s|simulate]
        - Simulate the operation

    [-l|list]
        - List installed features

    [-h|help]
        - Display this help

Examples

Update DVT offline from a downloaded archived update site:

$DVT_HOME/bin/dvt_plugin_installer.sh               \
    repo /path/to/dvt_update_site-*.zip             \
    update ro.amiq.dvt.feature

Update DVT from online update site:

$DVT_HOME/bin/dvt_plugin_installer.sh               \
    repo https://eda.amiq.com/update/latest/   \
    update ro.amiq.dvt.feature

Uninstall a plugin (ViPlugin) from the distribution:

$DVT_HOME/bin/dvt_plugin_installer.sh               \
    delete com.mbartl.eclipse.viplugin.feature

List all installed plugins:

$DVT_HOME/bin/dvt_plugin_installer.sh list

dvt_build.sh

This script allows you to use the DVT compiler in batch mode.

dvt_build.sh
   [-cmd <command file>]
   [-compile_waivers <XML file>]
   [-custom_report_location <directory>]
   [-gen_custom_report <FTL file>]
   [-heap_size <size>]
   [-help]
   [-ignore_build_config_errors]
   [-license_queue_timeout <timeout>]
   [-print_all_compile_problems]
   [-lang <language>]
   [-log <log file>]
   [-print_compile_waivers_info]
   [-silent]
   [-stack_size <size>]
   [-version]

Where:

[-cmd <command file>]
   Optional. Compile using the specified compilation arguments file.
   If not specified, compilation arguments are automatically detected by scanning the current working directory for source files.
[-compile_waivers <XML file>]
   Optional. Waive compilation errors using the waivers specified in the XML file. Waivers specified with this flag will have the highest precedence.
[-custom_report_location <directory>]
   Optional. Destination directory for the custom build report.
[-gen_custom_report <FTL file>]
   Optional, one or more. Generate a custom report using the specified template.
[-heap_size <size>]
   Optional. Set the Java heap size (syntax is <N>[g|G|m|M|k|K]). Default is 3072m.
[-help]
   Print help and exit.
[-ignore_build_config_errors]
   Optional. Ignore build configuration errors.
[-license_queue_timeout <timeout>]
   Optional. Maximum time in seconds to wait in queue for a license when one is not available.
[-print_all_compile_problems]
   Optional. Print all compile problems. Include waived problems if used with "-print_compile_waivers_info".
[-lang <language>]
   Mandatory. Enable support for the specified language (e, vlog, vhdl).
[-log <log file>]
   Optional. Log to specified file.
[-print_compile_waivers_info]
   Optional. Prints how many problems each compile waiver has matched.
[-silent]
   Optional. Turn on minimal output.
[-stack_size <size>]
   Optional. Set the Java thread stack size (syntax is <N>[g|G|m|M|k|K]). Default is 4m.
[-version]
   Print version and exit.

Exit code

  • 0 : The compilation completed successfully: at least a source file got analyzed and no configuration or compilation errors were reported

  • 1 : Either no source files were compiled or configuration/compilation errors were encountered

Examples

Compile using the specified arguments file in mixed SystemVerilog + VHDL language:

dvt_build.sh -lang vlog -lang vhdl -cmd my_compile.args

Compile and generate a custom report using the specified template file:

dvt_build.sh -lang vlog -cmd my_compile.args -gen_custom_report template.xml.ftl

Custom Report

To generate a custom compilation report in a text-based format starting from a template use the -gen_custom_report. You must provide the path to a FreeMarker template file (see FreeMarker). By default the custom report is generated in the current working directory. Specify a different location using -custom_report_location.

Inside the template file, information about the compilation results can be obtained using the API available on the ${builder} variable.

Main API

  • getAllProblems(): returns a list of all the compile problems

  • getAllWaivers(): returns a list of all the compile waivers

  • getAllFiles(): returns a list of all the compiled files in compilation order; a file may be compiled multiples times

  • getTotalCompilationTimeFormatted(): returns the total compilation time

  • getTotalCompilationTimeMilliseconds(): returns the total compilation time in milliseconds

  • getNofCompiledLines(): returns the total number of compiled lines

Problems API

  • getId()

  • getSeverity()

  • getMessage()

  • getLine()

  • getFile()

Waivers API

  • getDescription()

  • getName()

  • getSeverity()

  • getFile()

  • getLine()

  • getHitCount(): how many problems a waiver has matched

  • getMatches(): returns the waiver’s “match” clauses

Match Clause API

  • getPath()

  • getMessage()

File API

  • getPath()

  • getCompileSyntax(): returns the language and language version that was used to compile a file (e.g. Verilog_2001)

  • getNofLines()

  • getCompileIndex()

  • getCompileTime()

Custom Report Examples

Example 1 - XML Report Template

<report>
<#list builder.getAllProblems() as problem>
       <problem
       id="${problem.getId()}"
       severity="${problem.getSeverity()}"
       line="${problem.getLine()}"
       message=<#if (problem.getMessage())?has_content>"${problem.getMessage()}"<#else>"*"</#if>
       file="${problem.getFile()}"
       />
</#list>
</report>

The resulting XML file will look like this:

<report>
    <problem
    id="MISSING_PORT_CONNECTION"
    severity="WARNING"
    line="5"
    message="MISSING_PORT_CONNECTION: Missing port connection to input port(s) 'bist_req_i'"
    file="mx_1/top.v"
    />
<problem
    id="IMPLICIT_LIBRARY_ACCESS"
    severity="WARNING"
    line="31"
    message="IMPLICIT_LIBRARY_ACCESS: Access to 'work' library is implicit; the library clause can be removed"
    file="mx_1/jop/ext/gaisler/srctrl.vhd"
    />
</report>

Example 2 - JSON Report Template

{
"nofCompiledLines":"${builder.getNofCompiledLines()}",
"compilationTime":"${builder.getTotalCompilationTimeFormatted()}"
"files": [
    <#list builder.getAllFiles() as file>
    {
    "filePath":"${file.getPath()}",
    "compilationTime":"${file.getCompilationTime()}",
    "fileNofLine":"${file.getNofLines()}",
    "fileSyntax":"${file.getSyntax()}",
    "fileCompilationIndex":"${file.getCompilationIndex()}",
    },
    </#list>
    ],
"waivers": [
    <#list builder.getAllWaivers() as waiver>
    {
    "waiverName":"${waiver.getName()}",
    "waiverSeverity":"${waiver.getSeverity()}",
    "waiverDefLine":"${waiver.getLine()}",
    "waiverDescription":<#if (waiver.getDescription())?has_content>"${waiver.getDescription()}"<#else>"*"</#if>,
    "waiverFile":"${waiver.getFile()}",
    "waiverHitCount":"${waiver.getHitCount()}",
    "waiverMatches": [
    <#list waiver.getMatches() as match>
    {
        "matchPath":<#if (match.getPath())?has_content>"${match.getPath()}"<#else>"*"</#if>,
        "matchMessage": <#if (match.getMessage())?has_content>"${match.getMessage()}"<#else>"*"</#if>,
    },
    </#list>
    ]
    },
    </#list>
] ,
"problems": [
    <#list builder.getAllProblems() as problem>
    {
    "problemId":"${problem.getId()}",
    "problemSeverity":"${problem.getSeverity()}",
    "problemLine":"${problem.getLine()}",
    "problemMessage":<#if (problem.getMessage())?has_content>"${problem.getMessage()}"<#else>"*"</#if>,
    "problemFile":"${problem.getFile()}",
    },
    </#list>
]
}

The resulting JSON file will look like this

{
"nofCompiledLines":"22,602",
"compilationTime":"5s.531ms"
"files": [
    {
    "filePath":"mx_1/top.v",
    "compilationTime":"305",
    "fileNofLine":"190",
    "fileSyntax":"Verilog_2001",
    "fileCompilationIndex":"1",
    },
    {
    "filePath":"mx_1/i2c_master_slave_core/verilog/rtl/controller_interface.v",
    "compilationTime":"71",
    "fileNofLine":"547",
    "fileSyntax":"Verilog_2001",
    "fileCompilationIndex":"2",
    },
"waivers": [
{
    "waiverName":"SIGNAL_NEVER_USED",
    "waiverSeverity":"DISABLED",
    "waiverDefLine":"21",
    "waiverDescription":"*This waiver disables all problems that contain 'SIGNAL_NEVER_USED' inside their message AND were reported under 'mx_1/jop/vhdl/top/'.",
    "waiverFile":"mx_1/.dvt/waivers.xml",
    "waiverHitCount":"146",
    "waiverMatches": [
    {
        "matchPath":"mx_1/jop/vhdl/top/",
        "matchMessage": "SIGNAL_NEVER_USED: Signal is never used",
    },
    {
        "matchPath":"*",
        "matchMessage": "*SIGNAL_NEVER_USED*",
    },
    ]
},
    {
    "waiverName":"",
    "waiverSeverity":"ERROR",
    "waiverDefLine":"25",
    "waiverDescription":"*",
    "waiverFile":"mx_1/.dvt/waivers.xml",
    "waiverHitCount":"6",
    "waiverMatches": [
    {
        "matchPath":"mx_1/jop/vhdl/simulation/tb_jop_iic.vhd",
        "matchMessage": "NON_STANDARD_API: Unexpected method/",
    },
    {
        "matchPath":"''",
        "matchMessage": "*SIGNAL_NEVER_WRITTEN*",
    },
    ]
},
],
"problems": [
    {
    "problemId":"MISSING_PORT_CONNECTION",
    "problemSeverity":"WARNING",
    "problemLine":"5",
    "problemMessage":"MISSING_PORT_CONNECTION: Missing port connection to input port(s) 'bist_req_i'",
    "problemFile":"mx_1/top.v",
    },
    {
    "problemId":"MISSING_PORT_CONNECTION",
    "problemSeverity":"WARNING",
    "problemLine":"5",
    "problemMessage":"MISSING_PORT_CONNECTION: Missing port connection to output port(s) 'bist_ack_o, bist_err_o'",
    "problemFile":"mx_1/top.v",
    }
]
}

evip2dvt.sh

To fully enable DVT functionality for environments that load encrypted VIPs you first have to process the original VIPs for DVT compatibility like illustrated in the diagram below:

../../_images/edt-evip2dvt.png
step 1

Run evip2dvt.sh -t <vip_top_file> -i <vip_path> -o <output_dir>

step 2

Point $DVT_SPECMAN_PATH to <output_dir> and invoke DVT

Examples

Assume the VIP is located in /libs/vips/vr_axi/ and that the DVT compatible VIP will be generated in /libs/dvt_vips/

Invoke evip2dvt.sh using the following command line:

$DVT_HOME/bin/evip2dvt.sh -t /libs/vips/vr_axi/e/vr_axi_top.e -i /libs/vips/vr_axi/ -o /libs/dvt_vips/

You should now see under /libs/dvt_vips/ a new directory vr_axi

Set the $DVT_SPECMAN_PATH variable to point to /libs/dvt_vips/ before launching DVT:

setenv DVT_SPECMAN_PATH /libs/dvt_vips/
$DVT_HOME/bin/dvt.sh

Other examples for using evip2dvt.sh:

$DVT_HOME/bin/evip2dvt.sh/evip2dvt.sh -t `sn_which.sh uvm_e/e/uvm_e_top.e` -i `sn_which.sh uvm_e` -o dvt_vips
$DVT_HOME/bin/evip2dvt.sh/evip2dvt.sh -t `sn_which.sh cdn_e_utils/e/cdn_e_utils_top.e` -i `sn_which.sh cdn_e_utils` -o dvt_vips
$DVT_HOME/bin/evip2dvt.sh/evip2dvt.sh -p "define VR_AXI_USING_PORTS " -t `sn_which.sh vr_axi/e/vr_axi_top.e` -i `sn_which.sh vr_axi` -o dvt_vips
$DVT_HOME/bin/evip2dvt.sh/evip2dvt.sh -p "define VR_AHB_USING_PORTS " -t `sn_which.sh vr_ahb/e/vr_ahb_top.e` -i `sn_which.sh vr_ahb` -o dvt_vips
$DVT_HOME/bin/evip2dvt.sh/evip2dvt.sh -p "define CDN_OCP_USING_PORTS " -t `sn_which.sh cdn_ocp/e/cdn_ocp_top.e` -i `sn_which.sh cdn_ocp` -o dvt_vips

The evip2dvt.sh Utility Script

The evip2dvt.sh script is located in $DVT_HOME/bin/. You should run it in a shell configured for Specman and DVT: specifically, you need $SPECMAN_PATH and $DVT_HOME to be correctly set, and the specman command available.

The script syntax is as follows: evip2dvt.sh -t <top_file> -i <path_selection>

-h

Show script usage.

-t <top_file>

Top file that loads VIPs.

-i <path_selection>

Source path to process. All files from this path will be processed and dumped to the output folder.

-o <output_directory>

Optional. Output folder. All processed files will be dumped to this folder. Defaults to current directory.

-p <sn_pre_commands>

Optional. Specman pre-commands. Passed to Specman using the -p switch.

-package_api

Optional. Process the package API. The package API is not processed by default.

-protected_api

Optional. Process the protected API. The protected API is not processed by default.

Note

It might happen that false semantic errors are detected by DVT within the translated VIPs. These are due to the processing details and are irrelevant for your own code. Hence an implicit compile waiver is created and turns off all warnings and errors reported in the $DVT_SPECMAN_PATH. You can disable this implicit waiver by setenv DVT_DISABLE_PREDEFINED_WAIVERS true

Known limitation: Some files are missing from the VIPs transformed with evip2dvt.sh