Release Notes For Questa Sim - Intel FPGA Edition 2024.3 Sep 10 2024 This material contains trade secrets or otherwise confidential information owned by Siemens Industry Software Inc. or its affiliates (collectively, âSISWâ), or its licensors. Access to and use of this information is strictly limited as set forth in the Customerâs applicable agreements with SISW. This material may not be copied, distributed, or otherwise disclosed outside of the Customerâs facilities without the express written permission of SISW, and may not be used in any way not expressly authorized by SISW. Copyright 2024 Siemens _______________________________________________________________________ * How to Get Support For information on how to obtain technical support, visit the support page at [1]https://support.sw.siemens.com _______________________________________________________________________ Index to Release Notes * [2]Key Information * [3]Release Announcements in 2024.3 * [4]Base Product Specifications in 2024.3 * [5]Compatibility Issues with Release 2024.3 * [6]General Defects Repaired in 2024.3 * [7]User Interface Defects Repaired in 2024.3 * [8]SystemVerilog Defects Repaired in 2024.3 * [9]VHDL Defects Repaired in 2024.3 * [10]Mixed Language Defects Repaired in 2024.3 * [11]Power Aware Defects Repaired in 2024.3 * [12]Qwave logging Defects Repaired in 2024.3 * [13]User Interface Enhancements in 2024.3 * [14]SystemVerilog Enhancements in 2024.3 * [15]Mixed Language Enhancements in 2024.3 * [16]Power Aware Enhancements in 2024.3 * [17]Document Revision History in 2024.3 _______________________________________________________________________ Key Information * QSIM-83316 - This release will update licensing to SALT v2.4.2.0 and will require a FLEXnet minimum version of v11.19.0.1. Key changes: + License server: + Licensing daemon binaries (lmgrd, mgcld) are no longer provided with the release. + The daemon binaries are available within the Siemens License Server installation. + Siemens License Server can be downloaded from support center https://support.sw.siemens.com/en-US/product/1586485382/downlo ads * Siemens License Server no longer contains mgcld and saltd is expected to be used instead. + saltd vendor daemon is capable of serving mgcld licenses. License file: * For floating licenses: * It is expected to modify the DAEMON/VENDOR line in the license file to point to saltd obtained from the Siemens License Server installation * It will be necessary to verify that the vendor daemon (i.e., saltd) and the license server (i.e., lmgrd) have FLEXnet versions equal to or greater than 11.19.0.1. If the current FLEXnet version of your vendor daemon and lmgrd are less than 11.19.0.1 then it will be necessary to stop your license server and restart it using the vendor daemon and lmgrd obtained from the Siemens License Server installation. For node locked licenses, nothing needs to be done. License environment variable: * SALT_LICENSE_SERVER is the license environment variable that is expected to be used * SALT_LICENSE_SERVER is semicolon ';' delimited by default unlike the other licensing environment variables MGLS_LICENSE_FILE and LM_LICENSE_FILE * A deprecation warning will be printed if either MGLS_LICENSE_FILE or LM_LICENSE_FILE is being used instead of SALT_LICENSE_SERVER * It is expected that the licensing environment variables MGLS_LICENSE_FILE and LM_LICENSE_FILE will be deprecated starting release 2025.1 In summary, this release uses the following license versions: * FLEXnet v11.19.0.1 * SALT SDK v2.4.2.0 In the x86 linux installer questa_sim.aol, there was an option to install ARM linux_aarch64 platform executables. Starting 2024.2 release, this option is removed. Starting 2025.1 release, support for Linux RHEL 7 platform will be dropped. _______________________________________________________________________ Release Announcements in 2024.3 * Starting 2023.3, the Questa SIM Linux installer includes an optional component Questa Portable Stimulus Standard (Questa PSS). (Please contact a Siemens representative for more information) * Starting 2024.1, windows 11 is fully supported, in addition to windows 10. However, in 2025.1 release, windows 10 support will be dropped. _______________________________________________________________________ Base Product Specifications in 2024.3 * [Supported Platforms] Linux RHEL 7 x86/x86-64 Linux RHEL 8 x86/x86-64 Linux SLES 12 x86/x86-64 Linux SLES 15 x86/x86-64 Linux ROCKY 8 x86-64 Windows 10 x86/x64 Windows 11 x86/x64 [Supported GCC Compilers (for SystemC)] gcc-7.4.0-linux/gcc-7.4.0-linux_x86_64 gcc-10.3.0-linux/gcc-10.3.0-linux_x86_64 gcc-7.4.0-mingw32vc16 gcc-7.4.0-mingw64vc16 [OVL (shipped with product)] v2.8.1 [Licensing] FLEXnet v11.19.0.1 SALT v2.4.2.0 _______________________________________________________________________ Compatibility Issues with Release 2024.3 User Interface Compatibility * QSIM-81740 - (source) The deprecated vsim SystemVerilog constrained random extension "geninitialseedfix" (-svrandext=geninitialseedfix) has been removed. SystemVerilog Compatibility * [nodvtid] - (source) Assignment patterns used outside of an assignment-like context in SystemVerilog non-pattern matching case statement expressions are now flagged. In 2024.3 the following will emit a warning, and in 2025.1 the following will emit an optimization error: module qsim82602; reg [7:0] a [1:0] = '{0, 0}; always_comb begin case (a) '{0,1}: $display("hi"); default: $display("hello"); endcase end endmodule * QSIM-73007 - (results) In some rare cases, a randomize() call via super.randomize() or class_name::randomize() would register the constraint(s) of a derived class instead of the specified class, resulting in incorrect randomize() behavior. This issue has been fixed. * QSIM-83008 - (results) In some rare cases, randomize() would generate a solution that contradicts one or more !inside constraints. This issue has been fixed. * QSIM-82862 - (results) In some rare cases involving multiple 'dist' constraints on a common LHS, randomize() would generate a solution that contradicts one or more of the specified 'dist' constraints.This issue has been fixed. * QSIM-83015 - (results) In some rare cases, randomize() would generate an invalid solution for a scenario involving an iterative constraint on a non-random dynamic array or queue. This issue has been fixed. * QSIM-83738 - (results) Two identical randomize() calls (having the same random variables and constraints) involving one or more 'soft' constraints, with the same starting randstate, would sometimes generate different solutions (even when -svrandext=strictstab is enabled). This issue has been fixed. * QSIM-82643 - (results) In some cases, a randomize() call involving a random dynamic array/queue and a "unique" constraint on the same array/queue would spuriously fail due to a constraint contradiction if the solver evaluates the size of the dynamic array/queue to a value that causes the "unique" constraint to become unsatisfiable. This issue has been fixed. * QSIM-82437 - (results) In some rare cases, randomize() would produce different results between a checkpointed simulation and a non-checkpointed simulation -- even when the -svrandext=+strictstab extension is enabled. This issue has been fixed. * QSIM-87029 - (results) In some cases when randomize() fails (i.e. due to a constraint contradiction), the value of some random variables will be incorrectly updated to values that differ from those prior to randomization. This issue has been fixed. * QSIM-86814 - (results) In some rare cases, randomize() would generate a solution that violates one or more conditional (predicated) constraints. This issue has been fixed. * QSIM-86505 - (results) When vlog/vopt -svext=pathseed is enabled (enable unique seeding of module instances based on hierarchical path name) instances of a module containing a continuous assignment involving $urandom (on the RHS of the assignment) would incorrectly be seeded with the same seed. This issue has been fixed. * QSIM-86269 - (results) In some rare cases, randomize() would generate an invalid solution due to the incorrect evaluation of a constraint involving a random variable having "rand_mode" set to 0 whos value changes within the context of a pre_randomize() function. This issue has been fixed. * QSIM-89157 - (results) In some rare cases, randomize() would incorrectly evaluate an 'inside' or 'dist' constraint with a random range as a RHS operand if the lower-bound is solved to a value greater than the upper bound (i.e. empty range). This issue has been fixed. * QSIM-89156 - (results) In some rare cases, randomize() would incorrectly evaluate a unique constraint involving a non-random unpacked array as a RHS operand. This issue has been fixed. * QSIM-87986 - (results) In some rare cases, randomize() would spuriously report a failure (no solutions) for a satisfiable scenario involving a random dynamic array which is resized during randomize() that has a unique constraint on it. This issue has been fixed. * QSIM-88974 - (results) Fixed an issue with vsim -solverecord that would incorrectly record the resized size of a random dynamic array of null class handles. * QSIM-88216 - (results) In some rare cases, randomize() would report a spurious failure (no solutions) for a satisfiable scenario involving a complex combination of constraints including non-trivial division and modulo expressions. This issue has been fixed. * QSIM-90986 - (results) In some rare cases, randomize() would generate an invalid solution when evaluating constraints involving real-type addition and/or subtraction. This issue has been fixed. * QSIM-90926 - (results) In some cases, randomize() would not issue an out-of-bounds index error for a constraint involving an associative array which is indexed with a non-existent key. This issue has been fixed. * QSIM-90647 - (results) In some rare cases, randomize() would incorrectly prioritze 'soft' if-else constraints, resulting in incorrect behavior (solutions that violate the satisfiable, highest-priority 'soft' constraints would be generated). This issue has been fixed. * QSIM-90549 - (results) In some rare cases, when randomize() fails due to a constraint contradiction and -solvefaildebug and -solvefailtestcase are enabled, the generated testcase would not reproduce the failure due to one or more non-random variables being incorrectly declared 'rand'. This issue has been fixed. * QSIM-90445 - (results) In some rare cases, randomize() would incorrectly evaluate constraints involving real-types resulting in a constraint contradiction (randomize failure) when one or more valid solutions actually exist. This issue has been fixed. * QSIM-85243 - (results) The vsim SystemVerilog constrained-random language extension "prerandfirst" (-svrandext=prerandfirst) is now enabled by default. This extension changes the behavior of randomize() calls such that pre_randomize() functions of class instances referenced by random dynamic array/queue fields are executed before registering/evaluating the constraints in the parent class. This extension only affects randomize() calls involving random dynamic arrays (or queues) of class handles. VHDL Compatibility * QSIM-82837 - (results) Long compile and vopt times could occur if to many statements occurred on the same line of the file or if the large number of statememts were encrypted. Note that default label generation has changed slightly to be more consistent. All default labels on the same line will be unique. The scope the label was created in is no longer important. Mixed Language Compatibility * QSIM-86866 - (results) When using the -mixedsvvh option for packages, real constants were limited to 6 digits after the decimal point. As a results the values of in the other language could be different from the original language. Fix preserves at least 7 digits of accuracy but the values can still differ slightly. This fix requires that the original package either be recompiled or refresh for the change to take effect. Just re-running vopt will have no effect. Power Aware Compatibility * QSIM-85180 - (results) Source nets of resolved supply nets, which are themselves resolved, will no longer be included in the driving resolved bus. * QSIM-88102 - (results) Unintended skipping of transitions just after the "power reset" command has been fixed, resulting in corrected switching activity values (T0, T1, Tx, Tc, Ig) when logging signals post "power reset" command. * QSIM-90946 - (results) Added vopt option "-pa_enable=restoreasyncsr" which prioritizes active asynchronous statements during restore event for retention strategies, otherwise restores the retained value. * QSIM-91568 - (results) Added vopt option "-pa_enable=allowintfcellext" which enables insertion of isolation/level-shifter cells in mod ports of interfaces having writers. Cells will be inserted only for those ports that do not have any writers. General Compatibility * QSIM-81937 - (source) fixed the issue of vopt crash while adding a covergroup to a checker. * QSIM-79644 - (source, results) Changed PDI FSDB dumping so that modports and wreals are NOT logged by default. This make the default PDI FSDB logging compatible with Novas -pli based logging. Now in order to log wreals with PDI FSDB logging, use the +fsdb+wreal[=on|off] vsim command line switch or the +wreal option for the fsdbDumpvars or fsdbDumpMDA commands. Now in order to log modports with PDI FSDB logging, use the +fsdb+modport[=on|off] vsim command line switch or the +modport option for the fsdbDumpvars or fsdbDumpMDA commands. Note these are all non-standard options that are NOT supported by Novas. _______________________________________________________________________ General Defects Repaired in 2024.3 * QSIM-81937 - (source) fixed the issue of vopt crash while adding a covergroup to a checker. * QSIM-79644 - (source, results) Changed PDI FSDB dumping so that modports and wreals are NOT logged by default. This make the default PDI FSDB logging compatible with Novas -pli based logging. Now in order to log wreals with PDI FSDB logging, use the +fsdb+wreal[=on|off] vsim command line switch or the +wreal option for the fsdbDumpvars or fsdbDumpMDA commands. Now in order to log modports with PDI FSDB logging, use the +fsdb+modport[=on|off] vsim command line switch or the +modport option for the fsdbDumpvars or fsdbDumpMDA commands. Note these are all non-standard options that are NOT supported by Novas. * QSIM-85893 - Unconnected ports due to empty explicit named port connection ( eg: .portname() ) will be reported with a warning in vopt, when command line switch -warn_explicit_empty_named_port_conn used. _______________________________________________________________________ User Interface Defects Repaired in 2024.3 * QSIM-81740 - (source) The deprecated vsim SystemVerilog constrained random extension "geninitialseedfix" (-svrandext=geninitialseedfix) has been removed. _______________________________________________________________________ SystemVerilog Defects Repaired in 2024.3 * QSIM-82637 - vsim would sometimes crash during elaboration due to specialized classes with virtual interface fields. * QSIM-73007 - (results) In some rare cases, a randomize() call via super.randomize() or class_name::randomize() would register the constraint(s) of a derived class instead of the specified class, resulting in incorrect randomize() behavior. This issue has been fixed. * QSIM-83008 - (results) In some rare cases, randomize() would generate a solution that contradicts one or more !inside constraints. This issue has been fixed. * QSIM-82862 - (results) In some rare cases involving multiple 'dist' constraints on a common LHS, randomize() would generate a solution that contradicts one or more of the specified 'dist' constraints.This issue has been fixed. * QSIM-73006 - Previous versions of Questa did not support a call to randomize() via class_name::randomize() with arguments. This issue has been fixed (arguments are now supported for these types of randomize() calls). * QSIM-83015 - (results) In some rare cases, randomize() would generate an invalid solution for a scenario involving an iterative constraint on a non-random dynamic array or queue. This issue has been fixed. * QSIM-83738 - (results) Two identical randomize() calls (having the same random variables and constraints) involving one or more 'soft' constraints, with the same starting randstate, would sometimes generate different solutions (even when -svrandext=strictstab is enabled). This issue has been fixed. * QSIM-82643 - (results) In some cases, a randomize() call involving a random dynamic array/queue and a "unique" constraint on the same array/queue would spuriously fail due to a constraint contradiction if the solver evaluates the size of the dynamic array/queue to a value that causes the "unique" constraint to become unsatisfiable. This issue has been fixed. * QSIM-84661 - In some cases, randomize() would report a spurious (vsim-7067) error (Index out of bounds) for a constraint involving a multi-dimensional random dynamic array. This issue has been fixed. * QSIM-84883 - Significantly improved the performance (>10x) for randomize() calls involving large numbers of 'soft' constraints and 'disable soft' constraints. * QSIM-84864 - In some rare cases, randomize() would trigger an internal error (slvComputation.c). This issue has been fixed. * [nodvtid] - In some rare cases, randomize() would generate an invalid solution (a solution that contradicts one or more constraints) related to in-line constraints referring to class handle(s) in the local scope. This issue has been fixed. * QSIM-84642 - Calling std::randomize() with a hierarchical reference to a SystemC variable would not update the value of the variable with the solution generated during the randomize() call. This issue has been fixed. * QSIM-84618 - In some rare cases, randomize() would trigger an internal error (slvSolverContext.c) when evaluating in-line constraints referring to class handle(s) in the local scope. This issue has been fixed. * QSIM-82437 - (results) In some rare cases, randomize() would produce different results between a checkpointed simulation and a non-checkpointed simulation -- even when the -svrandext=+strictstab extension is enabled. This issue has been fixed. * QSIM-84223 - In some rare cases, randomize() would spuriously fail (no solutions / constraint contradiction) for scenarios involving random dynamic arrays that are resized during randomize(). This issue has been fixed. * QSIM-84218 - In some rare cases, randomize() would perform slowly and/or timeout for a scenario that performed well in Questa versions 2022.1 and earlier. This issue has been fixed. * QSIM-85114 - Significantly improved the performance of randomize() calls involving large numbers (thousands) of 'soft' constraints for a wide variety of scenarios. * QSIM-85925 - In some rare cases, randomize() would spuriously fail (no solutions / constraint contradiction) when evaluating a 'unique' constraint with constant 4-state operands. This issue has been fixed. * QSIM-87029 - (results) In some cases when randomize() fails (i.e. due to a constraint contradiction), the value of some random variables will be incorrectly updated to values that differ from those prior to randomization. This issue has been fixed. * QSIM-86814 - (results) In some rare cases, randomize() would generate a solution that violates one or more conditional (predicated) constraints. This issue has been fixed. * QSIM-86636 - Fixed a performance issue for some randomize() calls involving iterative equality constraints and large random unpacked arrays. * QSIM-86505 - (results) When vlog/vopt -svext=pathseed is enabled (enable unique seeding of module instances based on hierarchical path name) instances of a module containing a continuous assignment involving $urandom (on the RHS of the assignment) would incorrectly be seeded with the same seed. This issue has been fixed. * QSIM-86269 - (results) In some rare cases, randomize() would generate an invalid solution due to the incorrect evaluation of a constraint involving a random variable having "rand_mode" set to 0 whos value changes within the context of a pre_randomize() function. This issue has been fixed. * QSIM-85847 - In some cases, randomize() would cause a crash during simulation if qwavedb logging is enabled and the solver is evaluating a random associative array having 'string' type indices. This issue has been fixed. * QSIM-85726 - In some rare cases, randomize() would crash when evaluating a scenario involving a 'dist' constraint when -solvefaildebug=2 is enabled. This issue has been fixed. * QSIM-87637 - In some cases, randomize() would cause a crash when evaluating an ill-formed constraint "x < y < z" where "x", "y" and "z" are real-type random variables. This issue has been fixed. * QSIM-89157 - (results) In some rare cases, randomize() would incorrectly evaluate an 'inside' or 'dist' constraint with a random range as a RHS operand if the lower-bound is solved to a value greater than the upper bound (i.e. empty range). This issue has been fixed. * QSIM-89156 - (results) In some rare cases, randomize() would incorrectly evaluate a unique constraint involving a non-random unpacked array as a RHS operand. This issue has been fixed. * QSIM-88907 - In some rare cases, a randomize() call would trigger an internal error or crash when evaluating arithmetic constraints having a mix of real and non-real (integral) operands. This issue has been fixed. * QSIM-88651 - In some rare cases, randomize() would trigger a crash or a spurious (vsim-7073) error (attempt to dereference null class reference) when evaluating a scenario involving random dynamic arrays of class handles that are resized. This issue has been fixed. * QSIM-88449 - Starting in Questa version 2021.3, some randomize() calls involving array.sum() constraints on very large suffered from poor performance compared to earlier versions. This issue has been fixed. * QSIM-87986 - (results) In some rare cases, randomize() would spuriously report a failure (no solutions) for a satisfiable scenario involving a random dynamic array which is resized during randomize() that has a unique constraint on it. This issue has been fixed. * QSIM-87165 - The vsim -solvetimeout command line option specifies the maximum amount of CPU time (in seconds) a randomize() call can take before failing with a timeout error. This timeout was incorrectly being measured against wall (elapsed) time instead of CPU time. This issue has been fixed (timeout is not correctly measured against CPU time). * QSIM-88974 - (results) Fixed an issue with vsim -solverecord that would incorrectly record the resized size of a random dynamic array of null class handles. * QSIM-88216 - (results) In some rare cases, randomize() would report a spurious failure (no solutions) for a satisfiable scenario involving a complex combination of constraints including non-trivial division and modulo expressions. This issue has been fixed. * [nodvtid] - (source) Assignment patterns used outside of an assignment-like context in SystemVerilog non-pattern matching case statement expressions are now flagged. In 2024.3 the following will emit a warning, and in 2025.1 the following will emit an optimization error: module qsim82602; reg [7:0] a [1:0] = '{0, 0}; always_comb begin case (a) '{0,1}: $display("hi"); default: $display("hello"); endcase end endmodule * QSIM-90986 - (results) In some rare cases, randomize() would generate an invalid solution when evaluating constraints involving real-type addition and/or subtraction. This issue has been fixed. * QSIM-90926 - (results) In some cases, randomize() would not issue an out-of-bounds index error for a constraint involving an associative array which is indexed with a non-existent key. This issue has been fixed. * QSIM-90647 - (results) In some rare cases, randomize() would incorrectly prioritze 'soft' if-else constraints, resulting in incorrect behavior (solutions that violate the satisfiable, highest-priority 'soft' constraints would be generated). This issue has been fixed. * QSIM-90549 - (results) In some rare cases, when randomize() fails due to a constraint contradiction and -solvefaildebug and -solvefailtestcase are enabled, the generated testcase would not reproduce the failure due to one or more non-random variables being incorrectly declared 'rand'. This issue has been fixed. * QSIM-90445 - (results) In some rare cases, randomize() would incorrectly evaluate constraints involving real-types resulting in a constraint contradiction (randomize failure) when one or more valid solutions actually exist. This issue has been fixed. * QSIM-90309 - In some cases, a constraint referring to a non-random unpacked 4-state array having X or Z values would not elicit the expected error when evaluated by randomize() - either the simulator would crash or the behavior of randomize() would be incorrect. This issue has been fixed. * QSIM-90138 - In some rare cases, randomize() would trigger an internal error when evaluating a constraint involving and 'inside' constraint having one or more string literals on the RHS of 'inside' operator. This issue has been fixed. * [nodvtid] - In some rare cases, randomize() would cause the simulator to crash when evaluating a constraint involving a function call. This issue has been fixed. * QSIM-91499 - In some cases, randomize() would cause the simulator to crash when evaluating a solve-before constraint referring to a field and a bit/part select of a non-random packed struct. This issue has been fixed. _______________________________________________________________________ VHDL Defects Repaired in 2024.3 * QSIM-82053 - When a generic is of null array type and is mapped to an empty string literal in certain situations, a vsim crash is obtained. This has been fixed. * QSIM-82072 - Tick_HIGH attribute when used on empty string, used to give error in simulation. This has been fixed. * QSIM-81354 - Tick_Subtype attribute when used on more than one dimension, used to give error or wrong_value in simulation in some versions of Questa. This has been fixed. * QSIM-82040 - Protected type array variable whose index expression depends on non protected type constant record member, used to get created with incorrect size. This has been fixed. * QSIM-82247 - For some specific cases where functions and procedures have the same function arguments, vcom used to throw an error. This has been fixed. * QSIM-84383 - If a during optimize, we compute a variable of type std.textio.line and then index or slice that variable, incorrect data will be generated. This can result in incorrect constants being generated at elaboration time. More often than not will will be a some number of NULL characters followed by random characters. If a string containing NULL characters is send to the transcript, like the in a report statement. The string will be pre-maturely terminated at the first NULL. The fix is to generate the correct value for the slice and index in such cases. * QSIM-82837 - (results) Long compile and vopt times could occur if to many statements occurred on the same line of the file or if the large number of statememts were encrypted. Note that default label generation has changed slightly to be more consistent. All default labels on the same line will be unique. The scope the label was created in is no longer important. * QSIM-84450 - A variable assigned to from within a loop could be ignored if the assign is done using an aggregate as the target. * QSIM-84301 - Variable assignments within loops could be ignored if the variable is assign to through an aggregate. * [nodvtid] - When FSM detection is enable the tool would crash if a process had subprogram calls to a subprogram instance. The fix is to not allow processes with subprogram instance calls to be a FSM. * [nodvtid] - In some cases when assigning to a slice of a signal that is a NULL array, an error would be reported incorrectly. The message would say the whole signal, not the slice, is not the same length as the NULL array being assigned to it. * QSIM-85055 - Vcom would crash when autoorder is being used if an entity that doesn't currently exist in a library is reference in a configuration specification and the entity has been made directly visible by a use statement. Example: library lib1; use lib1.entity1; architecture rtl of some_entity is component c is end component; for all:c use entity entity1; * QSIM-85121 - Aliases to external names in subprograms may have incorrect signal attributes like last_value. * QSIM-85149 - If a hierarchical reference is used in a port connection and the reference is to a signal that is an alias of an alias or an alias to a port that has been collapsed due to optimization. The reference would fail to find the object and report an error. * QSIM-85747 - Using 'element on a array type with more than one dimension would result in an incorrect result. * QSIM-85768 - When using auto order. If an entity name reference in a direct instantiation matches the name of another identifier, an incorrect error will be reported. This can occur at the direct instantiation or some other location where the matching identifier is used. * [nodvtid] - If a design unit contains a large number of expression that consist of real literals and implicit operations like -3.0 or 3.0/1.0, vcom performance would be very slow. This slow down has been resolved. * QSIM-85958 - The -g/-G options when specifying more that just the generic name does not propagate to changes in port width in all cases. * QSIM-86167 - Calls to an protected method could crash if an argument to the method is also a protected type method call and that call is not the form protected_object.portected_method( ...) * QSIM-87189 - In VHDL 2008, when using the value <> for the default value of an interface subprogram, we could fail to find an actual subprogram if the formal for the interface subprogram was not all lower case. * QSIM-87124 - Vopt could generate bad machine code for package references resulting in a crash during elaboration in vsim. * QSIM-84038 - In some cases, logging a n-dimensional array of std_logic would cause a crash if length of a dimension was 1 and the total number of scalar elements at that dimension was 1. * QSIM-81420 - VSIM was crashing while trying to use type/subtype or generic procedure from package instance in certain situations. This has been fixed now. * QSIM-84543 - Null range in record signals wasn't handled properly. This has been fixed. * QSIM-89126 - Vopt would generate an internal error in some cases if the actual to a port is a aggregate and contains a single element. * QSIM-89177 - Comparison of 1 dimensional arrays could be done incorrectly if the subelements of the array are larger than 1 byte is size. * QSIM-89013 - Redundant warnings were coming from an internal optimization. This has been fixed. * QSIM-88458 - Direction constraint was getting ignored during to-vector assignment to downto-vector. This has been fixed now. * QSIM-88737 - There was a bug in vsim elaboration, leading to crash. This has been fixed. * QSIM-89454 - Expressions used in a range or a type within a subprogram could be incorrectly considered globally static. This would result in them be computed before simulation starts and could result in bad values or a crash. * QSIM-89305 - PSL statement referencing signals which are alias to external names may not have the correct values for them if the external name caused the message : * Warning: (vsim-8523) Cannot reference the signal "/xxx/yyy/zzz" before it has been elaborated. Time: 0 ns Iteration: 0 Instance: /xxx/bbb File: name.vhd * QSIM-90232 - Performance of VHDL compilation and optimization has been improved for designs that have a large processes that contain assertion and simple functions calls. These processes are usually directed test benches where the stimulus is hard code as VHDL signal assignments and the checks as assertions. * QSIM-97070 - Repeatedly doing quit -sim followed by a vsim command from within vsim, will eventually generate the following message: ** Error: (vopt-3) System call 'execv()' failed. This problem has been resolved. * QSIM-91565 - If an invalid -g/-G option is given to an generic that is an array and the generic's default value is an aggregate, the examine command or starting Questasim with the GUI can cause a crash. * QSIM-91694 - Suppressing the vsim waring 3351 would cause the simulation to crash. This has now been resolved. _______________________________________________________________________ Mixed Language Defects Repaired in 2024.3 * QSIM-84122 - When Verilog configurations are used on a VHDL design unit. It can cause a default binding to report an error about missing generics or ports on the entity selected. This error was incorrect and misleading because the generics or ports of the component and default entity were legal. This problem has been fixed and the error message about default binding failure has been enhance to include the actual entity selected and the reason why. * QSIM-86090 - Forcing a slice of a hierarchical reference that resolves to a VHDL signal had no effect. The force is now correctly applied. * QSIM-86866 - (results) When using the -mixedsvvh option for packages, real constants were limited to 6 digits after the decimal point. As a results the values of in the other language could be different from the original language. Fix preserves at least 7 digits of accuracy but the values can still differ slightly. This fix requires that the original package either be recompiled or refresh for the change to take effect. Just re-running vopt will have no effect. * QSIM-86856 - In some cases where VHDL instantiates a System Verilog module either vcom or vopt would generate the error 1136 "Unknown identifier " if a port or generic was a struct defined originally in a System Verilog package or unit scope. This has been resolved and should not longer occur. _______________________________________________________________________ Power Aware Defects Repaired in 2024.3 * QSIM-81341 - Added support for writing out Power State Analysis Report into CSV File, that shows all the Power State Tables fully expanded and hierarchically composed under the vopt option -pa_genrpt=csv_pst * QSIM-82734 - Added verror for vopt warning "vopt-9555". * QSIM-84633 - In vsim, user can identify if its a low-power simulation using tcl proc "GetPAMode" Below example demonstrates how user can use "GetPAMode" in .do file in vism: if {[GetPAMode]} { echo "This is A PA simulation" } * QSIM-85484 - Questa PA will produce a suppressible error, if a power domain is specified in -elements list of UPF command set_design_attributes for an attribute for which power domain is not supported. Error will be reported as: ** Error (suppressible): top.upf(62): UPF: (vopt-9579) Power Domain 'top_domain' in -elements list of set_design_attributes command is currently not supported. * QSIM-85485 - In case of potential conflict between UPF Power Switch ack port driver and RTL, tool will detect the conflict and resolve it during simulation. The resolution is if RTL driver is present after resolution, it will be given preference otherwise UPF ack port driver will be used. This is supported under vopt option -pa_enable=[+]ackportdriver. Under this option, in case of potential conflict, a warning (vopt-9578) will be generated: ** Warning: top.sv(49): (vopt-9578) Ack port ack_p(/tb/instop/multi) has a potential conflict with RTL driver. Conflict will be resolved during simulation. By default, this option is disabled. * QSIM-85180 - (results) Source nets of resolved supply nets, which are themselves resolved, will no longer be included in the driving resolved bus. * QSIM-85115 - Support added for skipping generate block scopes during relative path traversal with the set_scope UPF command. Attempting to access generate block scopes using set_scope command will now result in a vopt-9647 error. These changes will be enabled under the vopt option -pa_upfextensions=genscope * QSIM-85763 - Behavior of tcl/upf puts command with -nonewline option is now fixed. * QSIM-85545 - vopt-9022 (output port has no drivers) warning will not be reported for output ports driven via resolved bus. * QSIM-82306 - Added support for usage of retention supply for source sink analysis if use_retention_as_primary is provided in set_retention command. This will be enabled under vopt option "-pa_enable=[+]retsupplyassrcsink". By default, the option is disabled. * QSIM-87950 - Support for honoring line breaks in file paths having environment variables specified using vopt option -pa_libertyfiles in the argument file with a ".f" extension has been added. * QSIM-88102 - (results) Unintended skipping of transitions just after the "power reset" command has been fixed, resulting in corrected switching activity values (T0, T1, Tx, Tc, Ig) when logging signals post "power reset" command. * QSIM-89198 - Added suppressible vopt error 9926, reported by tool when name of power states of power-domain/supply-set in add_power_state command conflicts with another UPF object in same scope. _______________________________________________________________________ Qwave logging Defects Repaired in 2024.3 * VISU-36540 - In vsim batch mode, users who invoked do scripts with "add wave -group" calls experienced failures in generating the qwavedb file. This issue was fixed and now the -group option is silently ignored, matching Questa's behavior. _______________________________________________________________________ User Interface Enhancements in 2024.3 * QSIM-87291 - The modelsim.ini variable "SolveFailDebugTimeout" (vsim section) has been removed. Use "SolveTimeout" instead. * QSIM-85757 - In order to reduce the proliferation of redundant SystemVerilog extensions, the following vlog/vopt -svext extensions have been deprecated: + acsace - Allow constraint_set as contraint_expression in constraints in constraint block item. + ifslvbefr - Allow solve/before constraint under a constant if condition. + softimp - Allow implication constraint to be declared as 'soft'. + softunique - Allow 'unique' constraint to be declared as 'soft'. + stdrandarg - Allow std::randomize() arguments to be hierarchical references and indexed expressions. These extensions only serve to change the behavior or warning/error messages related to non-LRM compliant constructs. The effect of these extensions can be reproduced with the regular message-related command line options (e.g. -warning, -error, -suppress). _______________________________________________________________________ SystemVerilog Enhancements in 2024.3 * [nodvtid] - Error message 13276, illegal field select, has been enhanced to display column information for where the error occurs. * QSIM-82940 - Non-LRM compliant 'soft' implication constraints are now supported via the compile-time (vlog/vopt) SystemVerilog extension 'softimp'. When "vlog -svext=softimp" is enabled: + any occurrence of a 'soft' implication constraint will be interpreted as described by the Description section (below) + 'soft' implication constraints involving unsupported constructs will cause an informative error message to be reported When "vlog -svext=softimp" is disabled: + any occurrence of a 'soft' implication constraint will cause an informative error message to be reported This extension will be DISABLED by default. Specifying "vlog -pedanticerrors" will also disable the "softimp" extension (even if enabled via -svext=+softimp). Description A 'soft' implication constraint is a non-LRM compliant construct that can be declared as follows: soft if (cond) { a; b; c; } Note that implication constraints can be written using implication style syntax: soft (cond) -> { a; b; c; } The 'soft' implication constraints (above) will be interpreted as follows: soft (cond) -> (a && b && c); The SystemVerilog extension will support the following types of implied constraints: + expressions + 'dist' + 'unique' + nested implied constraints The following kinds of constructs will not be supported by 'soft' implication constraints: + implied solve/before constraint + implied 'disable soft' constraint + implied iterative constraint + implied 'soft' constraint ('soft' will be ignored, will generate warning) + implication constraint with 'else' clause * QSIM-69839 - Enhanced support for randomize() scenarios involving random dynamic arrays with complex dependencies between the size of the array and the element(s) of the array has been implemented, such that the constraints involving the elements of the dynamic array can be simultaneously evaluated with the size of the dynamic array for the following constructs: + iterative constraints on the dynamic array + array reduction methods on the dynamic array This enhanced support is NOT enabled by default, but can be enabled via the vsim command line option "-svrandext=+dynext". NOTE: When -svrandext=dynext is enabled, the -svrandext=prerandfirst extension will also automatically be enabled. It is not legal to enable -svrandext=dynext and disable -svrandext=prerandfirst. Limitations: + the enhanced flow supports dynamic arrays with a maximum size <= 64 + the enhanced flow does not support multi-dimensional dynamic arrays * QSIM-85243 - (results) The vsim SystemVerilog constrained-random language extension "prerandfirst" (-svrandext=prerandfirst) is now enabled by default. This extension changes the behavior of randomize() calls such that pre_randomize() functions of class instances referenced by random dynamic array/queue fields are executed before registering/evaluating the constraints in the parent class. This extension only affects randomize() calls involving random dynamic arrays (or queues) of class handles. * QSIM-82333 - Extended -svrandext=dynext support for randomize() scenarios involving random dynamic arrays with complex dependencies between the size of the array and the element(s) of the array has been implemented, such that the constraints involving the elements of the dynamic array can be simultaneously evaluated with the size of the dynamic array for the following constructs: + constraint w/ random index expression * QSIM-74277 - The behavior of the vsim "-solvetimeout