Professional Documents
Culture Documents
Elite Release
Specman Elite 4.3.4
Legal Notice
Copyright © 1998-2004 Verisity Design, Inc. All rights reserved.
Trademarks
Verisity, the Verisity logo, eAnalyzer, eCelerator, eRM, Invisible Specman, LicenseE, Pure
IP, Specman, Specman Elite, SpeXsim, SpeXtreme, SureCov, SureLint, SureSolve, sVM,
Verification Advisor, Verification Alliance, Verification Vault, Verification Viewport,
Visualization Toolkit, vManager, vPlan, Xbench, Xchange, Xcite, Xoc, Xpert, Xsim, and
Xtreme are either trademarks or registered trademarks of Verisity Design, Inc. in the
United States and/or other jurisdictions. All other trademarks are the exclusive property of
their respective owners.
Confidentiality Notice
Verisity confidential, do not distribute. The contents of this document constitute valuable
proprietary and confidential property of Verisity Design, Inc. No part of this information
product may be reproduced, transmitted, or translated in any form or by any means,
electronic, mechanical, manual, optical, or otherwise without prior written permission
from Verisity Design, Inc.
Information in this product is subject to change without notice and does not represent a
commitment on the part of Verisity. The information contained herein is the proprietary
and confidential information of Verisity or its licensors, and is supplied subject to, and may
be used only by Verisity’s customers in accordance with, a written agreement between
Verisity and its customers. Except as may be explicitly set forth in such agreement,
Verisity does not make, and expressly disclaims, any representations or warranties as to the
completeness, accuracy, or usefulness of the information contained in this document.
Verisity does not warrant that use of such information will not infringe any third party
rights, nor does Verisity assume any liability for damages or costs of any kind that may
result from use of such information.
9.7.12
SpeedSim Limitation: Forced Driving of Verilog Signals . . . . . . . . . . . . . . . 9-29
9.7.13
SpeedSim Limitation: Ungraceful Exit from Simulator . . . . . . . . . . . . . . . . 9-30
9.7.14
SpeedSim Limitation: Specview Windows Not Updated . . . . . . . . . . . . . . . 9-30
9.7.15
Null Simulator Limitation: Sampling HDL-Style Variables . . . . . . . . . . . . . 9-30
9.7.16
Null Simulator Limitation: Unit Relative Paths and Full HDL Paths . . . . . . 9-31
9.7.17
Null Simulator Limitation: X/Z Literals . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-31
9.7.18
Null Simulator Limitation: Read/Write Race Conditions . . . . . . . . . . . . . . . 9-31
9.7.19
Time Literals Do Not Propagate into the Verilog Stub File . . . . . . . . . . . . . 9-32
9.7.20
Cannot Set Callback on Expanded Verilog Net . . . . . . . . . . . . . . . . . . . . . . . 9-33
9.7.21
Lists of Unit Instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-33
9.7.22
Escaped Verilog Identifier Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-33
9.7.23
Wrong Sampling in Mixed Verilog/VHDL Environment . . . . . . . . . . . . . . . 9-35
9.7.24
trace on special event . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-36
9.7.25
Verisity Adapters Known Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-37
9.7.25.1 Port Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-37
9.7.25.2 ‘test” in Pre-commands Fails for NCSIM Mixed Verilog/VHDL . . 9-39
9.7.26 ESI Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-39
9.7.26.1 Development of Proprietary Adapters . . . . . . . . . . . . . . . . . . . . . . . 9-39
9.8 Debugger Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-40
9.8.1 finish Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-41
9.8.2 Abort Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-41
9.8.3 Calling Methods of the Current Struct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-42
9.8.4 Conditional Breakpoints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-42
9.8.5 Debugging TCMs That Return a Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-42
9.8.6 on event Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-43
9.9 Data Browser Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-43
9.9.1 list_from Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-44
9.9.2 raw_print Option . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-44
9.9.3 Refreshing the Window During Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . 9-44
9.9.4 Problem Displaying Methods in the Data Browser . . . . . . . . . . . . . . . . . . . . 9-45
9.9.5 do_print() Ignored . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-45
9.10 GUI Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-46
9.10.1 Common Desktop Environment (CDE) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-46
9.10.2 Solaris Patches Required for Running Java . . . . . . . . . . . . . . . . . . . . . . . . . . 9-46
9.10.3 Specview and Exceed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-47
9.11 Help Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9-51
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Index-1
This chapter describes the 4.3.4 release. It contains the following sections:
Additional Information
• For additional information about the 4.3.4 release, please see:
$SPECMAN_HOME/docs/release_notes.txt
• For information about the defects fixed in the 4.3.4 release, please see:
$SPECMAN_HOME/docs/fixed_defects.txt
• Specman Core Technologies: documentation that is relevant for the users of all simulators, including
SpeXsim
• Specman Elite / Third Party Simulators: documentation that is specific to the use of the Specman
Elite tool, including with third-party simulators
The table of contents for the Specman online Help is now as follows:
Specman Elite Integrator’s Guide (see “New Document: Specman Elite Integrator’s Guide” on page
1-3
SSpecman Elite Installation Guide (provided only with the Specman Elite product)
About This Specman Elite Release (provided only with the Specman Elite product)
Verification Advisor
Tip If you use the online Search as your primary method for accessing the documentation, you
probably will not notice much difference in the documentation. Search engine functions have not
changed with this release.
In addition, the Specman Elite Integrator’s Guide contains information about accessing HDL objects
from within Specman Elite, using the SystemC integration with Specman Elite, using waveform viewers
with Specman Elite, and other topics specific to the Specman Elite tool.
See Also
• “Specman Elite Integrator’s Guide”
In particular, the documentation for the following commands has been expanded to serve the needs of
both SpeXsim users and the users of other, third-party simulators.
• sn_compile.sh
• write stubs
• Waveform-related commands
See Also
• sn_compile.sh on page 2-12 in the Specman Command Reference
• write stubs on page 13-7 in the Specman Command Reference
• Chapter 14 “Waveform Related Commands” in the Specman Command Reference
Note that the name of the launcher file, “VerisityHelp.htm”, has not changed.
Tip If you rely on bookmarks to access the online Help, be sure to bookmark the correct path for 4.3.4.
Remember that you can also launch the online HTML help with the following commands:
See Also
• “configure simulationc” on page 6-54 in the Specman Command Reference
• “show configure simulation” on page 6-57 in the Specman Command Reference
The documentation for method ports has been folded into the chapter on ports in e Language
Reference.The documentation for SystemC integration now appears as a chapter in Specman Elite
Integrator’s Guide.
See Also
• Chapter 6 “e Ports” in the e Language Reference
• Chapter 12 “SystemC Specman Elite Integration” in the Specman Elite Integrator’s Guide
See Also
• “Using Static Sensitivity Events” on page 12-30 in Specman Elite Integrator’s Guide
See Also
• write support info on page 22-28 in Specman Command Reference
• configure misc on page 6-33 in Specman Command Reference
See Also
• sn_which.sh on page 2-30 in Specman Command Reference
• DEPR_AT_X_NCVHDL
• DEPR_BACK33_METHOD_EXTENSION
• DEPR_BACK33_WHEN_STRUCT_MEMBER
• DEPR_FORBIDDEN_ACTION_IN_SEQ_BLOCK
• WARN_VHDL_TIME_MODELSIM_IGNORED
See Also
• “Deprecation and Backward Compatibility in the Current Release” on page 8-2 in About This Specman
Elite Release
• DEPR_CONFIG_CATEGORY_MEMORY
• DEPR_CONFIG_COLLECT_ALL
• DEPR_KEEP_SOFT_BIND
• DEPR_SN_VERILOG_TIME_SCALE_INCOMPAT
• DEPR_WAVE_REGISTER_STRUCTS
• DEPR_WHEN_AFTER_LIKE
See Also
• “Deprecation and Backward Compatibility in the Current Release” on page 8-2 in About This Specman
Elite Release
The specsim command continues to be fully supported in 4.3.4, and thus you can continue to use it.
When you do so, however, Specman Elite will display a message asking you to use specrun instead.
See Also
• “specrun” on page 2-4 in the Specman Command Reference
• “Deprecation and Backward Compatibility in the Current Release” on page 8-2 in About This Specman
Elite Release
• SpeXsim 4.3.4
• VCS 7.1
• NC Simulator on IUS5.3
• Cadence SimVision on IUS5.3
Additional Information
• For additional information about the 4.3.3 release, please see:
$SPECMAN_HOME/docs/release_notes.txt.
• For information about the defects fixed in the 4.3.3 release, please see:
$SPECMAN_HOME/docs/fixed_defects.txt.
• debug_thread_leak—Searches for threads owned by structs that are connected only to the scheduler
and causes their memory to be collected during garbage collection.
To support backward compatibility, the config debug options are translated into the appropriate config
memory commands.
See Also
• configure memory on page 6-26 in Specman Command Reference
• “Troubleshooting Specman Memory Management” on page 8-4 in Usage and Concepts Guide for e
Testbenches
As of 4.3.3, the keep soft bind() syntax is being deprecated, with a default severity level of IGNORE.
When fully deprecated, the use of keep soft bind() will not be allowed.
The new global method set_assign_after_force_compatible() lets you change the default behavior of
such proprietary VHDL adaptors to be compatible with the default Specman Elite behavior.
See Also
• force on page 17-53 in e Language Reference
Note If you need help getting your Verisity license file or have questions regarding the Verisity license,
please email licenses@verisity.com.
Additional Information
• For additional information about the 4.3.2 release, please see:
$SPECMAN_HOME/docs/release_notes.txt.
• For information about the defects fixed in the 4.3.2 release, please see:
$SPECMAN_HOME/docs/fixed_defects.txt.
See Also
For more information, see the following sections in the e Language Reference:
• “New Configuration Flag for Controlling Direction of Constraints on List Items” on page 3-2
• “New Search Available for Finding Specific Generation Steps” on page 3-3
• “Updated Syntax for Generation Commands” on page 3-4
• “Shortened Generation Error IDs” on page 3-4
If you are upgrading from a pre-4.2 version of Specman Elite version to 4.2 or later and your code
requires the pre-4.2 behavior—or if you are using an eVC that requires the pre-4.2 behavior—you now
can set a new generation configuration option to ensure that constraints on lists are unidirectional, rather
than bidirectional.
The new option is -list_constraint_is_bidir, and its default value is TRUE, which means that all
constraints on list items are treated as bidirectional. You set it to FALSE to ensure the pre-4.2 behavior.
The -list_constraint_is_bidir option is effective only during parsing. If your design contains a mixture
of code that requires the old behavior and the new behavior, you can change the value of this flag as
appropriate before loading each module in your design. (You can also edit your existing code to avoid
the problem, as described in “Backwards Compatibility for List Item Constraints” on page 11-13 in the e
Language Reference.)
See Also
• “configure gen” on page 6-17 in the Specman Command Reference
• “Constraining List Size” on page 11-11 in the e Language Reference
This new feature enables you to find interesting steps in the step tree more quickly when you know
specific strings of code used in the interesting steps.
See Also
• “Using the Run-Time Generation Debugger” on page 5-16 in the Usage and Concepts Guide for e
Testbenches
• “Using the Static Analysis Generation Debugger” on page 5-35 in the Usage and Concepts Guide for
e Testbenches
• The new -all option collects all generation information and is equivalent to the existing -collect_all
option for the configure gen command.
• The new -help option displays information about the collect gen options.
See Also
• collect gen on page 7-1 in the Specman Command Reference
• configure gen on page 6-17 in the Specman Command Reference
As of 4.3.2, these IDs have been shortened so that they are searchable in the online help:
• ERR_GEN_PARSE_NON_SIMPLE_PATH_IN_FOREACH is now
ERR_GEN_PARSE_NON_SIMPLE_PATH_FOREACH.
• ERR_GEN_PARSE_NON_SIMPLE_PERMUTATION_PATH is now
ERR_GEN_PARSE_NON_SIMPLE_PERM_PATH.
See Also
• Appendix B “Generation Errors” in the Usage and Concepts Guide for e Testbenches
See Also
• show cover on page 10-6 in the Specman Command Reference.
• “Using show cover -space To Show the Effect of the illegal/ignore Options” on page 7-13 in the Usage
and Concepts Guide for e Testbenches
See Also
• For more information, see show patches on page 22-22 in the Specman Command Reference
See Also
• For more information, see“Declaring Dependencies on Specman Version and Other Packages” on
page 2-15 in the e Reuse Methodology (eRM) Developer Manual.
As of 4.3.2, this behavior also applies to ASCII command mode: when you are working in ASCII
command mode, if the configure print line_size option is set to a value that is larger than the legal
maximum, Specman Elite automatically resets the value to the legal maximum. Note that the legal
maximum line width for ASCII command mode is 2048 characters, rather than 150 characters.
Previous to 4.3.2, Specman Elite did not correct your error automatically for you in ASCII command
mode.
See Also
• For more information, see “The Print Options” on page 6-38 in the Specman Command Reference.
As of 4.3.2, search words with “-syntax” appended to the end of the word no longer work. This pre-4.3.2
feature was intended to help users find keywords more quickly. However, most users never learned to
use this feature; it therefore might not be familiar to you. Regardless, it is no longer supported as of
4.3.2.
The rules for the enhanced search are completely described in the Search and Browsing Tips.
Additional Information
• For additional information about the 4.3.1 release, please see:
$SPECMAN_HOME/docs/release_notes.txt.
• For information about the defects fixed in the 4.3.1 release, please see:
$SPECMAN_HOME/docs/fixed_defects.txt.
With this release, in method ports are supported for external method ports as well. This new support lets
you call an e method directly from a foreign agent such as SystemC.
A method port must be parameterized by a type of a special kind—a method type. In this release, the
syntax for declaring method types has changed from
type send_packet_method_t: m(p : packet)@sys.any; -- old syntax
to
method_type send_packet_method_t(p : packet)@sys.any; -- new syntax
See Also
• add_secondary_toolbar() on page 2-154 in Specman Beta Features
• add_menu_item_to_secondary_toolbar() on page 2-155 in Specman Beta Features
• add_separator_to_secondary_toolbar() on page 2-156 in Specman Beta Features
See Also
• “Verilog Stubs Files” on page 8-4 in the Usage and Concepts Guide for e Testbenches.
See Also
• “Deprecation and Backward Compatibility in the Current Release” on page 8-2 in About This Specman
Elite Release
• dut_error_struct on page 10-6 in the e Language Reference
• lock() and free() on page 22-65 in the e Language Reference
• “Events for Aiding Debugging” on page 12-13 in the e Language Reference
• “The cvl_manager Struct (a Global Struct Field)” on page 12-4 in the Usage and Concepts Guide for
e Testbenches
See Also
• Chapter 10 “Using a Waveform Viewer” in the Specman Elite Integrator’s Guide
See Also
• “Using Per-Instance Coverage” on page 7-29 in the Usage and Concepts Guide for e Testbenches.
As of 4.3.1, the PDF files now appear in the new docs/pdf_docs directory. The PDF hierarchy is flattened
so that all PDF files appear directly in the docs/pdf_docs directory:
docs/pdf_docs/about_this_release.pdf
docs/pdf_docs/beta_features.pdf
docs/pdf_docs/c_reference.pdf
docs/pdf_docs/e_reference.pdf
…
All hyperlinks between the PDF files (from one manual to another manual) work in this new hierarchy.
For more information about Java navigation on a Windows computer, see the section “Java/JavaScript
Navigation” in the Search and Browsing Tips. This document can be located in the left-hand pane of the
Verisity Help.
Additional Information
• For additional information about the 4.3 release, please see:
$SPECMAN_HOME/docs/release_notes.txt.
• For information about the defects fixed in the 4.3 release, please see:
$SPECMAN_HOME/docs/fixed_defects.txt.
For structs that contain extended visualize() methods, a new Data Browser configuration parameter,
auto_visualize, can be set so that selecting a struct instance in the Data Browser automatically opens the
VT window for the struct.
See the following for additional information on the new Visualization Toolkit features:
• The auto_visualize parameter in configure databrowser on page 6-11 in the Specman Command
Reference
• “The visualize() Method of any_struct” on page 22-32 in the e Language Reference
• Chapter 2 “Using the Visualization Toolkit” in Specman Beta Features
• “Opening Visualization Toolkit Windows” on page 3-19 in the Usage and Concepts Guide for e
Testbenches
• The visualize() method of any struct, used to enable Visualization Toolkit features. See “The
visualize() Method of any_struct” on page 22-32 in the e Language Reference.
• The writef() method writes data to a file in a user-defined format. See writef() on page 22-50 in the
e Language Reference.
or
set_config(gen, static_analysis_opt, TRUE);
Notes
• Random stability is not preserved from the 4.2.1 release (or any earlier releases) when the
optimizations are activated.
• If it is used, the -static_analysis_opt configuration option must be set no later than the setup() test
phase (see “Generation and Test Phases” on page 1-2 in the Generation Guide).
• The configuration option is FALSE by default, and cannot be set to FALSE. The only possible user
setting is TRUE.
• The ability to set this option will be deprecated in a future release when it will be automatically
activated within Specman Elite.
• Easy launch of the eRM utility from Specview, plus additional eRM enhancements
• Data Browser enhancements
• New methods visualize(), which enables Visualization Toolkit features, and writef(), which lets you
write data to a file in a user-defined format
• New generation constraint block e keep all of {…}, which lets you define a block of constraints in a
simple, readable format
• The production release of the following 4.2.x beta feature:
• Static analysis optimizations
• The beta release of the following features:
• NC SystemC integration
• Method ports
• Additional new features for the Visualization Toolkit
• Support for the following:
• Cadence Design Systems LDV5.0 and LDV5.1
• Cadence Design Systems SimVision waveform viewer
For more information about the new features in this release, see Chapter 5 “New Features in Version 4.3”.
For information about installing 4.3 and upgrading to 4.3, see the following sections:
You can download the PDF version of the Specman Elite Installation Guide from the Verisity FTP site
or you can look at it online.
To get instructions on how to download the Specman Elite Installation Guide, the release executables,
and the documentation and Verification Advisor tar files from the Verisity FTP site, send email to
support@verisity.com.
Alternatively, you can make eRM available for selected runs (rather than for all runs) by either:
• “Loading the Core eRM Package on Top of Specman Elite” on page 6-2
• “Compiling the Core eRM Package on Top of Specman Elite as User Code” on page 6-3
See Also
• “Install eRM Packages” on page 3-3 in the Specman Elite Installation Guide
To load evc_util onto Specman Elite, enter the following command at the vrst-tool> prompt:
load evc_util/e/evc_util_top
Note You can also load evc_util implicitly if it is imported by another package that you load. All
packages in erm_lib import evc_util.
To compile evc_util onto Specman Elite, enter the following command at the shell prompt:
% sn_compile.sh -t /tmp evc_util/e/evc_util_top.e
This produces an executable (named evc_util_top, in the above example), with evc_util compiled on top
of Specman Elite.
For information on the command-line options for sn_compile.sh, see sn_compile.sh on page 2-12 in the
Specman Elite Integrator’s Guide.
The notification messages are associated with one or more notification IDs. Each notification ID
identifies a specific deprecated feature and a default severity level. The notification ID appears in all
notification messages about the deprecated feature. The severity level for the notification ID progresses
over several releases from IGNORE to WARNING and ERROR. The meaning of the severity level for
each type of deprecation is described in:
• The notification IDs and related severity levels associated with a given release
• The number of times that the associated notification occurs in the currently loaded e code
See Also
• show notify on page 22-20 in the Specman Command Reference
• set notify on page 22-10 in the Specman Command Reference
Notification IGNORE By default, the related notification messages are not displayed. You
can display the notification messages by setting the severity level for
the related notification IDs to WARNING with the set notify
command. (See set notify on page 22-10 in the Specman Command
Reference.)
Warning WARNING By default, the related notification messages are always displayed.
You can disable the notification messages by setting the severity
level for the related notification IDs to IGNORE with the set notify
command. (See set notify on page 22-10 in the Specman Command
Reference.)
Error ERROR You can continue to disable the notification messages with the set
notify command. Descriptions of the deprecated feature, however,
no longer appear in the Specman Elite documentation.
Full ERROR No notification messages are issued. Instead, you receive a standard
Deprecation Specman Elite error message asking that you correct your code. You
cannot disable the error messages, and you must change your code.
Early IGNORE Default: old behavior By default, the related notification messages
notification are not displayed. You can display the
Cannot change to new notification messages by setting the severity
behavior level for the related notification IDs to
WARNING with the set notify command.
(See set notify on page 22-10 in the
Specman Command Reference.)
Notification IGNORE Default: old behavior By default, the related notification messages
are not displayed. You can display the
Can change to new notification messages by setting the severity
behavior level for the related notification IDs to
WARNING with the set notify command.
(See set notify on page 22-10 in the
Specman Command Reference.)
Warning WARNING Default: old behavior By default, the related notification messages
are always displayed. You can disable the
Can change to new notification messages by setting the severity
behavior level for the related notification IDs to
IGNORE. (See set notify on page 22-10 in
the Specman Command Reference.)
New IGNORE Default: new behavior By default, the related notification messages
Behavior are not displayed. You can display the
Can change to old notification messages by setting the severity
behavior level for the related notification ID to
WARNING. (See set notify on page 22-10
in the Specman Command Reference.)
Full None Default: new behavior No notification messages are issued. The
Deprecation new behavior is the default behavior, and
Cannot change to old you are no longer able to change to the old
behavior behavior.
If you are an eVC developer, Verisity recommends that you run new releases with deprecation severity
levels set to WARNING so that you become aware of all features that have started deprecation.
set notify on page 22-10 in the Specman Command Reference describes how to change the severity
level.
Note The notification messages and IDs for currently deprecated features are described in Chapter 8
“Deprecation and Backward Compatibility for this Release”.
Specman Elite also maintains a set of backward compatibility flags for versions 3.3 and 3.2. The
backward compatibility flags let you revert some aspects of the tool’s current behavior to version 3.2 or
3.3 behavior, to help support conversions from version 3.3 or 3.2 to the current version of Specman Elite.
This chapter describes both deprecation for the current version and version 3.X backward compatibility.
Not all backward compatibility issues are addressed through deprecation or backward compatibility
flags. For example, software fixes can cause changed behavior that requires your understanding, even if
they do not result in a deprecated feature. This chapter also describes these additional backward
compatibility issues.
For a description of the deprecation process and the meaning of the severity levels, see Chapter 7 “The
Deprecation Process”.
Note For the complete history of each deprecated feature, see the deprecation_history.pdf file in the
Verification Vault (www.verificationvault.com) at Knowledge Base ›› Product
Documentation ›› Deprecated and Outdated Features.
Default
Notification ID/Description Severity
DEPR_AHB_BURST_DELAY_KEYWORD IGNORE
DEPR_AHB_BURST_START_KEYWORD
DEPR_AHB_TRANSFER_DELAY_KEYWORD
DEPR_AHB_TRANSFER_START_KEYWORD
DEPR_AHB_TRANSACTION_START_KEYWORD
These notification IDs identify the use of “delay” fields and the “start()” method in
AHB eVC predefined structs and units. These fields and method are under
deprecation to avoid overlap with e keywords. For more information, read the
AHBeVC release notes vr_ahb_release_notes.txt.
DEPR_AT_X_NCVHDL IGNORE
Identifies code which, when reading VHDL objects using @x, interprets U, W and -
(don’t care) std_logic values incorrectly as zero. Applies for NC VHDL and NC SIM
only. The valuation of zero is incompatible with other VHDL simulators, for which
the evaluation is one. You can ensure compatible valuation by setting the
compatible_vhdl_at_x_nc simulation config option to TRUE.
DEPR_BACK33_METHOD_EXTENSION WARNING
Table 8-1 Deprecation and Backward Compatibility in the Current Release (continued)
Default
Notification ID/Description Severity
DEPR_BACK33_WHEN_STRUCT_MEMBER WARNING
DEPR_BIT_EXTRACT_BOUNDS WARNING
Identifies user code that accesses illegal range of bits. For more information, see
“Access Violation for Bit Slice” on page 8-10.
DEPR_CONFIG_CATEGORY_MEMORY WARNING
Identifies the use of undocumented config debug options that are under deprecation.
These undocumented options are listed below, along with the config memory
options that you should use instead:
For more information about the config memory options, see configure memory on
page 6-26 in Specman Command Reference.
DEPR_CONFIG_COLLECT_ALL WARNING
Identifies the use of the -collect_all config gen option, which is under deprecation.
This option controls the generation information collected when the collect gen
command is enabled. Instead of config gen -collect_all, use the collect gen -all. For
more information, see collect gen on page 7-1 in Specman Command Reference.
Table 8-1 Deprecation and Backward Compatibility in the Current Release (continued)
Default
Notification ID/Description Severity
DEPR_CONFIG_SHORT_IS_SIGNED WARNING
As of version 4.2, setting this option to FALSE causes an OS11 error during a test
run. Instead of using this option, change the type of all short signed integers that
require an unsigned behavior with a corresponding unsigned type. For example:
vrst-tool> var i: uint(bits:4) // change to an unsigned type
vrst-tool> i = -4
vrst-tool> print i
i = -4
DEPR_CVL_FIELD_KEYWORD IGNORE
Identifies the use of the predefined cvl struct (a global struct field). This struct is
under deprecation to avoid overlap with e keywords and is being replaced with the
new predefined struct cvl_manager. For more information, see “The cvl_manager
Struct (a Global Struct Field)” on page 12-4 in the Usage and Concepts Guide for e
Testbenches.
DEPR_DUT_ERR_FIELD_MESSAGE_KEYWORD IGNORE
Identifies the use of the message field in the dut_error_struct. This field is under
deprecation to avoid overlap with e keywords. Instead, use the struct member
dut_error_struct.get_message(). For more information, see dut_error_struct on
page 10-6 in the e Language Reference.
Table 8-1 Deprecation and Backward Compatibility in the Current Release (continued)
Default
Notification ID/Description Severity
DEPR_FM_REPEAT_SAMPLING IGNORE
Using sampling for the repeat part of First Match temporal expressions—for
example, as used in the temporal expression “{([..] * cycle ) @clk; @b}”—is illegal.
Currently, this sampling (the @clock in the example) is ignored, even though it is
illegal. This illegal syntax is now under deprecation and identified with this
notification ID.
For more information about First Match temporal expressions, see [ exp..exp ] on
page 13-26 in e Language Reference.
DEPR_FORBIDDEN_ACTION_IN_SEQ_BLOCK ERROR
DEPR_INT_TO_STD_LOGIC_MTI IGNORE
DEPR_KEEP_BLOCK IGNORE
Identifies user code that contains the undocumented keep{…} constraint block. For
more information, see “Use of keep {…} Constraint Block” on page 8-12.
DEPR_KEEP_SOFT_BIND WARNING
Identifies user code that contains keep soft bind {…} constraints. Currently these
constraints are converted silently to hard constraints, but the keep soft bind {…}
syntax will be completely deprecated in a future release.
DEPR_LIST_SLICE_BOUNDS WARNING
Identifies user code that accesses illegal items of a list. For more information, see
“Access Violation for List Slice” on page 8-13.
Table 8-1 Deprecation and Backward Compatibility in the Current Release (continued)
Default
Notification ID/Description Severity
DEPR_LOCKER_RELEASE_TCM_KEYWORD IGNORE
Identifies the use of the locker.release() predefined TCM. This TCM is under
deprecation to avoid overlap with e keywords and is being replaced with the new
predefined TCM locker.free().
For more information about locker.free(), see “lock() and free()” on page 22-65 in the
e Language Reference.
DEPR_MESSAGE_LOGGER_IS_UNIT WARNING /
ERROR
Identifies message loggers that are defined as structs, not units. Note that in some
cases, the default severity level associated with this notification ID is WARNING, in
others it is ERROR. For more information, see “Message Logger Struct Deprecation”
on page 6-4 in the e Reuse Methodology (eRM) Developer Manual.
DEPR_RESERVED_KEYWORD IGNORE
Identifies a Specman Elite keyword that is being used as an identifier in your code.
For more information, see “Use of Specman Elite Reserved Keywords” on page 8-16.
DEPR_SEQUENCE_FIELD_KEYWORD IGNORE
Identifies the fields in the MAIN and RANDOM sequences that are named
“sequence”. These fields are under deprecation to avoid overlap with e keywords.
Verisity recommends using “main_sequence” for the name for the MAIN sequence
field and “sub_sequence” as the name for sequence fields under MAIN or
RANDOM. For more information, see “Sequence Deprecation” on page 5-96 and
“Field sequence Deprecation” on page 5-97 in the e Reuse Methodology (eRM)
Developer Manual.
DEPR_SEQUENCE_ITEM_KEYWORD IGNORE
Identifies the field named “item” in SIMPLE sequences. This field is under
deprecation to avoid overlap with e keywords. Verisity recommends using the name
“seq_item” instead. For more information, see “Sequence item Deprecation” on page
5-99 in the e Reuse Methodology (eRM) Developer Manual.
Table 8-1 Deprecation and Backward Compatibility in the Current Release (continued)
Default
Notification ID/Description Severity
DEPR_SEQUENCE_START_KEYWORD IGNORE
DEPR_SESSION_DUT_ERR_EVENT_KEYWORD IGNORE
Identifies the use of the predefined event session.dut_error, which is emitted when
a dut_error action is performed. This event is under deprecation to avoid overlap
with e keywords. Instead, use the new predefined event session.dut_err.
For more information about this event, see “Events for Aiding Debugging” on page
12-13 in the e Language Reference.
DEPR_SN_VERILOG_TIME_SCALE_INCOMPAT WARNING
Identifies a discrepancy between the time scale specified in the stubs file
(specman.v) and the Verilog time scale currently affecting Specman Elite behavior.
In a future release, the behavior of Specman Elite will be changed such that it gets
the time scale from the stubs file. For more information, see “Setting the Verilog
Timescale” on page 8-18.
DEPR_SYS_HDL_PATH WARNING
DEPR_TCM_CLOCK WARNING
Identifies user code that uses a different sampling event in an extension of a TCM.
For more information, see “Extending a TCM using a Different Sampling Event” on
page 8-20.
DEPR_TEMPO_BACK33_ADD_EVAL ERROR
Identifies use of the back33 -add_eval option, which is being deprecated. This
option eliminates multiple evaluations of temporal expressions in the same cycle.
For more information, see “Use of the back33 additional_eval Option” on page 8-21.
Table 8-1 Deprecation and Backward Compatibility in the Current Release (continued)
Default
Notification ID/Description Severity
DEPR_TEMPO_BACK33_NO_REORDER ERROR
Identifies use of the back33 -no_reorder option, which is being deprecated. This
option determines whether temporal expression evaluation order is influenced by the
dependency order of each temporal expression on other events. For more
information, see “Use of the back33 no_reorder Option” on page 8-23.
DEPR_TYPE_LONG WARNING
Identifies user code that uses “long” as the name for a type. For more information,
see “Reserved Type Name” on page 8-25.
DEPR_UNBOUND_INT_SLICE WARNING
Identifies user code that does not place an upper bound to a list slice of an unbounded
integer (an int (bits:*) expression). For more information, see “Access Violation for
List Slice of Unbounded Integer” on page 8-25.
DEPR_UNIT_GEN_INSTANCE WARNING
DEPR_UNIT_INSTANCE
Identifies a unit instance rule violation. For more information, see “Restrictions on
the Creation of Unit Instances” on page 8-26.
DEPR_WAVE_REGISTER_STRUCTS WARNING
Identifies the use of the deprecated wave configuration option -register_structs and
requests the user to use the memory configuration option -retain_trace_structs
instead. For more information, see “Deprecated Wave Configuration Option” on page
8-30.
DEPR_WHEN_AFTER_LIKE WARNING
Identifies references to when subtypes of structs with like children. For more
information, see “References to When Subtypes of Structs with Like Children” on
page 8-30.
Table 8-1 Deprecation and Backward Compatibility in the Current Release (continued)
Default
Notification ID/Description Severity
In a future release, the specsim command may not be available for use.
For more information about the specrun command, see specrun on page 2-4 in
Specman Command Reference.
WARN_VHDL_TIME_MODELSIM_IGNORED WARNING
Warns you that the vhdl time statements in your code will be ignored. This problem
occurs only when Specman Elite is linked with ModelSim.
See Also
Some of the deprecated features included in Table 8-1 on page 8-2 are described in more detail in the
following sections:
To prevent this message it is recommended to modify the code to remove the identified violation.
Associated Notification ID
DEPR_BIT_EXTRACT_BOUNDS
If you access bits in a [low:high] format, you will see a message similar to the following message. (See
“Example 2” on page 8-11 for an illustration of this type of violation.)
Example 1
In earlier releases, Specman Elite did not find some bit extraction violations at parse time. Thus the
following code parses and runs without error in earlier releases:
<'
run() is also {
var x: int;
print x[40:5];
};
'>
To avoid accessing non-existent bits you must only access bits within the natural range:
<'
run() is also {
var x: int;
print x[31:5];
};
'>
Example 2
In earlier releases, Specman Elite did not find some bit extraction format violations where the upper
bound is lower than the lower bound. Thus the following code loads and runs without error in earlier
releases:
<'
extend sys {
run() is also {
var x: int;
x[5:10] = 5;
};
};
'>
To avoid this format violation you must have an higher bound that is equal or higher than the lower
bound:
<'
extend sys {
run() is also {
var x: int;
x[10:5] = 5;
};
};
'>
To see whether your code uses the deprecated keep {…} constraint block, use the set notify command to
change the severity of DEPR_KEEP_BLOCK to WARNING.
Associated Notification ID
DEPR_KEEP_BLOCK
Example 1
The following code is now deprecated:
<'
struct A {
f1: int;
f2: int;
};
extend sys {
a: A;
a1: A;
'>
Instead, you can use the keep all of {…} constraint block. For example,
keep all of {a1.f1 == 5; a1.f2 == 6};
To prevent this message it is recommended to modify the code to remove the identified violation.
Associated Notification ID
DEPR_LIST_SLICE_BOUNDS
If you access list items in a [high..low] format, you will see a message similar to the following message.
(See “Example 2” on page 8-15 for an illustration of this type of violation.)
*** Warning: DEPR_LIST_SLICE_BOUNDS: Cannot access range [20..10] of an
If you access list items using a negative index, you will see a message similar to the following message.
(See “Example 3” on page 8-15 for an illustration of this type of violation.)
*** Warning: DEPR_LIST_SLICE_BOUNDS: Cannot access range [-1..i] of a list
- negative index not allowed.
In future releases this violation may become an error.
at line 7 in test12a.e
print l[-1..i];
Example 1
In earlier releases, Specman Elite did not find at parse time some list access violations. Thus the
following code parses without error in earlier releases but fails to run:
<'
extend sys {
run() is also {
var l: int;
print l[..40];
};
};
'>
To avoid accessing non-existent bits you must only access bits within the natural range:
<'
extend sys {
run() is also {
var l: int;
print l[..31];
};
};
'>
Example 2
In earlier releases, Specman Elite did not find at parse time some list access format violations where the
upper bound is lower than the lower bound. Thus the following code parses without error in earlier
releases but fails to run:
<'
extend sys {
run() is also {
var l: int;
print l[20..10];
};
};
'>
To avoid this format violation you must have an higher bound that is equal or higher than the lower
bound:
<'
extend sys {
run() is also {
var l: int;
print l[10..20];
};
};
'>
Example 3
In earlier releases, Specman Elite did not find at parse time some list access violations that use a
negative index. Thus the following code parses without error in earlier releases but fails to run:
<'
extend sys {
run() is also {
var l: list of int;
var i: int;
print l[-1..i];
};
};
'>
To avoid this violation you must avoid using a negative index in your code:
<'
extend sys {
run() is also {
var l: list of int;
var i: int;
print l[0..i];
};
};
'>
The primary reason for this deprecation category is that modern parsers have difficulty handling code in
which keywords are used also as identifiers. Thus, keyword deprecation is necessary to support the
development of future e based tools, whether from Verisity or from a third party.
However, unlike other deprecation categories, you will continue to be able to set the severity level for
keyword deprecation to IGNORE, regardless of the default severity level. Thus, if your code contains
identifiers that are identical to keywords, you will be able to choose what to do about it: If using other e
based tools turns out to be important to you, you can choose to edit your code. If using other e based
tools turns out not to be important to you, you will be able to keep the severity level at IGNORE and
preserve your code in its current form.
To see whether your code contains identifiers that are identical to Specman Elite reserved keywords, use
the set notify command to change the severity of DEPR_RESERVED_KEYWORD to WARNING.
Note Keywords that are used in Specman Elite commands are not subject to deprecation.
Associated Notification ID
DEPR_RESERVED_KEYWORD
Example 1
In the following example, the reserved keyword “index” is used as an identifier, which conflicts with the
for each index syntax and also the implicit index variable:
extend sys {
index: byte; -- use of the reserved keyword "index" as an identifier
run() is also {
print me.index;
};
};
Example 2
In the following example, the reserved keyword “delay” is used as an identifier, which conflicts with the
delay() temporal expression:
extend sys {
delay: uint;
my_tcm() @clk is {
wait [delay];
};
};
};
Associated Notification ID
DEPR_SN_VERILOG_TIME_SCALE_INCOMPAT
Example
If you were to enter the following command (for Verilog XL):
xl_specman -s file1.v file2.v specman.v
The specman.v stubs file would inherit the Verilog time scale from file2.v, while the first instance of $sn
(which affects Specman Elite behavior) would be taken from file1.v. Thus, the time scale used at that
point might not be the same as the time scale defined in the stubs file.
To avoid this problem, follow these suggestions to ensure that the time scale used is always the one set
in the stubs file:
• When the DUT contains more than one `timescale directive, use the verilog time statement to set
the time scale in the stubs file.
• If you need to call Specman Elite (using $sn) from Verilog code explicitly, use the verilog code
statement to put the Specman Elite call in the stubs file. This ensures that the call to Specman Elite
has the time scale shown in the stubs file, rather than a time scale from other parts of the Verilog code.
See Also
• verilog time on page 17-14 in the e Language Reference
Associated Notification ID
DEPR_SYS_HDL_PATH
Example
In earlier releases, Specman Elite allowed you to define constraints on the hdl_path() of sys. Thus the
following code parses and runs without error in earlier releases:
extend sys {
keep hdl_path() == "abc"; -- As documented in the e Reference Manual,
-- you cannot constrain sys.hdl_path()
};
If the hdl_path() setting of the units under sys worked well in earlier versions of Specman Elite it is safe
to remove the constraints on sys.hdl_path().
If you are trying to constrain only the HDL path of sys in order to affect all HDL access paths, you need
to define the appropriate constraints on other units in your environment.
See Also
• hdl_path() on page 5-19 of the e Language Reference
To prevent this message you must use the same sampling event in a TCM and all its extensions.
Associated Notification ID
DEPR_TCM_CLOCK
Example
Extensions of a TCM need to use the same syntactical definition of the sampling of the TCM. In earlier
versions of Specman Elite this check was only partially implemented. As a result, Specman Elite did not
identify all violations.
The wait in the extension is interpreted as “wait cycle@p2.clk”. However the out() is synchronized with
@p1.clk, not with @p2.clk.
To prevent this message, use the same event reference in all extensions of a TCM. For example:
<'
foo() @p1.clk is {
// ...
};
'>
<'
foo() @p1.clk is also {
// ...
};
'>
See Also
• method [@event] is also | first | only | inline only on page 7-12 of the e Language Reference
If your e code contains temporal expressions that depend on data that is modified after the observed
events are emitted, your code behavior might change when you migrate from Specman Elite 3.3 or
earlier to 4.2 or later. This is because some temporal expressions might not be evaluated as frequently.
If you want to restore the old behavior, then you can enable the additional_eval back33 compatibility
flag. This compatibility flag, however, is in deprecation starting with 4.3.1.
Associated Notification ID
DEPR_TEMPO_BACK33_ADD_EVAL
When this flag is set to TRUE, many temporal expressions are evaluated multiple times in the same
cycle, regardless of relevant events, which is detrimental to performance.
When this flag is the default, FALSE, the temporal engine evaluates temporal expressions only upon
occurrence of relevant events.
Note You cannot change the setting of the additional_eval back33 compatibility flag after loading any
e files containing temporal definitions. This results in a runtime error.
The following code is an example of a temporal expression that depends on data that is modified after
the observed event is evaluated. In 4.0 and later, if a_gt_0 is evaluated first, before the run of tcm_2(), it
sees ‘a’ = 0 as initialized, until reevaluated at time 2, and tcm_1() outputs “I saw ‘a’ > 0 at 2”.
With the additional_eval back33 flag set to TRUE, event a_gt_0 is evaluated once more and sees the
assignment to 1 at time 1. tcm_1() outputs “I saw ‘a’ > 0 at 1”.
<'
extend sys {
!a : int;
event a_gt_0 is true(a>0)@any;
tcm_1()@any is {
sync @a_gt_0;
out( "I saw 'a' > 0 ", sys.time );
wait [5];
stop_run()
};
tcm_2()@any is {
wait cycle;
a = 1;
out( "I assigned 'a' with 1 at ", sys.time );
};
run() is also {
start tcm_1();
start tcm_2();
};
};
'>
Contact Verisity Support or your local CE for help with getting your environment working properly
without this flag set to TRUE.
If you want to restore the old behavior, then you can enable the no_reorder back33 compatibility flag.
This compatibility flag, however, is in deprecation starting with 4.3.1.
Associated Notification ID
DEPR_TEMPO_BACK33_NO_REORDER
When this flag is set to TRUE, the order of evaluating temporal expressions and executing TCMs is
determined purely on the basis of the order in which events are emitted. When this flag is FALSE (the
default), temporal expression evaluation order is influenced by the dependency order of each temporal
expression on other events.
Note You cannot change the setting of the no_reorder back33 compatibility flag after loading any e
files containing temporal definitions. This results in a runtime error.
The following code contains a race. If tcm1() is run first, data will have the final value which tcm2()
assigned to it, 2, and finalize() will output “data = 2”. If the order is reversed, the output will be “data =
1”.
<'
extend sys {
!data : int;
on any {
if sys.time == 5 {
stop_run();
};
};
tcm1()@any is {
data = 1;
};
tcm2()@any is {
data = 2;
};
finalize() is also {
out( "data = ", data );
};
run() is also {
start tcm2();
start tcm1();
};
};
'>
Contact Verisity Support or your local CE for help with getting your environment working properly
without this flag set to TRUE.
Associated Notification ID
DEPR_TYPE_LONG
Example
In earlier releases, the following code parses and runs without error:
data: long; -- use of predefined type "long"
To prevent this message it is recommended to modify the code to remove the identified violation.
Associated Notification ID
DEPR_UNBOUND_INT_SLICE
Example
In earlier releases, Specman Elite did not find this violation at parse time. This violation could lead to a
memory overflow at run time. Thus the following code parses and runs without error in earlier releases:
<'
extend sys {
run() is also {
var l: int (bits: *);
l= 1024M*1024M;
print l[20..];
};
};
'>
To avoid creating an unbounded list you must determine the upper bound of the list slice. For example:
<'
extend sys {
run() is also {
var l: int (bits: *);
l= 1024M*1024M;
print l[20..ilog2(l)+1];
};
};
'>
However, in earlier releases Specman Elite did not flag all forms of such violations. Specman Elite now
issues a notification message if it detects a unit instance rule violation.
Note In most unit instance violations, the relevant unit instance field need not be defined as a unit
instance but rather as a unit type, in other words, a reference to a unit that is instantiated elsewhere.
If constraints in your code violate the uniqueness of a unit instance, you will see a message like the
following. (See “Example 3” on page 8-29 for an illustration of this type of error.)
*** Warning: DEPR_UNIT_GEN_INSTANCE: unit instance 'u2' was defined
at line 9 in @tt0
but was later constrained to equal another unit instance or NULL.
A unit instance must be unique and non-NULL.
In future releases this violation may become an error.
Example 1
In earlier releases, Specman Elite did not detect run-time generation of unit instances when the unit
expression was of the form unit-type-exp.unit-instance. Thus the following code parses and runs without
error in earlier releases, even though gen_new_injector() generates a unit instance at run time.
extend sys {
gen_new_injector() is {
gen atm_dut.injector keeping { -- illegal gen of unit instance
.injector_id == 1;
};
};
run() is also {
gen_new_injector();
};
};
unit atm_dut {
injector :atm_injector is instance;
};
unit atm_injector {
injector_id: uint;
To avoid violating the unit instance rule, you must remove all actions from your code that generate unit
instances at run time.
Note It is legal to generate fields of a unit type (not a unit instance type) at run time. See field:
unit-type on page 5-13 of the e Language Reference.
Example 2
In earlier releases, Specman Elite did not detect run-time assignments of new values to existing unit
instances when the unit expression was of the form unit-type-exp.unit-instance. Thus the following code
parses and runs without error in earlier releases, even though assign_null_injector() assigns NULL value
to an existing unit instance at run time.
extend sys {
atm_dut: atm_dut is instance;
!ref_inj: atm_injector;
assign_null_injector() is {
atm_dut.injector = ref_inj; -- illegal assign of unit instance
};
run() is also {
assign_null_injector();
};
}; // sys
unit atm_dut {
injector :atm_injector is instance;
}; //atm_dut
unit atm_injector {
injector_id: uint;
To avoid violating the unit instance rule, you must remove all actions from your code that assign new
values to existing unit instances at run time.
Note It is legal to assign new values to fields of a unit type (not a unit instance type) at run time. Thus,
in this example, changing the assignment from “atm_dut.injector = ref_inj” to “ref_inj =
atm_dut.injector” removes the unit instance rule violation. See field: unit-type on page 5-13 of the e
Language Reference.
Example 3
Each unit instance must have a unique place in the unit tree hierarchy. In other words, each unit instance
must have only one parent, either sys or a unit that you have defined. In earlier releases, Specman Elite
did not detect code that violated this rule. Thus the following example parses and runs without error,
although it constrains two unit instances to be the same, in effect allowing a single unit instance to have
two parents.
extend sys {
atm_dut: atm_dut is instance;
ref_inj: atm_injector is instance;
};
unit atm_dut {
injector :atm_injector is instance;
};
unit atm_injector {
injector_id: uint;
To avoid this violation, you must modify your code so that each unit instance has a single parent unit.
Note It is legal to create references to unit instances at other places in the unit hierarchy. For example,
if you change “ref_inj: atm_injector is instance;” to “ref_inj: atm_injector;”, ref_inj becomes a legal
reference to atm_dut.injector and the unit instance rule violation is removed. See field: unit-type on
page 5-13 of the e Language Reference.
Associated Notification ID
DEPR_WAVE_REGISTER_STRUCTS
See Also
• configure memory on page 6-26 of the Specman Command Reference
This behavior is inconsistent with the semantic rules for when and like inheritance, which do not let you
create when subtypes of structs with like children. For example, explicitly defining the when subtype
“big dog” results in a compile-time error:
extend dog {
when big dog {
barks: bool;
};
};
With this release, references to a when subtype of a struct that has like children are deprecated. To avoid
this violation, you must modify your code to remove these references. For example, to fix the variable
declaration in the example above, try:
var x: dog = new dog with {.size=big} ;
Associated Notification ID
DEPR_WHEN_AFTER_LIKE
1. Identify a set of e source files that loads into an earlier version of Specman Elite without error.
If there is no parse error, skip to Step 6. If there is a parse error, continue with Step 3.
The compatibility warning mode treats all errors related to language compatibility issues as
warnings, so you can see the type and source file location of all the compatibility issues related to
coding style. See “Language Bugs or Undocumented Behavior” on page 8-39 for the types of errors
that are treated as warnings in compatibility warning mode.
The compatibility warning mode does not identify potential differences in run-time behavior.
4. After reading the documentation on each type of warning, upgrade your code wherever possible.
5. After setting the backward compatibility flags for any code you did not upgrade, reload your code.
While running the test or reviewing the test results, you may identify differences in run-time
behavior compared to earlier releases or you may decide that for this particular test, you prefer a
certain aspect of the behavior of the older version of Specman Elite.
Figure 8-1 Flow Chart: Managing Compatibility Issues When Upgrading from
Version 3.3 or Earlier
Load e files
no
Parse error?
yes
Set compatibility
warning mode and
reload code
Identify problematic
code
no
Fix code? Set compatibility flag
yes
Reload code
Run test
no
Compatibility issues? Run another test
yes
The following sections provide more detailed information on some of the steps of this process.
For a description of the 3.3 backward compatibility issues, see “Version 3.3 Backward Compatibility
Issues” on page 8-39.
When you load your code in this mode, Specman Elite reports the source reference and line for all
occurrences of the language-related compatibility issues.
For more detailed descriptions of these issues, see “Language Bugs or Undocumented Behavior” on page
8-39.
To identify compatibility issues with the compatibility warning mode use the following command:
Specman Elite prints out a list of warnings for all language-related errors in your code. From this
list, you can know how many load-time problems exist and which enhancements are affecting the
load.
Notes
• If you have turned on a language-related compatibility flag, you do not see warnings related to that
issue. For example, if you set “conf back33 -old_method_extension=TRUE”, you do not see warnings
related to method extension.
• Each of the warning messages contains the name of the message, for example,
“WARN_AMBIGUOUS_METHOD”. In Specview, each message name is a hyperlink to the section
of this document that details the relevant enhancement. In text-only mode, you can use the message
name to search the online docs for more information on that warning.
• You cannot run a test in compatibility warning mode. To run tests, you must first exit Specman Elite
and then re-invoke it in normal mode.
For example:
conf back33 -old_struct_member_under_when=TRUE
In this category, there are several Boolean flags that let you revert aspects of Specman Elite behavior to
the 3.3 behavior, as described in “Back33 Configuration Options” on page 8-36.
• From the Specman Elite installation script (see “Setting Backward Compatibility from the Specman
Elite Installation Script” on page 8-36)
• From the UNIX command line, using the -precommands command-line argument to specview,
specman, or specrun or the SPECMAN_PRE_COMMANDS environment variable
• From the vrst-tool> prompt
• From any .ecom file
• From the backward compatibility tabs of the Specman Elite Configuration Options window in
Specview (see “Setting Backward Compatibility from Specview” on page 8-36)
In addition to setting specific back33 flags, you can use the set backward compatibility command to
set or unset ALL back33 flags as follows:
Note The back33 flags must be set before any e code is loaded. You cannot set the flags in a method
extension.
Examples
To set full backward compatibility mode for one session:
specman -p "set back compat 33"
To set backward compatibility for only one feature over only one session:
specman -p "config back33 -cover_mode=TRUE"
To set backward compatibility for only one feature over multiple sessions:
setenv SPECMAN_PRE_COMMANDS "config back33 -cover_mode=TRUE"
To set backward compatibility from an .ecom file that can be used for Specman Elite 3.3 and 4.0:
#ifdef SPECMAN_VERSION_4_0_OR_LATER { specman("set back compat 33 on") }
1. Click the Config button to open the Specman Elite Configuration Options window.
2. On the Back33 tab of the Specman Elite Configuration Options window, select the check box(es) for
the back33 option(s) you want to enable.
Language General
old_struct_ Use old behavior of Struct members under when will not be entirely
member_under_ struct members under distinct. (See “old_struct_member_under_when” on
when when page 8-39.)
old_method_ Use old method Old method extension rules will be used. (See
extension extension rules “old_method_extension” on page 8-43.)
tick_notation Allow ticks in field Old style of notation for access to fields under when
access notation will be used. (See “tick_notation” on page 8-47.)
list_assign Allow assignment Assignment between simple and keyed lists will be
between simple list allowed. (See “list_assign” on page 8-50.)
and keyed list
Original default setting is FALSE.
Memory Management
disable_otf_gc Disable on-the-fly On-the-fly garbage collection will not occur. (See
GC “disable_otf_gc” on page 8-56.)
Coverage
cover_mode Use old coverage The default coverage mode will be always off. (See
mode behavior “cover_mode” on page 8-58.)
disable_cover_ Disable automatic Specman Elite will not collect event statistics. (See
events coverage of events “disable_cover_events” on page 8-59.)
disable_illegal_ Disable automatic Specman Elite will not check the expression assigned
ignore_check check of the scope of to an illegal or ignore cover item option for invalid
an expression items. (See “disable_illegal_ignore_check” on page
assigned to an illegal 8-52.)
or ignore cover item
option Original default setting is FALSE.
Data Browser
tree_window Show old tree When the tree command is issued, the old tree
window window is displayed instead of the Data Browser.
(See “tree_window” on page 8-60.)
Modules Window
old_modules_ Show old modules When you click the Modules button on the Specview
window window (modules window, the old modules window is displayed
window used prior to instead of the new modules window.
version 4.2)
Original default setting is FALSE.
Commands
no_gen_in_write_ Do not generate The write stubs command will not cause generation
stub during ‘write stubs’ when there are no units except sys. (See
in single-unit mode “no_gen_in_write_stub” on page 8-61.)
Generation
use_trace_gen_33 Use old generation Instead of the Generation Browser, trace gen will be
debugger used. (See “use_trace_gen_33” on page 8-62.)
Temporals
no_reorder Use 3.3 TCM The order of evaluation of temporal expressions will
scheduling scheme simulate the order used by Specman Elite 3.3. (See
“Use of the back33 no_reorder Option” on page 8-23.)
In general, we recommend that you upgrade your e code to remove or rewrite the code that contains
language bugs or that relies on undocumented Specman Elite behavior. However, we recognize that in
some cases, you may not have the time or resources to upgrade your e code. For that reason, we provide
backward compatibility flags in Specman Elite that revert the relevant aspects of new behavior to the old
behavior.
The following sections describe the compatibility issues related to language bugs or undocumented
behavior, listed by the back33 flag you can use to disable these enhancements:
old_struct_member_under_when 4.0 and later releases provide stricter type checking for
on page 8-39 struct members in when subtypes.
old_method_extension on page 4.0 and later releases implement simplified method
8-43 extension rules.
tick_notation on page 8-47 4.0 and later releases provide stricter type checking for field
access expressions. An undocumented use of ticks in field
access expressions is no longer allowed.
list_assign on page 8-50 4.0 and later releases do not allow either explicit or implicit
assignments between keyed lists and regular lists.
disable_illegal_ignore_check on 4.0 and later releases provide stricter scope checking for the
page 8-52 illegal/ignore coverage item option.
8.3.1.1 old_struct_member_under_when
Syntax
conf[ig[ure]] back33 -old_struct_member_under_when=[TRUE | FALSE]
Bug Fix
As of 4.0, Specman Elite provides stricter type checking for struct members in when subtypes.
Previously, a method first defined in a when subtype could be called or extended in the base type or any
other subtype without defining it. Similarly, an on struct member could be defined using an event from
a different subtype.
Example 1
In the following code, the method foo() is defined in two different when subtypes. The call to rb_A.foo()
prints either “I am red” or “I am big”, depending on the order in which the when extensions are loaded.
<'
struct A{
color;
size;
when red'color A{
foo() is {out("I am red")};
f: bool;
};
when big'size A{
foo() is {out("I am big");};
f: int;
};
};
extend sys{
rb_A : red big A;
run() is also{
rb_A.foo(); -- this generates an error in 4.0
};
};
'>
In 4.0 or later, the call to foo() generates an error. To fix this error, you have to explicitly cast rb_A as a
big’size A or as a red’color A in order to call foo(). For example, the following call prints “I am big”:
rb_A.as_a(big A).foo();
Example 2
In the following code, a method is defined in one when subtype and called from a different when
subtype. In earlier releases, this parsed and ran without error. (No output was displayed.)
<'
struct A{
size;
when big'size A{
foo() is {out("I am big")};
};
};
extend sys{
a : small A;
run() is also{
a.foo(); -- this generates an error in 4.0
};
};
'>
In 4.0 or later, the call to a.foo() generates an error. To fix this error, you have to explicitly cast ‘a’ as a
big’size A or check whether it is a big’size A. For example, the following code checks whether ‘a’ is a
big’size A:
if(a is a big'size A (ba)){
ba.foo();
};
Related Enhancement
As of the 4.0 release, Specman Elite supports the use of different method signatures in different when
subtypes.
Methods with the same name can have different parameter lists and different types of return values.
For examples of how to define different method signatures in different when subtypes, see “Extending
Methods in When Subtypes” on page 4-26 in the e Language Reference.
• A load-time or compile-time error is produced when calling or extending a method or a TCM that
was not defined for a type or a subtype but was defined in another when subtype.
• A load-time or compile-time error is produced for an on struct member with an event defined in
another when subtype.
*** Error: Method name 'foo' is not unique. The methods 'red'color
A.foo' and 'big'size A.foo' may exist simultaneously in the same subtype.
If this error did not arise in Specman Elite 3.x, you can also resolve this
error by using 'set_config(back33,old_struct_member_under_when,TRUE)'.
Note that using backward compatibility flags sacrifices some of the
enhanced functionality of the current Specman Elite version.
at line 26 in old_struct_member1.e
rb_A.foo();
For more information, search help for 'ERR_AMBIGUOUS_METHOD'
*** Warning: The method foo was defined in red'color A and big'size A but
was not defined in the parent. In Specman Elite v. 3.x this was
considered legal and created an implicit empty method in the parent, in
current Specman Elite version these are considered to be two different
methods, and no empty method is automaticly created in the parent.
If you want the Specman Elite version 3.x behavior
set_config(back33,old_method_extension,TRUE) and
set_config(back33,old_struct_member_under_when,TRUE).
at line 16 in old_struct_member1.e
foo() is {out("I am big");};
For more information, search help for 'WARN_METHOD_EXTENSION'
• For methods, introduce them in the base type. For example, if you received an error when extending
a method, add “method() is empty” to the base type. If you received an error when calling a method,
either move the method declaration to the base type or move the calling to the subtype.
• For on struct members, surround the on event with “when subtype basetype { … }”.
8.3.1.2 old_method_extension
Syntax
conf[ig[ure]] back33 -old_method_extension=[TRUE | FALSE]
Bug Fix
As of the 4.0 release, Specman Elite implements simplified method extension rules. The previous de
facto behavior of method extensions had many rules, and those rules had many exceptions. The new
rules are much simpler.
For a complete description of the new rules for extending methods, see “Rules for Defining and
Extending Methods” on page 7-2 in e Language Reference.
Example
The following code defines a method in a subtype and then redefines it in the base type. This parses and
runs without error in earlier releases of Specman Elite. The definition of foo() in extension to the base
type effectively overwrites the definition of foo() in the red subtype and the call to a.foo() prints “I am
A”.
<'
when red'color A{
foo() is {out("I am red");};
};
};
extend sys {
a: red A;
run() is also {
a.foo();
};
};
'>
<'
extend A {
foo() is {out("I am A");}; -- generates an error in 4.0
};
'>
The example code above generates an error in 4.0 or later. In order to run the code without modification,
you must set both -old_struct_member_under_when=TRUE and -old_method_extension=TRUE.
If the intention is for a.foo() to print both “I am A” and “I am red”, then foo() should be introduced in the
base type and extended with is also in the subtype:
<'
when red'color A{
foo() is also {out("I am red");};
};
};
extend sys {
a: red A;
run() is also {
a.foo();
};
};
'>
Related Enhancement
The new rules now enable the use of is only C routine. They also enable is only after is undefined.
In most cases, in order to run the code without modification, you must set both
-old_struct_member_under_when=TRUE and -old_method_extension=TRUE.
*** Error: The method 'A.foo' was defined previously (at line 4 in
old_method_extension1.e ) - must use 'is also', 'is first' or 'is only'.
If this error did not arise in Specman Elite 3.x, you can also resolve this
error by using 'set_config(back33,old_method_extension,TRUE)'.
*** Error: The method 'A.foo' was not defined previously - cannot use 'is
also', 'is first' or 'is only'.
If this error did not arise in Specman Elite 3.x, you can also resolve this
error by using 'set_config(back33,old_struct_member_under_when,TRUE)'.
Note that using backward compatibility flags sacrifices some of the
enhanced functionality of the current Specman Elite version.
at line 4 in old_method_extension2.e
foo() is also{};
For more information, search help for 'ERR_UNDEFINED_METHOD1'
*** Error: Cannot add a method 'foo()' for struct 'A' (It was previously
defined for a derived struct 'red'color A').
If this error did not arise in Specman Elite 3.x, you can also resolve this
error by using 'set_config(back33,old_struct_member_under_when,TRUE)'.
Note that using backward compatibility flags sacrifices some of the
enhanced functionality of the current Specman Elite version.
at line 14 in old_method_extension.e
foo() is {out("I am A");};
For more information, search help for 'ERR_ADD_METHOD'
With compatibility warning mode turned on, you may see these messages:
*** Warning: The method foo was defined in red'color A and A but was not
defined in the parent. In Specman Elite v. 3.x this was considered legal
and created an implicit empty method in the parent, in current Specman Elite
version these are considered to be two different methods, and no empty
method is automaticly created in the parent.
*** Warning: Method name 'foo' is not unique. The methods 'red'color A.foo'
and 'A.foo' may exist simultaneously in the same subtype.
If this error did not arise in Specman Elite 3.x, you can also resolve this
error by using 'set_config(back33,old_struct_member_under_when,TRUE)'.
1. Replace method extension using “method() is empty” with “method() is only { ... }”.
2. Replace use of duplicate “method() is { ... }” with “method() is only { ... }”.
8.3.1.3 tick_notation
Syntax
conf[ig[ure]] back33 -tick_notation=[TRUE | FALSE]
Field access using tick notation is an undocumented way to gain unrestricted access to fields of every
when subtype from the base type or anywhere else. For example, in the following code, the some_int
field of the red’color A subtype is set to 5 from a method in the base type using tick notation.
<'
foo() is {
me.red'color'some_int = 5;
};
};
'>
Even though tick notation for field notation works, we strongly discourage this style. Currently Specman
Elite does store inactive parts of when subtypes. However, Specman Elite treats inactive parts of objects
differently from active parts. For example:
• Specman Elite does not call the extension of the init() method of an inactive part of an object.
• Specman Elite does not enforce constraints on an inactive part of an object.
• Specman Elite does not enforce the size attribute of a list that has been defined in an inactive part of
an object.
For example, in the following code, a variable “gca” is declared of type “green A”. The struct members
of the red’color subtype are inactive in “gca”, but accessible using tick notation. The two checks return
an error (because the constraints are not enforced) and the assignment to “some_int” is accepted without
error. If the checks were not in place, a user might assume that “gca” has an active field “some_int” and
that the constraints were applied.
<'
extend sys {
run() is also {
var gca: green A;
gen gca; // create a green A
// an un-enforced constraint
check that gca.red'color'some_int == 3;
'>
Tick notation allows access to inactive parts of objects as if they were active. This can result in incorrect
results. Disallowing tick notation for field access prevents mistakes. It also lets Verisity make memory
efficiency improvements in future releases.
• In some cases the issue can be avoided by modifying the struct definition to use the correct when
subtype. For example:
var pkt: ATM packet;
// ...
print pkt.atm_hdr
• If the struct is known to be of the desired subtype, you might use .as_a(). For example:
print pkt.as_a(ATM packet).atm_hdr;
Note If pkt is not an ATM packet then pkt.as_a(ATM packet) returns a null struct.
8.3.1.4 list_assign
Syntax
conf[ig[ure]] back33 -list_assign=[TRUE | FALSE]
Bug Fix
Previously, after assigning a keyed list to a list, the key mapping for the keyed list did not update if there
was a change to the list (add, pop, push, delete, etc.). As a result, queries to the keyed list (key,
key_index, and key_exists pseudo-methods) might result in incorrect responses.
Previously, assigning a list to a keyed list might also result in incorrect responses to queries to the keyed
list.
Specman Elite 4.0 and later does not allow either explicit or implicit assignment of a keyed list to a list
or vice versa. The stronger type checking in Specman Elite 4.0 disallows the assignments that previously
led to incorrect responses.
Example
The following code parses without error in earlier releases of Specman Elite. However, the “check that
lk.key_exists(456)” generates a DUT error at runtime. In 4.0 and later, the “l = lk” assignment generates
a load-time or compile-time error.
<'
extend sys {
run() is also{
var lk : list (key: it) of int;
var l : list of int;
l = lk; // error in 4.0; assign between 'simple' list and keyed list
'>
If -list_assign=FALSE and the compatibility warning mode is on, a load-time or compile-time warning
is produced for each assignment.
• Use the as_a() pseudo-method to explicitly convert a list to a list with key and vice versa. For example:
var lk : list (key: it) of int;
var l : list of int;
l = lk.as_a(list of int);
Note The use of as_a() to convert a keyed list to a list or vice versa builds a new list and could impact
memory and CPU consumption.
Alternative Solution:
• If using the as_a() pseudo-method causes such a problem, change the type of the target list to match
the type of the source list.
8.3.1.5 disable_illegal_ignore_check
Syntax
conf[ig[ure]] back33 -disable_illegal_ignore_check=[TRUE | FALSE]
Bug Fix
The 4.0 and later releases provides stricter scope checking for the illegal and ignore coverage item
options.
In earlier releases, Specman Elite assumed that the expression in the illegal/ignore option referred only
to the item that uses the option and did not detect invalid items used in the expression. Specman Elite
accepted invalid items but did not sample them. Instead, it assigned arbitrary values to them while
evaluating the expression. This resulted in false coverage results without any warning.
The stricter scope checking in Specman Elite 4.0 enforces correct illegal/ignore definitions. This, in
turn, ensures correct coverage results.
Example
In earlier releases, the following code parses and runs without errors. While evaluating the illegal
expression for b2, Specman Elite would assign the value FALSE to b1 regardless of what its real value
was when b2 was sampled.
<'
extend sys {
!b1: bool;
!b2: uint(bits:4);
event info;
cover info is {
item b1;
item b2 using
illegal=(b2!=2) and (b1==TRUE); -- generates an error in 4.0
};
};
'>
To fix this example and ensure correct coverage results, you need to remove “b1” from the illegal item
option, for example:
item b2 using illegal=(b2!=2);
Note Due to some limitations in compilation, this check is applied only in interpreted mode and not in
compiled mode. This limitation will be removed in the next major release of Specman Elite.
For additional information about the correct use of the illegal/ignore coverage options, see the FAQ
“Correct use of cover option ‘when’ vs. ‘ignore/illegal’” in the Verification Vault
(https://www.VerificationVault.com).
The following section describes the compatibility issues related to usability enhancements, listed by the
back33 flag you can use to disable these enhancements:
disable_otf_gc on page 8-56 Specman Elite can now perform on-the-fly garbage
collection that applies during load, compilation, generation,
and within a Specman Elite tick.
There are two compatibility issues related to the new temporal engine that do not have back33 flags:
Related Enhancement
Due to the nature of static analysis performed by the new temporal engine, there might be some
extremely rare and complex temporal expressions that cannot be translated by the new engine.
For more information on the kinds of complex expressions that may cause a problem, see “Translation of
Temporal Expressions” on page 13-10 in the e Language Reference.
*** Error: May not use a bounded repeat in the match part of a
first_match
at line 15 in complex_TE2.e
event b is {[..i]; [j] *@a};
at line 15 in complex_TE3.e
event d is {[..n]*{@a or {@b;@b}};@c};
If you have difficulty decomposing the complex temporal expression that is causing the error, contact
Verisity support for help.
Related Enhancement
The new temporal engine, which provides performance enhancements, restricts the use of the
consume() temporal expression for direct synchronization of TCMs:
• The consume(@event-name) temporal expression can only be used with the time-consuming actions
sync and wait. No other temporal operator can be used with it. Thus, only the following use is allowed:
sync consume(@event-name) [@sampling-event];
wait consume(@event-name) [@sampling-event];
For example, consume(cycle@event-name) is no longer allowed.
• An event can either be used by consume(@event-name) or in other temporal expressions, but not in
both.
foo()@b is {
wait consume(@a);
};
};
'>
For information on known limitations with temporals in Specman Elite 4.0, see “Temporal Evaluator” on
page 9-13.
8.3.2.3 disable_otf_gc
Syntax
conf[ig[ure]] back33 -disable_otf_gc=[TRUE | FALSE]
Related Enhancement
Specman Elite 4.0 supports a new memory manager.
Specman Elite can now perform on-the-fly garbage collection that applies during load, compilation,
generation, and within a Specman Elite tick. As a result, in some cases, tasks that previously caused a
memory overflow can now complete. The new on-the-fly garbage collection complements the
traditional garbage collection.
The flaw could occur if the external C code keeps a reference to a Specman Elite object that is no longer
referenced from within Specman Elite. The new on-the-fly garbage collector reclaims this memory for
future allocations, and the stored reference becomes invalid. When the C code uses that invalid stored
reference to access the Specman Elite object, a segmentation violation might occur. Here is an example
of C code that stores a reference to an e object:
#include "generated_specman.h"
/*
* This method is called from Specman with an e object pointer (pckt).
*/
void my_c_method_stores_ref(SN_TYPE(packet) pckt) {
/*
* stores a reference to an e object. The stored reference might be used
* after garbage collection occurs. Using it will lead to errors.
*/
static_stored_ref = pckt;
}
As the on-the-fly garbage collection can now be performed irrespective of Specman Elite tick
boundaries, previously undetected flaws might be exposed.
Error Messages
Unlike regular garbage collection, no messages are printed when on-the-fly garbage collection is
executed. The problem with stored references, for example, shows up as a segmentation fault in the C
code.
1. Add fields to sys (or deeper) for storing the references to Specman Elite objects.
The following sections describe the compatibility issues related to usability enhancements, listed by the
back33 flag you can use to disable these enhancements:
cover_mode on page 8-58 Some coverage mode names have changed and the default
coverage mode behavior has also changed.
disable_cover_events on page 8-59 4.0 supports automatic coverage of events.
tree_window on page 8-60 4.0 has a new Data Browser.
no_gen_in_write_stub on page 8-61 The write stubs command now causes generation, in
order to support computed names and non-static
expressions in HDL declarations.
use_trace_gen_33 on page 8-62 In 4.0, generation data is displayed in a graphical browser.
8.3.3.1 cover_mode
Syntax
conf[ig[ure]] back33 -cover_mode=[TRUE | FALSE]
Related Enhancement
For greater clarity and convenience, some coverage mode names have changed and the default coverage
mode behavior has also changed.
In Specman Elite 3.3, users sometimes forgot to update the coverage mode after defining coverage
group. As a result, they received no coverage information. Specman Elite 4.0 automates this simple but
essential task so that the default coverage mode always corresponds with most users’ preferences.
If you have user-defined coverage definitions in your code and you do not specify the coverage mode
explicitly, then coverage is now collected automatically. An ecov file is created at the end of the run.
8.3.3.2 disable_cover_events
Syntax
conf[ig[ure]] back33 -disable_cover_events=[TRUE | FALSE]
Related Enhancement
Specman Elite 4.0 supports automatic coverage of events.
In Specman Elite 3.3, there was no easy way to collect coverage information on the events in your
environment. This 4.0 feature lets you collect coverage information about all events defined in your
environment automatically. The collected information tells if an event ever happened, and, if so, how
many times it happened.
Any event in your environment is added automatically to the session.events group as a coverage item.
You can apply any coverage command (covers.set_cover(), covers.set_weight(), and so on) to the new
session.events coverage group.
The session.events coverage group is gradeable (unlike the other predefined coverage groups,
session.start_of_test and session.end_of_test). Therefore, the overall coverage grade for tests might
change.
The effect of setting this compatibility flag to TRUE differs depending on when you set the flag:
Before loading the environment Prevents Specman Elite from collecting event data
and defining events as items
After loading the environment Causes Specman Elite to ignore the session.events
group when grading
8.3.3.3 tree_window
Syntax
conf[ig[ure]] back33 -tree_window=[TRUE | FALSE]
Related Enhancement
Specman Elite 4.0 has a new Data Browser.
The new Data Browser provides more detailed information on values of fields, events, and methods of
expressions. It also provides a friendly way to navigate the data hierarchy. You can open the Data
Browser using the old tree command or the new show data command.
While the Data Browser has many advantages, it also has some known limitations that did not exist
when using the old tree command. If any of the following known limitations are essential to you, you
can set the tree_window back33 compatibility flag to On.
Print Config Options: The Data Browser ignores these two print config options.
• list_index_radix
• list_from
Print Config Option Once the Data Browser has been opened, it ignores changes to
this print config option.
• raw_print option
do_print() Extensions The Data Browser ignores all do_print() user extensions.
Displayed Methods The command show data <method> causes the method to be
executed at every Specman prompt.
Note This compatibility flag is relevant only in GUI mode (Specview). While working in ASCII mode,
the tree command behaves the same whether the back33 compatibility flag is on or off.
8.3.3.4 no_gen_in_write_stub
Syntax
conf[ig[ure]] back33 -no_gen_in_write_stub=[TRUE | FALSE]
Related Enhancement
Specman Elite 4.0 supports computed names and non-static expressions in HDL declarations.
Previously, the write stubs command might not cause generation. To support computed names and
non-static expressions in HDL declarations, the write stubs command now causes generation by
default.
The drawback to the new default where the write stubs command always causes generation is the time
taken by generation. If your code does not contain any computed names or non-static expressions in
HDL statements or unit members, this new default behavior has no benefit.
Note If you turn the flag on and an HDL declaration includes a computed expression, you get a
load-time error like the following:
*** Error: Incorrect verilog variable declaration. Wrong specifier for
verilog variable declaration... "
8.3.3.5 use_trace_gen_33
Syntax
conf[ig[ure]] back33 -use_trace_gen_33=[TRUE | FALSE]
Related Enhancement
With Specman Elite 4.0, generation data is displayed in a graphical browser for more friendly navigation
and more powerful debugging. This replaces the old trace gen mechanism. The old mechanism had an
ASCII-based report format.
For descriptions of the 3.3 generation analysis commands, including trace gen, show gen, and config
gen, see the 4.0.5 Specman Elite documentation, available on the Verification Vault.
*** Error: 'show gen' for Generation Debugger can have only '-ascii' as
modifier.
To use 'trace gen' use 'config back33 -use_trace_gen_33 = TRUE'
For more information, search help for 'SHOW_GEN_VIS_ILLEGAL_SHOW_GEN'
If you issue a show gen command with parameters in your code, these parameters are no longer
supported and must be removed.
Enabling the use_trace_gen_33 compatibility flag lets you continue as before. If the text output of the
old trace gen command is required as a reference or the trace gen command itself is part of your
verification environment, then you must enable the use_trace_gen_33 flag.
Note None of these compatibility issues is identified with the compatibility warning mode. None can
be set from any installation script.
old_error_handling Use 3.2 error The 3.2 error handling scheme will be used.
handling scheme
enable_verilog_ Enable verilog trace False verilog trace will be translated into wave event
trace commands.
bit_slicing_is_uni_ Bit slicing constraint Constraining bit slicing will impose order from right
directional imposes order from to left only.
right to left
add_slashes_in_ Add slashes in set Slashes will be added around the match string for set
set_check check check.
use_quotes_in_ Allow double quotes Double quotes will be allowed around file names in
import_statements in import statements import statements.
struct_eq_is_uni_ Struct equality Constraining struct equality will impose order from
directional constraint imposes right to left only.
order from right to
left
index_is_uni_ Index constraint Constraining indexes will impose order from right to
directional imposes order from left only.
right to left
in_list_is_uni_ Item-in-list constraint Constraining items in lists will impose order from
directional imposes order from right to left only.
right to left
Verification Vault ›› Knowledge Base ›› Product Documentation » Deprecated and Outdated Features
The “Deprecated and Outdated Features” section on the Verification Vault contains the following:
• deprecation_history.pdf, which contains a table showing the deprecation history for deprecation
notification IDs
• PDF documentation for outdated or fully deprecated features
Table 8-3 provides you with the names of the PDF documentation files.
Note At this time, no fully deprecated features require documentation. Thus, the PDF files listed in
Table 8-3 document outdated features only.
qvl_sn_pic_.o — 4.0.5_compiling_and_linking.pdf
qvh_sn_pic_.o
Defect: 2932
Description
When a macro (for example, “define five 5;”) is defined inside another macro, the inner macro is not
recognized by the compiler.
Workaround
Currently, none.
Defect: NA
Description
After extending a TCM in a like child, that TCM cannot be extended in the parent.
Workaround
Avoid extending TCMs in children until all TCMs in the parent are extended.
Defect: NA
Description
When a deeply nested struct structure is defined, save and restore may crash. Typically, this happens
when linked lists are used instead of built-in lists.
Workaround
Prefer built-in lists to linked lists. If necessary, use the indexes as pointers.
Defect: 839
Description
If there are multiple colons in square braces, then the parser may report an error. For example:
print t[TRUE? 1:0:2]
Workaround
Use parentheses to make operator binding explicit. In the example:
print t[(TRUE? 1:0):2]
Defect: 745
Description
When an is first method extension changes the result value, extensions appearing earlier in the code do
not get the new value result.
Workaround
Currently, none.
Defect: 3706
Description
When compiling a very long method, GCC may crash and terminate the compilation.
Workaround
Most crashes are caused by the GCC optimizer. Remove the optimization flag from your .specman file
and recompile your environment. If that does not solve the problem, split your method into several
methods using is also.
Defect: 533
Description
The collect -reload command does not work. Attempting to use this command results in an error
message.
Workaround
Currently, none.
Defect: 8456
Description
The deep_compare_physical() predefined routine flags two structs as non-identical if the when
determinant fields for the two structs differ, even if their physical fields are identical. Using the struct
member attribute to ignore the when determinant field during a physical deep compare does not affect
the incorrect output of the deep_compare_physical() routine.
Workarounds
1. Convert the two structs to the exact same subtype before calling deep_compare_physical().
struct foo {
kind : kind_t;
%pf1 : uint;
%pf2 : byte;
%pf3 : bit;
extend sys {
goodfoo : good foo;
badfoo : bad foo;
post_generate() is also {
var diff : list of string;
diff = deep_compare_physical (goodfoo, badfoo ,10);
//solution 2
check that (diff.is_empty() or (diff.size()==2 and diff.has(it ~
"...foo...")));
//solution 1
var badfoocasted : good foo = new;
var lob : list of bit = pack(NULL, badfoo);
unpack (NULL, lob, badfoocasted);
diff = deep_compare_physical (goodfoo, badfoocasted ,10);
print diff;
}; // post_generate()...
}; // extend sys
'>
Defect: 0758
Description
Coverage does not work for scalar item types (int, uint) with a length larger than 32 bits.
Workaround
Use an enum type to define the meaningful value ranges of the covered type. Map procedurally the
values of the long scalar type field into the enum type item.
Defect: 2601
Description
If you use like inheritance, you cannot define or extend a coverage group for an event declared in the
parent struct.
Workaround
Use when inheritance.
Defect: 2903
Description
Parameters passed by reference to a TCM are not supported in constraints.
Example:
m(i : *int) : int @clk is {
gen result keeping { it == i };
};
Workaround
Use a new local variable in the TCM constraints together with the corresponding assignments to or from
the parameter.
Defect: 3161
Description
The generator cannot resolve constraints that use as_a() within a constraint path.
In some cases, the generator identifies a contradiction. In other cases, it identifies an unsatisfied
constraint and issues an error message.
Workaround
Define the constraint within the object definition itself for the right subtype. For example:
type packet_t: [SMALL, LARGE];
struct packet {
kind : packet_t;
In the first example, substitute a procedural assignment for the keep constraint.
Description
Some compound constraints on list items may lead to an undue contradiction. For example:
keep l[0] == 5 or l[0] == 6
Also, the combination of soft constraints and list-item constraints may also lead to undue contradiction.
For example:
keep l[0] == 45;
keep soft l == {1;2;3;4};
Finally, the combination of for each constraints and list-item constraints may also lead to undue
contradiction. For example:
keep soft l[0] == 1;
keep for each in l {
index == 0 => it == 0;
};
Workaround
In the first example, use keep for each in combination with the imply operator (=>).
In the second example, constrain the list size to ensure the existence of the constrained item:
keep l.size() >= 4;
In the third example, use for each in combination with the imply operator instead of the list constraint:
keep for each in l {
index == 0 => soft it == 1;
};
keep for each in l {
index == 0 => it == 0;
};
Defect: 3541
Description
You cannot use the list-in-list constraint to keep a list in more than one (other) list. This situation is
reported as a contradiction.
Example:
keep l in {1;2;2}; keep l in {2;2;3}; -- causes contradiction
Note that this situation can be caused indirectly using list equality constraints:
keep l1 in l2;
keep l3 in l4;
keep l1 == l3; -- contradiction since l1 is in both l2 and l4
Workaround
Compute procedurally the intersection of all containing lists and use one list-in-list constraint to keep the
targeted list in the intersection.
Defect: NA
Description
If the same field appears in all of the alternatives of an or constraint and if at least one of those
alternatives relate the field to non-literals, then the generator may not infer the implied constraints and
ranges for that field.
Example:
x == 1 or x in [20..220];
but
x == i or x == j
depends on the order of generation for i, j, and x. It might lead to a contradiction. For example, if i and j
are generated before x, then:
• If the value of i is NOT in the currently known range of values for x, then x == j is enforced.
• If the value of j is NOT in the currently known range of values for x, then x == i is enforced.
• If the values of i and j are both in the currently known range of values for x, then the generator does
NOT infer the resulting range for x, that is [i,j]). x is generated from its range, which will probably
lead to a contradiction.
Note that if i is generated before x, and x is generated before j, then if i happens to be != x, then x == j
(using generated value for x) is enforced when j is generated.
Workaround
There are several ways to work around this problem. You can define a Boolean field and use that field in
implication constraints to control the generation of x.
Note You must generate the Boolean field before generating x. For example:
struct packet {
x_is_i: bool;
i: uint;
j: uint;
x: uint;
extend sys {
plist: list of packet;
};
For generating on the fly, you can also use a Boolean variable, for example:
<'
struct packet {
i: uint;
j: uint;
x: uint;
};
extend sys {
run() is also {
var x_is_i: bool;
var p: packet;
gen x_is_i;
case x_is_i {
TRUE: {gen p keeping {.x == .i}};
FALSE: {gen p keeping {.x == .j}};
};
};
};
'>
Another solution is to put the or alternatives under different when subtypes, for example:
<'
struct packet {
x_is_i: bool;
i: uint;
j: uint;
x: uint;
extend sys {
plist: list of packet;
};
'>
These workarounds have the advantage of letting you control distribution between or alternatives.
Defect: 4350
Description
The generation of long integers can sometimes consume more memory then expected. This memory is
reclaimed only at the next garbage collection.
Workaround
When possible, use 32-bit integers rather than long integers.
Defect: NA
Description
delay() can only be used in:
wait delay(N)
sync delay(N)
event a is {@b; delay(N)}
Workaround
When possible, split the temporal expression into multiple temporal expressions.
Defect: 2619
Description
Expressions under not may be evaluated when the containing temporal expression is first evaluated,
even in the case of a sequence. For example, consider the sequence:
{@A; @B; not @C}
The evaluation of @C may happen as soon as @A is evaluated. While normally resulting in a correct
temporal evaluation, this may cause an error in cases where @C is not ready for evaluation (for
example, when it contains a NULL path).
Workaround
Make sure that expressions under not are accessible for evaluation from the onset of the temporal
expression.
Description
When the operators change, fall, rise or true are used to observe e expressions (in contrast with HDL
expressions) and when the watched expressions may change during the temporal evaluation phase (that
is, some event evaluation may change the expression value), the result might differ for optimized versus
non-optimized temporal expressions.
Note that optimization is done for such expressions that are not sub-expressions and have no exec blocks
attached.
Workaround
If at all possible, the situation in which values change during the temporal evaluation phase should be
avoided.
However, if desired, the optimization of a temporal expression can be avoided by adding an empty exec
block to that expression.
Description
When Specman Elite works with a simulator, it may be called back several times within the same
simulation time unit. Some reasons for this may be:
• A zero-delay task was called during the first tick, creating another tick upon return.
• One clock system transition caused the first tick; and, upon completion, another clock system
transition (in another delta-cycle of the simulator) caused the second tick.
(The term tick is used above for Specman Elite computation following a callback from a simulator.)
While multiple callbacks during the same simulation time unit are considered normal behavior, they
may cause premature success of negated events. All temporal expressions evaluated during the first tick
assume non-present events to have not happened, although some of them may actually be emitted during
later ticks.
This conceptual problem cannot be overcome automatically. The user must use the correct event to
sample such expressions so that they will be evaluated during the appropriate tick.
For example, in the following code the no_sig_up event happens in the same cycle as the sig_up event,
although it looks like a contradiction:
event clk is rise('top.clk') @sim;
event sig_up is rise('top.sig') @sim;
event no_sig_up is not (@sig_up) @clk;
Use the echo event full to see the presence of multiple ticks. For example:
--------------------------------------------------
-> 100 sys-@2.new_time
-> 100 sys-@2.tick_start <= First tick
-> 100 simulator-@4. top.clk <= Sampling event for no_sig_up
-> 100 sys-@2.any
The sig_up event only occurs at the second tick in the cycle while the clk sampling event occurs at the
first tick of the cycle.
Workaround
Sample each temporal expression with the event that is expected at the specific tick (for example, the
specific clock system transition). Do not use generic events (such as sys.any) when working in a
multi-clock environment.
Description
Definition of an on method before its event declaration results in a load time error message.
Workaround
Define the event before its on method. If necessary, a forward definition of the event can be used and
extended later (using is only).
Defect: 3646
Description
Structs that are declared as variables within methods and that have no path from sys pointing to them
will not have quit (event and method) done in them as a result of stop_run().
Moreover, if those structs are created before the run phase, the run() method will not run in them and no
expect or event will be done in them.
Workaround
Create a call to the struct’s quit() method when the struct is no longer needed. If some structs may be
still active when stop_run() is called, maintain a list of active structs, and keep the list in a struct
accessible from sys. In that way, the quit() of each struct is called when stop_run() is called.
Defect: NA
Description
You cannot use a VHDL variable in an @sim temporal expression.
Workaround
Use a VHDL signal instead.
Defect: 6914
Description
Compound temporal expressions that contain @sim sub expressions may be evaluated incorrectly. For
example:
Workaround
Split the compound TE into a few simpler ones. For example the compound temporal expression show
above can be split to:
event rise_seg1 is rise('sig1')@sim;
event rise_seg2 is rise('sig2')@sim;
event a is @rise_seg1 or @rise_seg2;
Defect: 302
Description
The try action is not implemented in TCMs. A corresponding error message is issued at the compilation
stage.
Workaround
Add explicit code for returning from a TCM in erroneous situations.
Defect: 984
Description
In some situations, the debugger is expected to stop just before exiting a TCM (for example, when it is
at the last line of the TCM and you issue a next or step command). This does not work when the current
TCM (A) calls another TCM (B) and (B) in its last action calls a third TCM (C). In that case, the
debugger can stop at the end of C but not at the end of B. This is because of an optimization made in
Specman Elite’s TCM interpreter that causes a return from C to skip over a return to B and go directly to
A.
Workaround
Currently, none.
Defect: 2652
Description
If two or more branches of all of or first of are activated within the same clock cycle, the order of
activation is unpredictable. This situation also applies for state machine transitions.
Workaround
If the order of activation is important for correct behavior, you should provide additional flags and
conditions to dictate the order.
Defect: 2927
Description
stop_run() does not stop when issued from on tick_start.
In the following example, the message “Last specman tick - stop_run() was called” is issued, but
simulation is not stopped. Eventually, the simulation may hang.
Example:
<'
extend sys {
!count: int;
on tick_start { count += 1; if count > 3 { stop_run(); }; };
};
'>
Workaround
Invoke stop_run() from any place other than on tick_start.
Defect: NA
Description
There is a chance that some names in older Specman Elite code, developed prior to introducing eRM,
will clash with the new types or syntax added by the eRM library. If this happens, you must change those
names in your code.
Workaround
You can use #define and #undef to allow old code to coexist with new code.
See Also
• #define on page 20-5 in the e Language Reference
• #undef on page 20-8 in the e Language Reference.
Defect: NA
Description
Some Specman Elite backward compatibility flags cannot be used in conjunction with eRM.
The following flags from the back33 group are incompatible with eRM and must not be set if you load
any eRM packages:
All back32 flags, which emulate Specman Elite 3.2 behavior, are incompatible with eRM and must not
used.
See Also
• “Setting Compatibility Flags” on page 8-35
Defect: NA
Description
While using the e source code debugger, you might step into encrypted code, like that in evc_util, which
cannot be seen. In such a case, the debugger code window shows a message like:
SOURCE FILE IS NOT AVAILABLE
( FILE IS ENCRYPTED )
Workaround
Use the debugger command Next instead of Step, unless you explicitly want to “step” into a
user-defined method. If you accidentally step into encrypted code, get out of it by clicking:
Defect: NA
Description
vt_util (once compiled or loaded into Specman Elite) does not let you do the following sequence of
commands:
Workaround
Execute restore before loading additional files.
Defect: NA
Description
Some complex constraints currently fail to handle in_sequence() and in_unit() properly and produce a
contradiction.
Workaround
It is recommended to use these constructs only in:
• Simple constraints
• Simple implications, such as:
keep in_sequence(red seq) => me.kind == red;"
Defect: NA
Description
The message() and messagef() actions can be nested. In other words, you can put a message action
within the action block of another message action. In that case, each message action is handled by its
respective logger, not necessarily the same logger. The order of execution is currently uncertain.
Workaround
If order of execution is critical, avoid using nested messages.
• “Verilog-XL Limitation: Failure After Forcing a Verilog Register from e” on page 9-26
• “NC Verilog Limitation: Wrong Sampling of Verilog Registers” on page 9-26
• “Force/Release Actions in e with NC VHDL 5.x Behave Inconsistently” on page 9-27
• “NC VHDL LImitation: No Update of Windows at Prompt” on page 9-27
• “NC VHDL LImitation: VHDL Drivers” on page 9-28
• “ModelSim and Specman Elite Exit Code for License Failures” on page 9-28
• “SpeedSim Limitation: Verilog Memories” on page 9-29
• “SpeedSim Limitation: Verilog Tasks and Functions” on page 9-29
• “SpeedSim Limitation: Forced Driving of Verilog Signals” on page 9-29
• “SpeedSim Limitation: Ungraceful Exit from Simulator” on page 9-30
• “SpeedSim Limitation: Specview Windows Not Updated” on page 9-30
• “Null Simulator Limitation: Sampling HDL-Style Variables” on page 9-30
• “Null Simulator Limitation: Unit Relative Paths and Full HDL Paths” on page 9-31
• “Null Simulator Limitation: X/Z Literals” on page 9-31
• “Null Simulator Limitation: Read/Write Race Conditions” on page 9-31
• “Time Literals Do Not Propagate into the Verilog Stub File” on page 9-32
• “Cannot Set Callback on Expanded Verilog Net” on page 9-33
• “Lists of Unit Instances” on page 9-33
• “Escaped Verilog Identifier Limitations” on page 9-33
• “Wrong Sampling in Mixed Verilog/VHDL Environment” on page 9-35
• “trace on special event” on page 9-36
• “Verisity Adapters Known Limitations” on page 9-37
• “ESI Limitations” on page 9-39
Defect: N/A
Description
ModelSim 5.7 introduces a limitation where a VHDL IN port associated at a higher level to Verilog
register or wire cannot be forced. ModelSim issues the following error:
Description
Sometimes an integration fails on HP-UX with one of the following error messages:
ncsim: *internal* (
sv_seghandler - SIGSEGV while handling SIGSEGV)
or
ncsim: *internal* (sv_bushandler - SIGBUS fault address not odd
Description
Specman Elite and NC SystemC do not support access to mixed SystemC/Verilog or SystemC/VHDL
designs if SystemC is the topmost module and an RTL component (Verilog or VHDL) is instantiated in
it.
Any attempt to issue a call sn command from the NC interactive prompt causes the following error
message:
ncsim> INTERNAL ERROR: VPI UNKTYPE
Unknown type: (243).
Description
Integrated Specman Elite and Verilog XL 5.X fail sometimes with the following error message:
**** Fatal error - leaving Specman:
Internal Specman error: unhandled OS signal 11 (segmentation violation).
Defect: NA
Description
When sampling Verilog registers at a clock edge, Specman observes new signal values, assigned on the
Verilog side by non-blocking assignments. This makes the sampling results inconsistent with all other
supported Verilog simulators. Also these values often contradict the user's expectations.
This problem does not exist with old NC Verilog versions. It appears only starting from Cadence release
LDV 2.2.
Workaround
Use NC Verilog LDV3.20s6 and later with the '-NBASYNC' command line option. You can use earlier
versions of NC Verilog back to LDV3.0s13, but you might encounter problems with the '-NBASYNC'
command line option in those earlier versions.
Description
Force/release actions in e with NCVHDL 5.X behave inconsistently, depending on how the test
command is issued.
The default behavior of the release action with the latest versions of the tools is that the last forced value
must be discarded and the VHDL signal must receive the current simulated value.
In contrast with the above, if you include the Specman Elite test command in the sequence of
pre-commands, some VHDL signals after release may retain the last forced value. This happens
regardless of the way you activate the pre-commands, either using specview -p or setting the UNIX
environment variable SPECMAN_PRE_COMMANDS.
Workaround
Move the test command to a command file, either the Specman Elite ecom file or the simulator
command file.
Defect: NA
Description
When simulation stops at the simulator prompt because of a breakpoint or because the simulation time
is elapsed, Specview does not update the last prompt shown in the main window and does not update its
thread debugger windows. This problem is caused by NC VHDL’s lack of callback capability.
Workaround
Switch manually to the Specman prompt.
Defect: NA
Description
The new unit member in the Specman Elite 3.3 VHDL driver is not supported by NC VHDL.
Workaround
Add a “shadow” VHDL signal for the driven one and add an auxiliary concurrent signal assignment:
driven_sig <= driven_sig_shadow;
Defect: NA
Description
When linked with simulators other than ModelSim, Specman Elite exits with a code -5 exit status (code
251 in unsigned format) if a Specman Elite license failure occurs.When linked with ModelSim,
Specman Elite does not influence the exit code when a Specman Elite license failure occurs.
Workaround
None at this time
Defect: NA
Description
There is no access to Verilog memories.
Workaround
Add auxiliary Verilog code to communicate between Specman and Verilog memories via single
registers.
Defect: NA
Description
Verilog tasks and functions are not supported. (Note that calls to tasks that advance simulation time are
not allowed by SpeedSim.)
Workaround
Add auxiliary Verilog code to initiate Verilog tasks following signals controlled by Specman.
Defect: NA
Description
Forced driving of Verilog signals is not supported.
Workaround
Use SpeedSim commands in ecom files.
Defect: NA
Description
There is an ungraceful exit from the simulator when Specman is exited.
Workaround
Exit from the simulator prompt.
Defect: NA
Description
Specview windows are not updated when SpeedSim is stopped at its prompt.
Workaround
Switch manually to the Specman prompt.
Defect: 4476
Description
Sampling of the same HDL-style variable returns different values when the same object is accessed
directly or through a computed name.
Workaround
Currently, none.
Defect: 4099
Description
Unit relative paths are not concatenated with full HDL paths of the unit instances
Workaround
Currently, none.
Defect: 3309
Description
X/Z literals cannot be correctly assigned.
Workaround
Currently, none.
Defect: NA
Description
Read/write race conditions may occur for HDL-style variables, because driven values become
immediately visible for sampling.
Workaround
Currently, none.
Defect: NA
Description
.There are two ways to create delayed assignments for Verilog signals:
However, the actual Verilog time scale of the DUT is unknown to Specman Elite when the stubs file is
created. Hence, Specman Elite cannot convert time literals into correct numeric values in the stub file.
Example:
<’
extend sys {
delay: string;
keep delay == append("#",10 ns);
verilog variable ’my_ver.my_wire’ using wire,drive=delay;
};
>
Although the code in this example is legal syntactically, it does not create a correct stubs file. An error
message is issued during the test phase, telling you that the checksum for the above verilog variable is
incorrect.
Workaround
None.
Defect: 2928
Description
Specman Elite does not support temporal expressions with @sim for expanded vector nets. The nets are
considered expanded if their slices are accessed anywhere in the DUT or in Specman Elite.
Workaround
First, evaluate whether the net in question must be sampled @sim. Unless it represents an asynchronous
signal, sampling @clk is better. If it is an asynchronous signal, add single-bit signals in Verilog, attach
them to the relevant net, and then modify the temporal expression in Specman Elite so that it uses those
additional signals instead of the original net.
Defect: 3328
Description
Lists of unit instances with unconstrained HDL paths cause an illegal Verilog stub file (specman.v file)
to be produced.
Workaround
Add empty HDL path strings to constrain every unit instance.
Defect: NA
Description
There are limitations on the special characters that can appear in escaped Verilog identifiers:
• Escaped Verilog identifiers in single quotes cannot contain any of the following characters:
! " ' , ; ` { }
For example, the following is not supported:
’top.\!sig ’
• Escaped Verilog identifiers in single quotes cannot contain the character pairs -- and // (which indicate
the beginning of an e comment).
• Escaped Verilog identifiers in single quotes can contain parentheses () and brackets[], as long as they
are balanced and the single quotes do not enclose an (unescaped) computed part of the name.
For example, the following signal access causes a syntax error.
unit top {
path : string;
x() is {
-- ’path’ is a computed name while
-- ’sig(0:8)’ is a literal identifier
’~/(path).\sig(0:8) ’ = 1; -- not supported.
-- The sig(0:8)is okay,
-- but the (path) is not okay
};
};
• In regular HDL access, escaped Verilog identifiers enclosed in double quotation marks cannot contain
the following two characters:
" `
• When the HDL object is defined as a port, only one character is not allowed in Verilog escaped
identifiers enclosed in double quotation marks:
`
Note The characters " (if supported) and \ require an additional \ preceding each appearance of
them when they appear in escaped Verilog identifiers within double quotes.
Workaround
if you are able to reference a given escaped Verilog identifier in double quotes, rather than in single
quotes, the limitations are fewer.
x() is {
-- ’path’ is a computed name while
-- ’sig(0:8)’ is a literal identifier
’~/(path).\sig(0:8) ’ = 1; -- not supported.
};
};
x() is {
’~/(path)/(sig)’ = 1;
};
};
'>
Defect: NA
Description
Specman samples wrong Verilog signal values when all the signal assignments are done within an
instantiated VHDL component.
For example:
+-----------------------------+
| Verilog |
| +------------------+ |
| | | |
| | VHDL | |
| input | | |
| ------>| ... | |
| output | | |
| <------| output <= input | |
| | | |
| +------------------+ |
+-----------------------------+
In the above example, Specman samples the same (new) values for output and input, even if a sampling
event is set to a change of input @sim.
Workaround
NCSim: Add any signal assignment in Verilog code, triggered by change of the above 'input'. (For
example, such assignment may be added in a specman.v file.) Then, use NC Verilog LDV3.0s13 and
later with the '-NBASYNC' command line option.
Modelsim: Add a “shadow” register in Verilog and connect it to the sampled signal using non-blocking
assignment. Then, sample the “shadow”.
Defect: NA
Description
Entering a trace on special-event command with a signal name or a wildcard does not work. The full
signal name is not accepted. The wildcard is accepted but does not print a trace message. For example:
Specman xor_verify> trace on sim_write xor_try.inp
trace on sim_write xor_try.inp
Workaround
Set a trace without a signal name or wildcard. For example:
Specman xor_verify> trace on sim_write
-> 8250 sim_write -> xor_try.inp = 0 at line 16 in @xor_verify
• The unification of ports and 'HDLpathname' access is not fully implemented in Verisity adapters.
Writing to the same signal via different ports or mixing 'HDLpathname' access with port access can
cause race conditions, as well as unnecessary performance penalty and memory consumption.
• Support for point-to-point connections is between ports only, in other words, each port can be
connected to only one other port.
• Simple ports of int(bits: *) are not supported.
• Use of @sim with simple ports is supported only for those ports whose element type is scalar.
• External buffer ports are not supported.
• There is no support for passing structs or lists of struct through external simple ports.
• External out and inout event ports are not supported.
• Support for event ports is incomplete:
• The on struct member for event ports is not supported.
• Coverage on event ports is currently unsupported.
• The echo event command is not supported for event ports.
• It is impossible to specify a temporal formula (like “event_port is …”) for definition of an out
event port.
In order to use any of the above unsupported capabilities for event ports it is possible to define an
additional event and connect it to the event port as follows:
ep: in event_port is instance;
keep bind(ep,external);
event e is @ep$;
• Specman Elite currently does not support soft binding of ports, and no error message is issued to
indicate this. If you enter constraints in the form keep soft bind …, they are automatically (and
silently) converted to the hard constraint in the form keep bind ….
Note As of release 4.3.3, the keep soft bind syntax is being deprecated. For more information, see
Chapter 8 “Deprecation and Backward Compatibility for this Release”.
• The port attribute driver_delay() is currently ignored by Verilog adapters and does not affect the
stubs file.
Suggested workaround: use the attribute verilog_drive() instead.
• You cannot bind a port to a part select of an external signal. It must be bound to the entire signal.
The declared_range() must also match the actual range of the signal; it cannot be a part select.
However, assignments to a part select of a simple external port are allowed, for example:
outp$[31:16] = data;
• The list slicing operator [..], the list indexing operator [], and the field access operator are not supported
for ports in LHS expressions. In other words, p$[l..h], p$[i], and my_unit.p$ are not supported on
the LHS of an assignment operator.
• You cannot bind an external port to a Verilog memory or a VHDL multi-dimensional array. Use the
tick access syntax to read and write these objects.
• Unpacking to output ports or inout ports is not supported. The error messages are not consistent:
unpack(packing.high, cc, my_inoutport$);
*** Error: Expression 'my_inoutport.do_get()' is not assignable.
• When an out TCM method port is killed from e code (for example, when using first of), any SystemC
function that is bound to this method port cannot be killed. Its execution continues until its normal
stop. The method port cannot be called again from e until the SystemC function completes execution.
Defect 8108
Description
In an NCSIM mixed Verilog/VHDL environment in which adapters are dynamically loaded, the test
command fails if it is called from the -pre_commands option or from
$SPECMAN_PRE_COMMANDS.
Workarounds
• Remove the test command from the pre_commands option or from
$SPECMAN_PRE_COMMANDS and put it, for example, in the simulator command file. The
simulator command might be, for example
call sn "test"
Figure 9-1 shows the structure of a Specman Elite integration in GSI phase 1. As shown in Figure 9-1,
some of the framework utilities use the simulator’s proprietary interface (Verilog PLI, VHPI, FLI, etc.).
Other utilities use a non-standard interface that varies from simulator to simulator.
Framework
SIM
Port or IF
ESI object
tick
access functions
access
To enhance DUT object access and to improve run-time performance, VIP partners can develop
proprietary ESI object access functions and link these functions with the framework, thus creating a new
adapter.
Defect: 3521
Description
Sometimes, the finish command fails to stop at the end of a TCM. This happens only in TCMs that are
called by other TCMs.
Workaround
Currently, none.
Defect: 3434
Description
At the debugger prompt, if you use a command that causes Specman Elite to abort (for example, abort,
reload, or restore), it must be the only command on your command line.
For example:
reload -- OK
test -- OK
reload;test -- Fails
Workaround
Issue abort commands on separate lines.
Description
Specman Elite does not recognize methods of the current struct that are called from the debugger prompt
if the me prefix is omitted.
Workaround
Use the me prefix explicitly when calling methods of the current struct from the debugger prompt.
Defect: 2653
Description
Conditional breakpoints cannot be set on events.
Workaround
Currently, none.
Defect: 2738
Description
If you set a breakpoint on a call to a TCM that has a return value, then the debugger will stop AFTER
that TCM is executed instead of before entering that TCM.
This bug affects the debugging of all TCMs that return values.
Workaround
If you need to break upon a call to a value-returning TCM, add a dummy action in front of the call, in the
same line as the call. You will be able to break there.
Write:
var x: int; print read(addr);
Defect: 2653
Description
The debugger cannot break on an on event block. If you try it, you may get an exception.
Workaround
Write the desired code in a separate method and call it from inside the on event block. Then you can set
a breakpoint on the separate method.
Defect: NA
Description
The list_from configuration option in the Print category does not affect the Data Browser.
Workaround
Display the data using the older tree command after first setting the backward configuration option
config back33 -tree_window=TRUE.
Defect: NA
Description
Changing the value of the config option raw_print while the Data Browser is open has no effect. The
Data Browser uses the raw_print value that was in effect when the Data Browser was first opened.
Workaround
Use the Restore command to force the Data Browser to check the current value of raw_print, or set
raw_print before opening the Data Browser. Closing all Data Browser windows is not a workaround.
Defect: NA
Description
The Data Browser and Watch windows are not always refreshed automatically when Specman stops at
the simulator prompt. This is true, for example, for the ModelSim simulator.
Workaround
Click on the vrst-tool> button to refresh the Data Browser and Watch windows if necessary.
Defect: NA
Description
The command show data method causes the method to be executed at every Specman prompt.
Workaround
To display information about a method, use the print command or set the option config back33
-tree_window=TRUE and then use the tree command.
Defect: NA
Description
do_print() user extensions have no effect in the new data browser.
Workaround
To display information in the format defined by do_print(), use the print command. This command
prints the selected expression to the Specview main window, using the do_print() user extensions, if
they exist.
Defect: 2824
Description
Specview running on CDE pops up in a different desktop when a simulation error occurs.
Workaround
Currently, none.
Defect: N/A
Description
Various Solaris platforms require specific Sun patches to run Specman in GUI mode (that is, to run
Specview).
Workaround
Ensure that the required patches are installed in your environment. The full list of required cluster
patches for the various Solaris versions can be found on the Web at:
http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/J2SE
Please read the README page for the appropriate Solaris versions for detailed descriptions and
installation instructions.
To get a list of all currently installed patches on your Solaris machine, type:
Please compare the list of currently installed patches with the list of required patches in the README
file to verify that the required patches were installed.
After all patched are installed, you can try running Java by opening the Data Browser. To open the Data
Browser, click on the Sys button on Specview.
Note See also “Specview and Exceed” on page 9-47 for information about debugging Java problems
when you are using Exceed.
Defect: 4729
Description
You might encounter problems with Specview if you use Exceed from Hummingbird, Ltd. The
problems are probably caused by an incomplete font installation in the Exceed environment or Exceed
limitations processing Java-based GUIs. The problems can include:
• Specview does not run or hangs when you are using Exceed (font problem or Java problem).
• Specview window borders disappear, you cannot scroll or enter keystrokes, and so on when you are
using Exceed (Java problem).
Workaround
The following describe possible workarounds for your Exceed problems:
To solve the font problem, try installing additional fonts, as described in this section, or using a remote
font server, as described in “Use a Remote Font Server” on page 9-48. Default installations for Exceed
often do not include all standard fonts, in particular, the fonts required for Hewlett-Packard
workstations.
Note If you have problems installing additional fonts, see the Exceed Help or contact your system
administrator.
The Font Settings dialog box appears. This dialog box lets you view and edit the font database
available to Exceed and import font aliases.
3. If Exceed is using font directories, rather than a central font server, ensure that the font database
includes ALL fonts from the following directories:
hpfont
andrew
100dpi
75dpi
pc
misc
Note The 75dpi font directory may not exist. If it does, ensure that the 100dpi font directory is
listed before the 75dpi font directory.
5. In addition, load all known font aliases in the Exceed font configuration.
The alias files are provided with Exceed and are stored in files with an .ali suffix.
If installing additional fonts, as described in the previous section, does not solve your Exceed problems,
try using a remote font server, as described in this section.
Note If you have problems setting up a remote font server, see the Exceed Help or contact your system
administrator.
1. Activate the font server on your server (for example, your Solaris workstation)
To active the font server, you need to know the port on which it is connected.
4. Click on Add.
- The host (IP address) from which you activated the font server
- tcp transport
- The font server port
- Status “load” or “keep”
Note See the Help for this dialog box for more information.
8. Click the Move Up button until your newly added font server is at the top of the Font Database list.
Note When you use a font server, ensure that the following fonts are installed on your server:
hpfont
andrew
100dpi
75dpi
pc
misc
• Specview does not run or hangs when you are using Exceed.
• Specview window borders disappear, you cannot scroll or enter keystrokes, and so on when are using
Exceed.
To solve the Java problems, change the window mode and manager with one of the following solutions.
The window manager controls how windows look (borders and so on) and act (scroll bars and so on).
With this method you force the window manager for your Exceed windows to “native”, that is, the
window manager for your PC machine.
2. Double click on Communication and ensure that the mode is Passive. Close the Communication box.
One or the other of these options appear on the XConfig window, depending on the Exceed version.
4. If you opened the Screen Definition box, choose the following, close the Screen Definition box, and
close the XConfig window:
Window Mode: Multiple
Server Visual: Auto Select
Window Manager: Native
5. If you opened the Window Mode box, choose the following and close the Window Mode box:
Window Mode: Multiple
Window Manager: Native
Back on the XConfig window, click on Video, choose the following, close the Video box, and close
the XConfig window:
Server Visual: PseudoColor
The window manager now changes to your native window manager. If this solution does not work,
try the following solution.
This method requires using a remote window manager, for example, the window manager used on your
Solaris or HP server.
2. Using Exceed, open a terminal window on the server, and run a remote window manager explicitly.
The remote window managers are typically stored under /usr/dt/bin. For example, if your server is a
Solaris, you could run:
/usr/dt/bin/dtwm &
Note Check with your system administrator for information about the remote window managers
available to you.
Once you activate the remote window manager, it controls all your GUI windows, including
Specview.
Note The window management problem has been logged as an Exceed bug. For more information,
see:
http://www.hummingbird.com/exceedusers/Feb2000/0016.html
http://www.hummingbird.com/exceedusers/Feb2000/0043.html
Description
The help or apropos command in ASCII mode might fail if you enter strings with special characters,
such as “&” or “<?>”, or strings with unbalanced brackets, such as “select(”.
Workaround
Search for strings with none of the above limitations.
Description
Beginning with release 4.0.3 the Help system displays in your default Web browser. If a browser
window is open when you access the Help, it uses that window to display the Help, rather than opening
a new browser window.
If you are working in one ClearCase environment and have a browser open in another ClearCase
environment, the Help displays in the open browser in the other ClearCase environment. This can cause
problems because the Help HTML files may not be accessible in the other environment.
Workaround
Before you open the Help while working in a ClearCase environment, close any Web browser windows
that were opened in a different ClearCase environment. Alternatively, you can set the configuration gui
option -new_help_window to TRUE.
See Also
• configure gui on page 6-23 in the Specman Command Reference
Description
The hyperlinks in About This Specman Elite Release that link to other Specman Elite manuals work
when you view this manual from the:
Defect: 4236
Description
If the code of the TCM has a loop with a wait command, then all you see in the waveform viewer is that
“wait cycle” took n cycles. You do not see each iteration as a single item.
Workaround
Currently, none.
Defect: 4385
Description
Tracing an instance that is inherited from like shows only the instance content and not the inherited
fields and events.
Workaround
Currently, none.
Defect: NA
Description
ModelSim does not display the indication for event occurrence. Therefore the only valid value for the
config option event_data is “details”.
Workaround
None.
Defect: NA
Description
ModelSim does not display strings that are longer than the physical allocation in the wave. You have to
zoom in to see the whole string.
Workaround
Try to use shorter text strings by modifying the Specman wave configuration options:
stub_message_len and stub_strings_len.
Defect: NA
Description
While at the Specman prompt, the ModelSim GUI is locked, and there is no automatic refreshing of the
displayed data. To refresh the waveform display, you must press the Refresh button in the debugger
window or issue the refresh wave command.
Workaround
None.
Defect: NA
Description
VirSim cannot rename event entries with a meaningful name, so it uses the name sn_event<id>.
Workaround
In order to see event occurrences, set the wave config option event_data to all_data and not
occurrence_only. The event entry will have a meaningless name but the details wave entry below it will
have the proper event name.
Defect: NA
Description
When Signalscan is in a stopped state at the debugger prompt, there is no way to refresh the data
displayed in the waveform viewer.
Workaround
None.
Defect: NA
Description
CVL method and CVL call declarations cannot appear within a when block or within a derived struct.
The field declaration of type cvl_connection has the same limitation.
For example, the following code involving a CVL method causes a load-time error:
struct a {
!con: cvl_connection;
--...
};
struct b like a {
m() @sys.clk is {
--...
};
// Invalid CVL method declaration within `like'
cvl method m() @sys.clk is C routine specman_m;
};
In contrast to CVL declarations, CVL method implementation can be within a derived struct. Remote
CVL calls can also be activated from within a derived struct.
Workaround
Currently, none.
Defect: NA
Description
CVL method and CVL call arguments from the following types are not supported:
Workaround
Convert the argument into a supported type before and after the remote CVL call. For example, convert
“int (bits: 128)” into “list of int”.
Defect: NA
Description
Visual Toolkit (VT) applications run on AIX 5.1 only, which is in beta support in 4.3. The only
exception to this is the Specman Elite Test Ranking GUI, which is based on VT and can be run on any
supported AIX.
Workaround
None
Defect: NA
Description
Under Red Hat Linux, when the Specman Elite CPU profiler is activated in an environment that initiates
a number of threads, the profiler does not receive all the signals, and the profiler report is not valid.
Workaround
The workaround for this problem is to create a single-thread build whenever CPU profiling is required.
Defect: NA
Description
Specman Elite cannot be statically linked with NC Verilog using IUS5.3 on Red Hat 7.2. An attempt to
do so causes the following fatal error at elaboration time:
ncelab: *internal* (dlib_init() - Unable to initialize a search handle error
Note that such static linking is a normal step during integration of Specman Elite with the Incisive
simulator provided by Cadence.
This error has been reported to Cadence and is being tracked under Cadence's Support Request “SR
32839966”.
Workaround
Use a Red Hat version higher than 7.2.
Description
The collect command does not:
Workaround
Currently, none.
Description
Specview can hang when commands are issued while the simulator is being reset.
Workaround
Wait for the $reset command to execute in full before issuing any commands from the Specman prompt
or with the Specview buttons.
Description
Specman Elite does not accept file names or commands longer than about 4,000 characters.
Workaround
Currently, none.
Defect: 3588
Description
The config mechanism does not save the values inside category “mem” with a save command.
Workaround
Use write config file to save the config values. Then use read config file to restore them.
9.15.5 Encryption
Defect: 6889
Description
Encryption of files containing Japanese characters is not supported. Files containing EUC-JP characters
can be encrypted, but the encrypted files cannot then be loaded into Specman Elite.
Workaround
None.
• AIX 4.3.2.0, 4.3.3.0, and 5.1 (beta support, using an AIX 4.3 executable)
Note See “OS Platform Limitations” on page 9-57 in About This Specman Elite Release for platform
limitations.
Simulator Version(s)
Note All simulators are supported in 32-bit mode only (not 64-bit mode).
MTI VHDL: M, I, M, O
O
Verilog: O
XL O I, M, O M, O NA M, O
NC O I, M, O M, O NA O
Verilog
VCS O I, M, O NA M, O
NC M, O NA O
VHDL
Seamless 4.0 onwards Specman Elite can work with earlier versions of Seamless, but
Co-Verification no integration is supported.
Environment
K M
keywords, reserved 8-16 macros
known limitations 9-1 limitations
coverage 9-6 nested definitions of 9-2
data browser 9-43 memory management
debugger 9-40 problems
eRM 9-20 long integer generation 9-13
ESI 9-39 message() action
generation 9-7 limitation on nesting 9-23
GUI 9-46 messagef() action
help system 9-51 limitation on nesting 9-23
using in_sequence in complex constraints method extension
9-23 limitations 9-2, 9-3
using in_unit in complex constraints 9-23 Model Technology
language 9-2 supported simulators 10-2
miscellaneous 9-59 ModelSim
NCsim mixed 9-39 limitations 9-54, 9-55
using nested messages 9-23 versions, supported 10-2
passing parameters V
restrictions on 9-7
sampling events for 8-20 variables
temporal HDL-style
limitations limitations 9-30, 9-31
change behavior 9-14 VCS
fall behavior 9-14 versions, supported 10-2
not, expressions under 9-14 Verilog
on methods 9-16 limitations
rise behavior 9-14 escaped identifiers 9-33
true behavior 9-14 sampling in mixed environment 9-35
variable structs 9-17 SpeedSim 9-29
VHDL variables in @sim expressions time scale, setting 8-18
9-17 Verilog time scale 8-18
temporal evaluator Verilog-XL
compatibility 8-54, 8-55, 9-13 versions, supported 10-2
limitations 9-13 Verilog-XL limitations
temporal expressions forcing a reg 9-26
restrictions on 8-54, 8-55 version 4.0
tick_notation 8-47 compatibility issues
time scale setting backward compatibility flags
setting 8-18 8-35
tools, third party, supported 10-3 VHDL limitations
trace gen 8-65 ModelSim 9-25
trace on special event vhdl time statement
limitations 9-36 ignored by ModelSim 8-9
tree_window 8-60 VirSim
try action limitations 9-55
limitation on 9-18 versions, supported 10-2
type names, reserved 8-25 visual toolkit
AIX limitation 9-58
visualization of struct information 5-2
U Visualization Toolkit
Undertow not supported on AIX 9-57
versions, supported 10-2 vt_util
unit instance rule, violations of 8-26 limitations 9-22
units
limitations 9-33 W
relative paths
limitation 9-31 WARN_ADD_METHOD 8-39
upgrading WARN_AMBIGUOUS_METHOD 8-39, 8-43
Specman Elite versions 6-3 WARN_ASSIGN_LIST_COMPAT 8-50
use_trace_gen_33 8-62 WARN_BAD_COV_II_DEF_WARN 8-52
WARN_DEFINE_METHOD 8-43
WARN_DEFINE_METHOD2 8-43
WARN_METHOD_EXTENSION 8-39, 8-43
WARN_METHOD_NOT_DEFINED 8-39
WARN_METHOD_NOT_DEFINED1 8-39
WARN_UNDEFINED_METHOD1 8-43
WARN_VHDL_TIME_MODELSIM_IGNORE
D 8-9
waveform viewers
and simulators, supported combinations 10-3
limitations
loops in TCMs 9-53
MTI 9-54, 9-55
Signalscan 9-56
tracing like inherited instance 9-54
VirSim 9-55
Novas Debussy
versions, supported 10-2
waveform viewers, supported 10-2
when subtypes
references to 8-30
window
show gen option 8-66
X
X/Z literals
limitations 9-31
Z
z and x values
limitations 9-31