In this Topic Hide
In the following we have highlighted areas where the SIMetrix Verilog-A compiler is not compliant with the LRM 2.2 standard.
String variables are not supported. This is compliant with the Annex C 'Analog Language Subset'
desc and units attributes may be included but will not be functional.
Only the first from specification will be functional. Subsequent exclude specifications will be accepted by the compiler but will have no effect.
Syntax for "desc" and "units" is recognised but non-functional.
Non-standard SIMetrix attribute "instance" has been implemented. This defines the parameter as an instance parameter, that is, its value can be set on the device line. See Instance Parameters.
Anything other than "domain continuous" will raise an error.
Implemented but non-functional
Not supported
Accepted but non-functional
Not implemented. This will lead to a syntax error if used.
Not implemented. This will lead to a syntax error if used.
Not meaningful as hierarchical structures are not yet implemented.
Not supported in Verilog-A
Not supported in Verilog-A
Not meaningful as hierarchical structures are not yet implemented.
As hierarchical structures are not yet implemented, this is mostly not relevant.
But this is partially implemented within the simulator. If you connect different disciplines together you will get a warning. But the inherited disciplines will not be compatible, only the same disciplines may be inter-connected. ... and you only get a warning not an error.
Compliant for scalars only. Currently named vector branches are not supported. Unnamed branches are however fully supported.
Discipline compatibility is checked, but it seems that the discipline for each node in a branch must be identical. The spec requires them to be 'compatible' which is not the same thing.
Minor issue: if a branch is unused then the discipline of each node will not be checked at all and no error will be raised if they are incompatible. This is not defined in the standard.
Not supported in Verilog-A
Array initialisers are supported. Replication multiplier is not supported.
Not correctly implemented.
Its possible that this may never be implemented to the letter of the standard. While attempting to iterate to convergence, it is not at all uncommon for maths functions to be overflow or to receive invalid arguments. When this happens, SIMetrix reduces the step (whatever that step may be) and tries again. This algorithm is often successful.
Complying with the most literal interpretation of this would be undesirable as it would mean some simulations failing when they may have been perfectly solveable.
SIMetrix Verilog-A is mostly compliant with this section with the exception detailed below.
Analog operators (such as ddt, transition etc) are not allowed in places where their execution could be dependent on values that change during the course of a simulation. This is because analog operators store state information which could become invalid. SIMetrix does not always implement this restriction correctly and there are situation where it will allow you to use an analog operator but shouldn't.
Compliant except tolerance is currently ignored.
Others not implemented.
Not implemented.
Not implemented.
Compliant except for "nodeset"
Compliant except for "nodeset"
Not implemented
Compliant except cannot use local parameters
Partially compliant. Can use return value for output. Output via passed argument is not supported.
Not implemented
Not implemented
In general, hierarchical structures are not supported by the SIMetrix Verilog-A implementation and this is the most siginicant feature omitted at this time. However, much of the functionality provided by this feature may be achieved via the netlist, so this should not impact on the usefulness of the compiler too much. We do intend to implement this in a future version.
This section of the standard does include the syntax for module definitions and this is of course fully supported. This is covered by the opening paragraphs of section 7.1. The rest of the section is not implemented.
Not implemented in Verilog-A
Most of this section is concerned with Verilog-AMS which is the mixed-signal version and so is not relevant.
$realtime is not supported. All others are compliant.
Supported for first argument only. 'type_string' argument is not supported.
Not supported
Compliant except argument to functions are ignored.
Accepted but doesn't actually do anything
Compliant using built-in "pnjlim". User functions not implemented.
$mfactor implemented. Others are not
Not implemented
Not implemented
Not implemented
Not implemented
Not implemented
|