Verification Methodology Manual
version 1.1.1

(C) Copyright 2004-2009 Synopsys, Inc.
All Rights Reserved Worldwide


To be able to succesfully compile the SystemVerilog code in this
distribution using VCS2006.06-SP2, some conditional code has been
included to work around some limitations in the SystemVerilog
constructs supported by this version of VCS. The directives and
release notes mentionned in this document are not necessary if you are
using a later release of VCS.


You *MUST* use version VCS2006.06-SP2-9 or later.


You *MUST* define the symbol `VCS2006_06 when compiling the
SystemVerilog source code. This can be accomplished from the command
line using the +define option as shown below:

  % vcs -sverilog +define+VCS2006_06 +incdir=$VMM_HOME/sv ...


The only user-visible limitation of VCS2006.06-SP2 is the lack of
support for calling static methods from outside the class using the
class-scope operator.  For example, the following statement is not
supported:

   int speed = vmm_opts::get_int("speed", 10, "Transmit/Receive speed");

When defining the `VCS2006_06 symbol, these methods are no longer
static.  They must thus be called through an instance of the container
class.  The statement above must be implemented as follow:

   vmm_opts opts = new;
   int speed = opts.get_int("speed", 10, "Transmit/Receive speed");

This work-around will remain forward compatible with these methods
returning to static methods when using a later version of VCS.


The following methods documented as class-static are non-static when
VCS2006.06 is used and must be called using the work-around shown
above:

	vmm_opts::get_bit(...)
	vmm_opts::get_string(...)
	vmm_opts::get_int(...)
	vmm_opts::get_help();

	vmm_test_registry::run(...);
	vmm_test_registry::list();

	vmm_ral_tests::hw_reset(...);
	vmm_ral_tests::bit_bash(...);
	vmm_ral_tests::mem_walk(...);
	vmm_ral_tests::reg_access(...);
	vmm_ral_tests::mem_access(...);
	vmm_ral_tests::shared_access(...);

