…ult" This reverts commit 537b8cb. Whatever problem that report was trying to address was addressed wrongly by the reverted patch.
This patch adds wreal support when in Verilog-AMS mode. It doesn't add everything that is shown in the Verilog-A standard. It adds the following: Declaring a wreal net. Declaring a wreal net with an initialization. Declaring a wreal input/output using ANSI syntax. Declaring a wreal input/output using the old style. Declaring wreal inout ports are also allowed and parsed, but the compiler does not know how to handle this. There are other deviations from what is shown in the Verilog-A standard, but this should get most of the syntax people actually use.
An @* with no sensitivities should be treated as something that will never trigger vs something that will run continuously. This patch makes this change and adds a warning when an @* has no sensitivities since this is almost certainly a coding bug.
It is legal for a named block to contain variable definitions and no statements. This patch fixes this for both style of blocks. It also organizes the block parsing code to be a bit more clear, adds an error case for fork/join and changes on check for size() > 0 for the more efficient ! empty().
These two bugs were found with a recent cppcheck addition. It also changes one occurrence of size() > 0 for the more efficient ! empty().
To avoid a variables not initialized in the construct this patch modifies the PSpecPath class to take the polarity and full_flag as arguments to the constructor.
Recent code changes moved the line that was being suppressed to a different line. This patch updates the suppression file to match the current code.
If a wired and/or net has more than four connections all the other resolution branches must also be wired and/or. All other nets can just be tri since tri0/tri1 only needs the final resolution to be an active pull up/down.
Since synthesis is not currently supported we do not support/generate sync/async set or clear control inputs. This is further complicated by the fact that the VVP DFF primitive is not fully implemented.
This patch fixes a compile problem in Cygwin where there are two definitions for abs() that do not match so the C++ code doesn't know which one to call. To avoid the whole mess replace the call to abs() with the appropriate ?: construct.
In a specify block a full connection is defined to only support a single source and destination path. This patch adds an error message when this is found, except we skip the error if all the paths are a single bit wide. This exemption was added to match the functionality found in NC-Verilog and presumably Verilog-XL. A message was also added in place of an assert if the source signals was not found in the current scope.
Both UDPs and system functions use the wide input functor. This patch modified the code generator to create a local net declaration for the output net if we have either a delay or modpath connecting the output to the true output. This is needed so that the wide input can be cleaned up correctly. Local real nets were also added to the local net pool when testing with valgrind. This allows them to be cleaned up at the end.
For a delay we do not know exactly what type we will be propagating until the initialization event has happened. Because of this we allocate both a vec4 and a vec8 value. Once the initialization event has happened we can free the unneeded element(s).
This patch uses the full_flag to verify that the input and output have the same width for a parallel connection. Icarus always uses a full connection so this is just a portability issue with other simulators. The pform dump code was also modified to correctly display the polarity and full/parallel connection type.
The begin/end block that wraps the statements can be implicit.
In MinGW, when parameters are passed to vhdlpp by ivlpp, single quotes are treated as ordinary characters. Use double quotes instead, as is done in the driver. Also, MinGW does not have a standard mkdir() function, so we need to convert calls to mkdir() into calls to _mkdir().
The Sun C compiler warns when -1 is used to initialize an unsigned.
When scaling a time value we would often use the power operator to create constants 10**-N that were then multiplied with the original value. The problem with this is that there is some errors in the representation of the fractional number. It is better to create a integer value 10**N and then divide the original value by this exact constant. You still have the calculation error, but the scale value is now an exactly real value.
The fix to get a C99 compliant strtod() in MinGW mistakenly set the LDFLAGS value rather than appending to it. This meant that a LDFLAGS supplied by the user on the configure command line would be ignored.