Change to IEEE 1800-2023 warning mentions
This commit is contained in:
parent
fa7234ff68
commit
3786f59e03
|
|
@ -74,7 +74,8 @@ Verilog AMS Support
|
|||
|
||||
Verilator implements a very small subset of Verilog AMS (Verilog Analog and
|
||||
Mixed-Signal Extensions) with the subset corresponding to those VMS
|
||||
keywords with near-equivalents in Verilog 2005 or SystemVerilog 2017.
|
||||
keywords with near-equivalents in Verilog IEEE 1364 or SystemVerilog
|
||||
IEEE 1800.
|
||||
|
||||
AMS parsing is enabled with :vlopt:`--language VAMS <--language>` or
|
||||
:vlopt:`--language 1800+VAMS <--language>`.
|
||||
|
|
|
|||
|
|
@ -161,8 +161,8 @@ List Of Warnings
|
|||
.. option:: BADSTDPRAGMA
|
||||
|
||||
An error that a pragma is badly formed, for pragmas defined by IEEE
|
||||
1800-2017. For example, an empty pragma line, or an incorrectly used
|
||||
'pragma protect'. Third-party pragmas not defined by IEEE 1800-2017 are
|
||||
1800-2023. For example, an empty pragma line, or an incorrectly used
|
||||
'pragma protect'. Third-party pragmas not defined by IEEE 1800-2023 are
|
||||
ignored.
|
||||
|
||||
|
||||
|
|
@ -283,7 +283,7 @@ List Of Warnings
|
|||
Unique case statements that select on an enumerated variable, where all
|
||||
of the enumerated values are covered by case items, are considered
|
||||
complete even if the case statement does not cover illegal
|
||||
non-enumerated values (IEEE 1800-2017 12.5.3). To check that illegal
|
||||
non-enumerated values (IEEE 1800-2023 12.5.3). To check that illegal
|
||||
values are not hit, use :vlopt:`--assert`.
|
||||
|
||||
Ignoring this warning will only suppress the lint check; it will
|
||||
|
|
@ -479,7 +479,7 @@ List Of Warnings
|
|||
|
||||
.. code-block::
|
||||
|
||||
%Warning-DEFPARAM: example.v:5:15: defparam is deprecated (IEEE 1800-2017 C.4.1)
|
||||
%Warning-DEFPARAM: example.v:5:15: defparam is deprecated (IEEE 1800-2023 C.4.1)
|
||||
: ... Suggest use instantiation with #(.MY_PARAM(...etc...))
|
||||
|
||||
To repair use :code:`#(.PARAMETER(...))` syntax. Repaired Example:
|
||||
|
|
@ -707,7 +707,7 @@ List Of Warnings
|
|||
|
||||
.. code-block::
|
||||
|
||||
%Warning-GENUNNAMED: example.v:2:9: Unnamed generate block (IEEE 1800-2017 27.6)
|
||||
%Warning-GENUNNAMED: example.v:2:9: Unnamed generate block (IEEE 1800-2023 27.6)
|
||||
|
||||
To fix this assign a label (often with the naming convention prefix of
|
||||
:code:`gen_` or :code:`g_`), for example:
|
||||
|
|
@ -763,7 +763,7 @@ List Of Warnings
|
|||
|
||||
.. code-block::
|
||||
|
||||
%Warning-IGNOREDRETURN: example.v:5:9: Ignoring return value of non-void function (IEEE 1800-2017 13.4.1)
|
||||
%Warning-IGNOREDRETURN: example.v:5:9: Ignoring return value of non-void function (IEEE 1800-2023 13.4.1)
|
||||
|
||||
The portable way to suppress this warning (in SystemVerilog) is to use a
|
||||
void cast, for example:
|
||||
|
|
@ -1328,7 +1328,7 @@ List Of Warnings
|
|||
.. TODO better example
|
||||
|
||||
An error that a package/class appears to have been referenced that has not
|
||||
yet been declared. According to IEEE 1800-2017 26.3, all packages must
|
||||
yet been declared. According to IEEE 1800-2023 26.3, all packages must
|
||||
be declared before being used.
|
||||
|
||||
|
||||
|
|
@ -1707,7 +1707,7 @@ List Of Warnings
|
|||
|
||||
.. code-block::
|
||||
|
||||
%Warning-TIMESCALEMOD: example.v:1:8: Timescale missing on this module as other modules have it (IEEE 1800-2017 3.14.2.3)
|
||||
%Warning-TIMESCALEMOD: example.v:1:8: Timescale missing on this module as other modules have it (IEEE 1800-2023 3.14.2.3)
|
||||
|
||||
Recommend using :vlopt:`--timescale` argument, or in front of all
|
||||
modules use:
|
||||
|
|
@ -1949,7 +1949,7 @@ List Of Warnings
|
|||
.. option:: USERERROR
|
||||
|
||||
A SystemVerilog elaboration-time assertion error was executed.
|
||||
IEEE 1800-2017 20.11 requires this error.
|
||||
IEEE 1800-2023 20.11 requires this error.
|
||||
|
||||
Faulty example:
|
||||
|
||||
|
|
@ -1965,7 +1965,7 @@ List Of Warnings
|
|||
.. option:: USERFATAL
|
||||
|
||||
A SystemVerilog elaboration-time assertion fatal was executed.
|
||||
IEEE 1800-2017 20.11 requires this error.
|
||||
IEEE 1800-2023 20.11 requires this error.
|
||||
|
||||
Faulty example:
|
||||
|
||||
|
|
@ -1981,7 +1981,7 @@ List Of Warnings
|
|||
.. option:: USERINFO
|
||||
|
||||
A SystemVerilog elaboration-time assertion print was executed. This is
|
||||
not an error or warning, and IEEE 1800-2017 20.11 requires this
|
||||
not an error or warning, and IEEE 1800-2023 20.11 requires this
|
||||
behavior.
|
||||
|
||||
Example:
|
||||
|
|
@ -1996,7 +1996,7 @@ List Of Warnings
|
|||
.. option:: USERWARN
|
||||
|
||||
A SystemVerilog elaboration-time assertion warning was executed.
|
||||
IEEE 1800-2017 20.11 requires this warning.
|
||||
IEEE 1800-2023 20.11 requires this warning.
|
||||
|
||||
Faulty example:
|
||||
|
||||
|
|
@ -2135,7 +2135,7 @@ List Of Warnings
|
|||
.. option:: ZEROREPL
|
||||
|
||||
Warns that zero is used as the replication value in the replication
|
||||
operator. This is specified as an error by IEEE 1800-2017 11.4.12.1.
|
||||
operator. This is specified as an error by IEEE 1800-2023 11.4.12.1.
|
||||
|
||||
Faulty example:
|
||||
|
||||
|
|
@ -2155,7 +2155,7 @@ List Of Warnings
|
|||
|
||||
.. code-block::
|
||||
|
||||
%Error-ZEROREPL: test.v:5:22: Replication value of 0 is only legal under a concatenation (IEEE 1800-2017 11.4.12.1)
|
||||
%Error-ZEROREPL: test.v:5:22: Replication value of 0 is only legal under a concatenation (IEEE 1800-2023 11.4.12.1)
|
||||
|
||||
Note that in some cases, this warning may be false, when a condition
|
||||
upstream or downstream of the access means the zero replication will
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ Scheduling
|
|||
----------
|
||||
|
||||
Verilator implements the Active and NBA regions of the SystemVerilog scheduling
|
||||
model as described in IEEE 1800-2017 chapter 4, and in particular sections
|
||||
model as described in IEEE 1800-2023 chapter 4, and in particular sections
|
||||
4.5 and Figure 4.1. The static (Verilation time) scheduling of SystemVerilog
|
||||
processes is performed by code in the ``V3Sched`` namespace. The single
|
||||
entry point to the scheduling algorithm is ``V3Sched::schedule``. Some
|
||||
|
|
@ -312,7 +312,7 @@ Scheduling of clocked and combinational logic
|
|||
For performance, clocked and combinational logic needs to be ordered.
|
||||
Conceptually this minimizes the iterations through the evaluation loop
|
||||
presented in the reference algorithm in the SystemVerilog standard (IEEE
|
||||
1800-2017 section 4.5), by evaluating logic constructs in data-flow order.
|
||||
1800-2023 section 4.5), by evaluating logic constructs in data-flow order.
|
||||
Without going into a lot of detail here, accept that well thought out ordering
|
||||
is crucial to good simulation performance, and also enables further
|
||||
optimizations later on.
|
||||
|
|
@ -407,7 +407,7 @@ triggered due to a combinational signal change from the previous evaluation
|
|||
pass, and a combinational loop settling due to hybrid logic, if the clocked
|
||||
logic reads the not yet settled combinationally driven signal. Such a race
|
||||
is indeed possible, but our evaluation is consistent with the SystemVerilog
|
||||
scheduling semantics (IEEE 1800-2017 chapter 4), and therefore any program
|
||||
scheduling semantics (IEEE 1800-2023 chapter 4), and therefore any program
|
||||
that exhibits such a race has non-deterministic behavior according to the
|
||||
SystemVerilog semantics, so we accept this.
|
||||
|
||||
|
|
@ -1754,11 +1754,11 @@ This offloading allows, for example, to use byte-to-byte comparisons of AST dump
|
|||
|
||||
{"files": {
|
||||
/* Map id to filename, and other metadata */
|
||||
"d": {"filename":"/home/ant/tmp/verilator/include/verilated_std.sv", "realpath":"/home/ant/tmp/verilator/include/verilated_std.sv", "language":"1800-2017"},
|
||||
"a": {"filename":"<built-in>", "realpath":"<built-in>", "language":"1800-2017"},
|
||||
"b": {"filename":"<command-line>", "realpath":"<command-line>", "language":"1800-2017"},
|
||||
"c": {"filename":"input.vc", "realpath":"/home/ant/tmp/verilator/test_regress/input.vc", "language":"1800-2017"},
|
||||
"e": {"filename":"t/t_EXAMPLE.v", "realpath":"/home/ant/tmp/verilator/test_regress/t/t_EXAMPLE.v", "language":"1800-2017"}
|
||||
"d": {"filename":"/home/ant/tmp/verilator/include/verilated_std.sv", "realpath":"/home/ant/tmp/verilator/include/verilated_std.sv", "language":"1800-2023"},
|
||||
"a": {"filename":"<built-in>", "realpath":"<built-in>", "language":"1800-2023"},
|
||||
"b": {"filename":"<command-line>", "realpath":"<command-line>", "language":"1800-2023"},
|
||||
"c": {"filename":"input.vc", "realpath":"/home/ant/tmp/verilator/test_regress/input.vc", "language":"1800-2023"},
|
||||
"e": {"filename":"t/t_EXAMPLE.v", "realpath":"/home/ant/tmp/verilator/test_regress/t/t_EXAMPLE.v", "language":"1800-2023"}
|
||||
},"pointers": {
|
||||
/* Map id to real address */
|
||||
"(AG)": "0x562997289180",
|
||||
|
|
@ -1907,21 +1907,21 @@ Verilator ideally would support all of IEEE, and has the goal to get close
|
|||
to full support. However the following IEEE sections and features are not
|
||||
anticipated to be ever implemented for the reasons indicated.
|
||||
|
||||
IEEE 1800-2017 3.3 modules within modules
|
||||
IEEE 1800-2023 3.3 modules within modules
|
||||
Little/no tool support, and arguably not a good practice.
|
||||
IEEE 1800-2017 6.12 "shortreal"
|
||||
IEEE 1800-2023 6.12 "shortreal"
|
||||
Little/no tool support, and easily promoted to real.
|
||||
IEEE 1800-2017 11.11 Min, typ, max
|
||||
IEEE 1800-2023 11.11 Min, typ, max
|
||||
No SDF support, so will always use typical.
|
||||
IEEE 1800-2017 20.16 Stochastic analysis
|
||||
IEEE 1800-2023 20.16 Stochastic analysis
|
||||
Little industry use.
|
||||
IEEE 1800-2017 20.17 PLA modeling
|
||||
IEEE 1800-2023 20.17 PLA modeling
|
||||
Little industry use and outdated technology.
|
||||
IEEE 1800-2017 31 Timing checks
|
||||
IEEE 1800-2023 31 Timing checks
|
||||
No longer relevant with static timing analysis tools.
|
||||
IEEE 1800-2017 32 SDF annotation
|
||||
IEEE 1800-2023 32 SDF annotation
|
||||
No longer relevant with static timing analysis tools.
|
||||
IEEE 1800-2017 33 Config
|
||||
IEEE 1800-2023 33 Config
|
||||
Little industry use.
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1941,7 +1941,7 @@ std::string VL_SUBSTR_N(const std::string& lhs, IData rhs, IData ths) VL_PURE {
|
|||
|
||||
IData VL_ATOI_N(const std::string& str, int base) VL_PURE {
|
||||
std::string str_mod = str;
|
||||
// IEEE 1800-2017 6.16.9 says '_' may exist.
|
||||
// IEEE 1800-2023 6.16.9 says '_' may exist.
|
||||
str_mod.erase(std::remove(str_mod.begin(), str_mod.end(), '_'), str_mod.end());
|
||||
|
||||
errno = 0;
|
||||
|
|
@ -2106,7 +2106,7 @@ bool VlReadMem::get(QData& addrr, std::string& valuer) {
|
|||
|
||||
if (VL_UNLIKELY(m_end != ~0ULL && m_addr <= m_end && !m_anyAddr)) {
|
||||
VL_WARN_MT(m_filename.c_str(), m_linenum, "",
|
||||
"$readmem file ended before specified final address (IEEE 1800-2017 21.4)");
|
||||
"$readmem file ended before specified final address (IEEE 1800-2023 21.4)");
|
||||
}
|
||||
|
||||
return false; // EOF
|
||||
|
|
@ -3234,7 +3234,7 @@ void* VerilatedScope::exportFindNullError(int funcnum) VL_MT_SAFE {
|
|||
// Slowpath - Called only when find has failed
|
||||
const std::string msg = ("Testbench C called '"s + VerilatedImp::exportName(funcnum)
|
||||
+ "' but scope wasn't set, perhaps due to dpi import call without "
|
||||
+ "'context', or missing svSetScope. See IEEE 1800-2017 35.5.3.");
|
||||
+ "'context', or missing svSetScope. See IEEE 1800-2023 35.5.3.");
|
||||
VL_FATAL_MT("unknown", 0, "", msg.c_str());
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1705,7 +1705,7 @@ public:
|
|||
T_Class* operator->() const { return m_objp; }
|
||||
// For 'if (ptr)...'
|
||||
operator bool() const { return m_objp; }
|
||||
// In SV A == B iff both are handles to the same object (IEEE 1800-2017 8.4)
|
||||
// In SV A == B iff both are handles to the same object (IEEE 1800-2023 8.4)
|
||||
template <typename T_OtherClass>
|
||||
bool operator==(const VlClassRef<T_OtherClass>& rhs) const {
|
||||
return m_objp == rhs.m_objp;
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
#include "verilated_syms.h"
|
||||
|
||||
//======================================================================
|
||||
// From IEEE 1800-2017 annex M
|
||||
// From IEEE 1800-2023 annex M
|
||||
|
||||
#include "vltstd/sv_vpi_user.h"
|
||||
|
||||
|
|
|
|||
|
|
@ -170,7 +170,7 @@ class AssertVisitor final : public VNVisitor {
|
|||
if (m_procedurep) {
|
||||
// To support this need queue of asserts to activate
|
||||
nodep->v3error("Unsupported: Procedural concurrent assertion with"
|
||||
" clocking event inside always (IEEE 1800-2017 16.14.6)");
|
||||
" clocking event inside always (IEEE 1800-2023 16.14.6)");
|
||||
}
|
||||
}
|
||||
//
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ private:
|
|||
AstNode* const pinp = argp->exprp()->unlinkFrBack();
|
||||
replaceVarRefsWithExprRecurse(propExprp, portp, pinp);
|
||||
}
|
||||
// Handle case with 2 disable iff statement (IEEE 1800-2017 16.12.1)
|
||||
// Handle case with 2 disable iff statement (IEEE 1800-2023 16.12.1)
|
||||
if (nodep->disablep() && propExprp->disablep()) {
|
||||
nodep->v3error("disable iff expression before property call and in its "
|
||||
"body is not legal");
|
||||
|
|
@ -160,7 +160,7 @@ private:
|
|||
FileLine* const flp = nodep->fileline();
|
||||
V3Const::constifyEdit(nodep->skewp());
|
||||
if (!VN_IS(nodep->skewp(), Const)) {
|
||||
nodep->skewp()->v3error("Skew must be constant (IEEE 1800-2017 14.4)");
|
||||
nodep->skewp()->v3error("Skew must be constant (IEEE 1800-2023 14.4)");
|
||||
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
|
||||
return;
|
||||
}
|
||||
|
|
@ -176,7 +176,7 @@ private:
|
|||
skewedRefp->user1(true);
|
||||
AstAssign* const assignp = new AstAssign{flp, exprp->cloneTreePure(false), skewedRefp};
|
||||
if (skewp->isZero()) {
|
||||
// Drive the var in Re-NBA (IEEE 1800-2017 14.16)
|
||||
// Drive the var in Re-NBA (IEEE 1800-2023 14.16)
|
||||
m_clockingp->addNextHere(new AstAlwaysReactive{
|
||||
flp, new AstSenTree{flp, m_clockingp->sensesp()->cloneTree(false)}, assignp});
|
||||
} else if (skewp->fileline()->timingOn()) {
|
||||
|
|
@ -206,12 +206,12 @@ private:
|
|||
AstVarRef* const refp = new AstVarRef{flp, varp, VAccess::WRITE};
|
||||
refp->user1(true);
|
||||
if (skewp->num().is1Step()) {
|
||||
// Assign the sampled expression to the clockvar (IEEE 1800-2017 14.13)
|
||||
// Assign the sampled expression to the clockvar (IEEE 1800-2023 14.13)
|
||||
AstSampled* const sampledp = new AstSampled{flp, exprp->cloneTreePure(false)};
|
||||
sampledp->dtypeFrom(exprp);
|
||||
m_clockingp->addNextHere(new AstAssignW{flp, refp, sampledp});
|
||||
} else if (skewp->isZero()) {
|
||||
// #0 means the var has to be sampled in Observed (IEEE 1800-2017 14.13)
|
||||
// #0 means the var has to be sampled in Observed (IEEE 1800-2023 14.13)
|
||||
AstAssign* const assignp = new AstAssign{flp, refp, exprp->cloneTreePure(false)};
|
||||
m_clockingp->addNextHere(new AstAlwaysObserved{
|
||||
flp, new AstSenTree{flp, m_clockingp->sensesp()->cloneTree(false)}, assignp});
|
||||
|
|
@ -256,13 +256,13 @@ private:
|
|||
if (!nodep->isCycleDelay()) {
|
||||
if (m_inSynchDrive) {
|
||||
nodep->v3error("Only cycle delays can be used in synchronous drives"
|
||||
" (IEEE 1800-2017 14.16)");
|
||||
" (IEEE 1800-2023 14.16)");
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (m_inAssign && !m_inSynchDrive) {
|
||||
nodep->v3error("Cycle delays not allowed as intra-assignment delays"
|
||||
" (IEEE 1800-2017 14.11)");
|
||||
" (IEEE 1800-2023 14.11)");
|
||||
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
|
||||
return;
|
||||
}
|
||||
|
|
@ -277,7 +277,7 @@ private:
|
|||
}
|
||||
if (!m_defaultClockingp) {
|
||||
nodep->v3error("Usage of cycle delays requires default clocking"
|
||||
" (IEEE 1800-2017 14.11)");
|
||||
" (IEEE 1800-2023 14.11)");
|
||||
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
|
||||
return;
|
||||
}
|
||||
|
|
@ -302,24 +302,24 @@ private:
|
|||
void visit(AstSenTree* nodep) override {
|
||||
if (m_inSynchDrive) {
|
||||
nodep->v3error("Event controls cannot be used in "
|
||||
"synchronous drives (IEEE 1800-2017 14.16)");
|
||||
"synchronous drives (IEEE 1800-2023 14.16)");
|
||||
}
|
||||
}
|
||||
void visit(AstNodeVarRef* nodep) override {
|
||||
if (AstClockingItem* const itemp = VN_CAST(nodep->varp()->user1p(), ClockingItem)) {
|
||||
if (nodep->access().isReadOrRW() && !nodep->user1()
|
||||
&& itemp->direction() == VDirection::OUTPUT) {
|
||||
nodep->v3error("Cannot read from output clockvar (IEEE 1800-2017 14.3)");
|
||||
nodep->v3error("Cannot read from output clockvar (IEEE 1800-2023 14.3)");
|
||||
}
|
||||
if (nodep->access().isWriteOrRW()) {
|
||||
if (itemp->direction() == VDirection::OUTPUT) {
|
||||
if (!m_inAssignDlyLhs) {
|
||||
nodep->v3error("Only non-blocking assignments can write "
|
||||
"to clockvars (IEEE 1800-2017 14.16)");
|
||||
"to clockvars (IEEE 1800-2023 14.16)");
|
||||
}
|
||||
if (m_inAssign) m_inSynchDrive = true;
|
||||
} else if (!nodep->user1() && itemp->direction() == VDirection::INPUT) {
|
||||
nodep->v3error("Cannot write to input clockvar (IEEE 1800-2017 14.3)");
|
||||
nodep->v3error("Cannot write to input clockvar (IEEE 1800-2023 14.3)");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -463,7 +463,7 @@ private:
|
|||
if (clockingp->isDefault()) {
|
||||
if (m_defaultClockingp) {
|
||||
clockingp->v3error("Only one default clocking block allowed per module"
|
||||
" (IEEE 1800-2017 14.12)");
|
||||
" (IEEE 1800-2023 14.12)");
|
||||
}
|
||||
m_defaultClockingp = clockingp;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ class ForceConvertVisitor final : public VNVisitor {
|
|||
transformWritenVarScopes(resetEnp->lhsp(), [this](AstVarScope* vscp) {
|
||||
return getForceComponents(vscp).m_enVscp;
|
||||
});
|
||||
// IEEE 1800-2017 10.6.2: If this is a net, and not a variable, then reset the read
|
||||
// IEEE 1800-2023 10.6.2: If this is a net, and not a variable, then reset the read
|
||||
// signal directly as well, in case something in the same process reads it later. Also, if
|
||||
// it is a variable, and not a net, set the original signal to the forced value, as it
|
||||
// needs to retain the forced value until the next procedural update, which might happen on
|
||||
|
|
|
|||
|
|
@ -358,7 +358,7 @@ class LinkCellsVisitor final : public VNVisitor {
|
|||
nextp = VN_AS(pinp->nextp(), Pin);
|
||||
if (pinp->svDotName()) pinDotName = true;
|
||||
if (pinp->dotStar()) {
|
||||
if (pinStar) pinp->v3error("Duplicate .* in an instance (IEEE 1800-2017 23.3.2)");
|
||||
if (pinStar) pinp->v3error("Duplicate .* in an instance (IEEE 1800-2023 23.3.2)");
|
||||
pinStar = true;
|
||||
// Done with this fake pin
|
||||
VL_DO_DANGLING(pinp->unlinkFrBack()->deleteTree(), pinp);
|
||||
|
|
@ -379,7 +379,7 @@ class LinkCellsVisitor final : public VNVisitor {
|
|||
for (AstPin* pinp = nodep->pinsp(); pinp; pinp = VN_AS(pinp->nextp(), Pin)) {
|
||||
if ((pinStar || pinDotName) && pinp->name().substr(0, 11) == "__pinNumber") {
|
||||
pinp->v3error("Mixing positional and .*/named instantiation connection"
|
||||
" (IEEE 1800-2017 23.3.2)");
|
||||
" (IEEE 1800-2023 23.3.2)");
|
||||
}
|
||||
if (!pinp->exprp()) {
|
||||
if (pinp->name().substr(0, 11) == "__pinNumber") {
|
||||
|
|
|
|||
|
|
@ -1069,7 +1069,7 @@ class LinkDotFindVisitor final : public VNVisitor {
|
|||
&& VN_AS(m_curSymp->nodep(), Class)->isInterfaceClass() && !nodep->pureVirtual()
|
||||
&& !nodep->isConstructor()) {
|
||||
nodep->v3error("Interface class functions must be pure virtual"
|
||||
<< " (IEEE 1800-2017 8.26): " << nodep->prettyNameQ());
|
||||
<< " (IEEE 1800-2023 8.26): " << nodep->prettyNameQ());
|
||||
}
|
||||
// Change to appropriate package if extern declaration (vs definition)
|
||||
if (nodep->classOrPackagep()) {
|
||||
|
|
@ -1202,7 +1202,7 @@ class LinkDotFindVisitor final : public VNVisitor {
|
|||
if (VN_IS(m_curSymp->nodep(), Class)
|
||||
&& VN_AS(m_curSymp->nodep(), Class)->isInterfaceClass() && !nodep->isParam()) {
|
||||
nodep->v3error("Interface class cannot contain non-parameter members"
|
||||
<< " (IEEE 1800-2017 8.26): " << nodep->prettyNameQ());
|
||||
<< " (IEEE 1800-2023 8.26): " << nodep->prettyNameQ());
|
||||
}
|
||||
if (!m_statep->forScopeCreation()) {
|
||||
// Find under either a task or the module's vars
|
||||
|
|
@ -1245,7 +1245,7 @@ class LinkDotFindVisitor final : public VNVisitor {
|
|||
<< (ansiWarn ? nodep->warnMore()
|
||||
+ "... note: ANSI ports must have"
|
||||
" type declared with the I/O"
|
||||
" (IEEE 1800-2017 23.2.2.2)\n"
|
||||
" (IEEE 1800-2023 23.2.2.2)\n"
|
||||
: "")
|
||||
<< nodep->warnContextPrimary() << '\n'
|
||||
<< findvarp->warnOther()
|
||||
|
|
@ -1610,7 +1610,7 @@ class LinkDotParamVisitor final : public VNVisitor {
|
|||
}
|
||||
void visit(AstDefParam* nodep) override {
|
||||
iterateChildren(nodep);
|
||||
nodep->v3warn(DEFPARAM, "defparam is deprecated (IEEE 1800-2017 C.4.1)\n"
|
||||
nodep->v3warn(DEFPARAM, "defparam is deprecated (IEEE 1800-2023 C.4.1)\n"
|
||||
<< nodep->warnMore()
|
||||
<< "... Suggest use instantiation with #(."
|
||||
<< nodep->prettyName() << "(...etc...))");
|
||||
|
|
@ -1726,7 +1726,7 @@ class LinkDotParamVisitor final : public VNVisitor {
|
|||
// might have been in a header file referring to a module we never
|
||||
// needed so there are false positives
|
||||
nodep->v3error(
|
||||
"Forward typedef unused or does not resolve to a data type (IEEE 1800-2017 6.18): "
|
||||
"Forward typedef unused or does not resolve to a data type (IEEE 1800-2023 6.18): "
|
||||
<< nodep->prettyNameQ());
|
||||
}
|
||||
// We only needed the forward declaration in order to parse correctly.
|
||||
|
|
@ -2133,7 +2133,7 @@ class LinkDotResolveVisitor final : public VNVisitor {
|
|||
new AstNew{fl, nullptr}};
|
||||
AstNodeStmt* const superNewStmtp = superNewp->makeStmt();
|
||||
for (AstNode* stmtp = nodep->stmtsp(); stmtp; stmtp = stmtp->nextp()) {
|
||||
// super.new shall be the first statement (IEEE 1800-2017 8.15)
|
||||
// super.new shall be the first statement (IEEE 1800-2023 8.15)
|
||||
// but some nodes (such as variable declarations and typedefs) should stay before
|
||||
if (VN_IS(stmtp, NodeStmt)) {
|
||||
stmtp->addHereThisAsNext(superNewStmtp);
|
||||
|
|
@ -2182,7 +2182,7 @@ class LinkDotResolveVisitor final : public VNVisitor {
|
|||
clockingp->fileline(), VVarType::MODULETEMP, clockingp->name(), VFlagChildDType{},
|
||||
new AstBasicDType{clockingp->fileline(), VBasicDTypeKwd::EVENT}};
|
||||
clockingp->eventp(eventp);
|
||||
// Trigger the clocking event in Observed (IEEE 1800-2017 14.13)
|
||||
// Trigger the clocking event in Observed (IEEE 1800-2023 14.13)
|
||||
clockingp->addNextHere(new AstAlwaysObserved{
|
||||
clockingp->fileline(),
|
||||
new AstSenTree{clockingp->fileline(), clockingp->sensesp()->cloneTree(false)},
|
||||
|
|
@ -2229,7 +2229,7 @@ class LinkDotResolveVisitor final : public VNVisitor {
|
|||
"Class " << implementsClassp->prettyNameQ() << " implements "
|
||||
<< interfaceClassp->prettyNameQ()
|
||||
<< " but is missing implementation for "
|
||||
<< interfaceSubp->prettyNameQ() << " (IEEE 1800-2017 8.26)\n"
|
||||
<< interfaceSubp->prettyNameQ() << " (IEEE 1800-2023 8.26)\n"
|
||||
<< implementsClassp->warnContextPrimary() << '\n'
|
||||
<< interfaceSubp->warnOther()
|
||||
<< "... Location of interface class's function\n"
|
||||
|
|
@ -2243,7 +2243,7 @@ class LinkDotResolveVisitor final : public VNVisitor {
|
|||
<< interfaceClassp->prettyNameQ()
|
||||
<< " but missing inheritance conflict resolution for "
|
||||
<< interfaceSubp->prettyNameQ()
|
||||
<< " (IEEE 1800-2017 8.26.6.2)\n"
|
||||
<< " (IEEE 1800-2023 8.26.6.2)\n"
|
||||
<< implementsClassp->warnContextPrimary() << '\n'
|
||||
<< interfaceSubp->warnOther()
|
||||
<< "... Location of interface class's function\n"
|
||||
|
|
@ -2443,7 +2443,7 @@ class LinkDotResolveVisitor final : public VNVisitor {
|
|||
if (VN_IS(nodep->lhsp(), ParseRef) && nodep->lhsp()->name() == "this") {
|
||||
VSymEnt* classSymp = getThisClassSymp();
|
||||
if (!classSymp) {
|
||||
nodep->v3error("'this' used outside class (IEEE 1800-2017 8.11)");
|
||||
nodep->v3error("'this' used outside class (IEEE 1800-2023 8.11)");
|
||||
m_ds.m_dotErr = true;
|
||||
} else {
|
||||
m_ds.m_dotSymp = classSymp;
|
||||
|
|
@ -2452,13 +2452,13 @@ class LinkDotResolveVisitor final : public VNVisitor {
|
|||
} else if (VN_IS(nodep->lhsp(), ParseRef) && nodep->lhsp()->name() == "super") {
|
||||
const VSymEnt* classSymp = getThisClassSymp();
|
||||
if (!classSymp) {
|
||||
nodep->v3error("'super' used outside class (IEEE 1800-2017 8.15)");
|
||||
nodep->v3error("'super' used outside class (IEEE 1800-2023 8.15)");
|
||||
m_ds.m_dotErr = true;
|
||||
} else {
|
||||
const auto classp = VN_AS(classSymp->nodep(), Class);
|
||||
const auto cextp = classp->extendsp();
|
||||
if (!cextp) {
|
||||
nodep->v3error("'super' used on non-extended class (IEEE 1800-2017 8.15)");
|
||||
nodep->v3error("'super' used on non-extended class (IEEE 1800-2023 8.15)");
|
||||
m_ds.m_dotErr = true;
|
||||
} else {
|
||||
if (m_statep->forPrimary()
|
||||
|
|
@ -2560,7 +2560,7 @@ class LinkDotResolveVisitor final : public VNVisitor {
|
|||
if (m_statep->forPrimary()) return; // The class might be parameterized somewhere
|
||||
const VSymEnt* classSymp = getThisClassSymp();
|
||||
if (!classSymp) {
|
||||
nodep->v3error("'this' used outside class (IEEE 1800-2017 8.11)");
|
||||
nodep->v3error("'this' used outside class (IEEE 1800-2023 8.11)");
|
||||
return;
|
||||
}
|
||||
AstClass* const classp = VN_AS(classSymp->nodep(), Class);
|
||||
|
|
@ -2943,7 +2943,7 @@ class LinkDotResolveVisitor final : public VNVisitor {
|
|||
&& VN_IS(nodep->classOrPackageNodep(), Class)
|
||||
// References to class:: within class itself are OK per IEEE (UVM does this)
|
||||
&& modClassp != refClassp) {
|
||||
nodep->v3error("Reference to parameterized class without #() (IEEE 1800-2017 8.25.1)\n"
|
||||
nodep->v3error("Reference to parameterized class without #() (IEEE 1800-2023 8.25.1)\n"
|
||||
<< nodep->warnMore() << "... Suggest use '"
|
||||
<< nodep->classOrPackageNodep()->prettyName() << "#()'");
|
||||
}
|
||||
|
|
@ -3544,7 +3544,7 @@ class LinkDotResolveVisitor final : public VNVisitor {
|
|||
// Will need later resolution when deal with parameters
|
||||
if (++next == 2 && !nodep->isInterfaceClass() && !cextp->isImplements()) {
|
||||
cextp->v3error("Multiple inheritance illegal on non-interface classes"
|
||||
" (IEEE 1800-2017 8.13)");
|
||||
" (IEEE 1800-2023 8.13)");
|
||||
}
|
||||
iterate(cextp);
|
||||
if (m_statep->forPrimary()) {
|
||||
|
|
|
|||
|
|
@ -274,7 +274,7 @@ class LinkJumpVisitor final : public VNVisitor {
|
|||
iterateChildren(nodep);
|
||||
const AstFunc* const funcp = VN_CAST(m_ftaskp, Func);
|
||||
if (m_inFork) {
|
||||
nodep->v3error("Return isn't legal under fork (IEEE 1800-2017 9.2.3)");
|
||||
nodep->v3error("Return isn't legal under fork (IEEE 1800-2023 9.2.3)");
|
||||
VL_DO_DANGLING(pushDeletep(nodep->unlinkFrBack()), nodep);
|
||||
return;
|
||||
} else if (!m_ftaskp) {
|
||||
|
|
|
|||
|
|
@ -117,7 +117,7 @@ void V3LinkLevel::timescaling(const ModVec& mods) {
|
|||
&& nodep->timescaleMatters()) {
|
||||
nodep->v3warn(TIMESCALEMOD,
|
||||
"Timescale missing on this module as other modules have "
|
||||
"it (IEEE 1800-2017 3.14.2.3)\n"
|
||||
"it (IEEE 1800-2023 3.14.2.3)\n"
|
||||
<< nodep->warnContextPrimary() << '\n'
|
||||
<< modTimedp->warnOther()
|
||||
<< "... Location of module with timescale\n"
|
||||
|
|
|
|||
|
|
@ -575,7 +575,7 @@ class LinkParseVisitor final : public VNVisitor {
|
|||
// Ok
|
||||
} else {
|
||||
nodep->v3error("Syntax error; foreach missing bracketed loop variable"
|
||||
" (IEEE 1800-2017 12.7.3)");
|
||||
" (IEEE 1800-2023 12.7.3)");
|
||||
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
|
||||
return;
|
||||
}
|
||||
|
|
@ -692,7 +692,7 @@ class LinkParseVisitor final : public VNVisitor {
|
|||
if (nodep->stmtsp()) {
|
||||
nodep->v3warn(GENUNNAMED,
|
||||
"Unnamed generate block "
|
||||
<< nodep->prettyNameQ() << " (IEEE 1800-2017 27.6)\n"
|
||||
<< nodep->prettyNameQ() << " (IEEE 1800-2023 27.6)\n"
|
||||
<< nodep->warnMore()
|
||||
<< "... Suggest assign a label with 'begin : gen_<label_name>'");
|
||||
}
|
||||
|
|
@ -771,7 +771,7 @@ class LinkParseVisitor final : public VNVisitor {
|
|||
}
|
||||
if (!VN_IS(scanp, NodeFTask)) {
|
||||
nodep->rhsp()->v3error(
|
||||
"'super.new' not first statement in new function (IEEE 1800-2017 8.15)\n"
|
||||
"'super.new' not first statement in new function (IEEE 1800-2023 8.15)\n"
|
||||
<< nodep->rhsp()->warnContextPrimary() << scanp->warnOther()
|
||||
<< "... Location of earlier statement\n"
|
||||
<< scanp->warnContextSecondary());
|
||||
|
|
@ -822,7 +822,7 @@ class LinkParseVisitor final : public VNVisitor {
|
|||
AstAlways* const alwaysp = VN_CAST(nodep->backp(), Always);
|
||||
if (alwaysp && alwaysp->keyword() == VAlwaysKwd::ALWAYS_COMB) {
|
||||
alwaysp->v3error("Event control statements not legal under always_comb "
|
||||
"(IEEE 1800-2017 9.2.2.2.2)\n"
|
||||
"(IEEE 1800-2023 9.2.2.2.2)\n"
|
||||
<< nodep->warnMore() << "... Suggest use a normal 'always'");
|
||||
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
|
||||
} else if (alwaysp && !alwaysp->sensesp()) {
|
||||
|
|
@ -882,7 +882,7 @@ class LinkParseVisitor final : public VNVisitor {
|
|||
if (m_defaultOutSkewp) {
|
||||
nodep->skewp(m_defaultOutSkewp->cloneTree(false));
|
||||
} else {
|
||||
// Default is 0 (IEEE 1800-2017 14.3)
|
||||
// Default is 0 (IEEE 1800-2023 14.3)
|
||||
nodep->skewp(new AstConst{nodep->fileline(), 0});
|
||||
}
|
||||
} else if (AstConst* const constp = VN_CAST(nodep->skewp(), Const)) {
|
||||
|
|
@ -895,7 +895,7 @@ class LinkParseVisitor final : public VNVisitor {
|
|||
if (m_defaultInSkewp) {
|
||||
nodep->skewp(m_defaultInSkewp->cloneTree(false));
|
||||
} else {
|
||||
// Default is 1step (IEEE 1800-2017 14.3)
|
||||
// Default is 1step (IEEE 1800-2023 14.3)
|
||||
nodep->skewp(new AstConst{nodep->fileline(), AstConst::OneStep{}});
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -116,7 +116,7 @@ class LinkResolveVisitor final : public VNVisitor {
|
|||
if (nodep->name() == "randomize" || nodep->name() == "srandom") {
|
||||
nodep->v3error(nodep->prettyNameQ()
|
||||
<< " is a predefined class method; redefinition not allowed"
|
||||
" (IEEE 1800-2017 18.6.3)");
|
||||
" (IEEE 1800-2023 18.6.3)");
|
||||
}
|
||||
nodep->classMethod(true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ void V3Number::v3errorEndFatal(const std::ostringstream& str) const
|
|||
|
||||
V3Number::V3Number(VerilogStringLiteral, AstNode* nodep, const string& str) {
|
||||
// Create a number using a verilog string as the value, thus 8 bits per character.
|
||||
if (str.empty()) { // IEEE 1800-2017 11.10.3 "" = "\000"
|
||||
if (str.empty()) { // IEEE 1800-2023 11.10.3 "" = "\000"
|
||||
init(nodep, 8);
|
||||
} else {
|
||||
init(nodep, std::max<int>(str.length() * 8, 1));
|
||||
|
|
@ -165,7 +165,7 @@ void V3Number::create(const char* sourcep) {
|
|||
|| std::atoi(widthn.c_str()) > v3Global.opt.maxNumWidth()) {
|
||||
// atoi might convert large number to negative, so can't tell which
|
||||
v3error("Unsupported: Width of number exceeds implementation limit: "
|
||||
<< sourcep << " (IEEE 1800-2017 6.9.1)");
|
||||
<< sourcep << " (IEEE 1800-2023 6.9.1)");
|
||||
width(v3Global.opt.maxNumWidth(), true);
|
||||
} else {
|
||||
width(std::atoi(widthn.c_str()), true);
|
||||
|
|
@ -209,7 +209,7 @@ void V3Number::create(const char* sourcep) {
|
|||
}
|
||||
if (userSized && m_data.m_autoExtend) {
|
||||
v3error("Syntax error: size cannot be provided with '0/'1/'x/'z: "
|
||||
<< sourcep << " (IEEE 1800-2017 5.7.1)");
|
||||
<< sourcep << " (IEEE 1800-2023 5.7.1)");
|
||||
}
|
||||
|
||||
int obit = 0; // Start at LSB
|
||||
|
|
@ -253,7 +253,7 @@ void V3Number::create(const char* sourcep) {
|
|||
<< ((!sized() && !warned++) ? (
|
||||
V3Error::warnMore() + "... As that number was unsized"
|
||||
+ " ('d...) it is limited to 32 bits"
|
||||
" (IEEE 1800-2017 5.7.1)\n"
|
||||
" (IEEE 1800-2023 5.7.1)\n"
|
||||
+ V3Error::warnMore() + "... Suggest adding a size to it.")
|
||||
: ""));
|
||||
while (*(cp + 1)) cp++; // Skip ahead so don't get multiple warnings
|
||||
|
|
@ -1554,7 +1554,7 @@ V3Number& V3Number::opAtoN(const V3Number& lhs, int base) {
|
|||
std::string str = lhs.toString(); // new instance to edit later
|
||||
if (base == AstAtoN::ATOREAL) return setDouble(std::atof(str.c_str()));
|
||||
|
||||
// IEEE 1800-2017 6.16.9 says '_' may exist.
|
||||
// IEEE 1800-2023 6.16.9 says '_' may exist.
|
||||
str.erase(std::remove(str.begin(), str.end(), '_'), str.end());
|
||||
|
||||
errno = 0;
|
||||
|
|
|
|||
|
|
@ -899,7 +899,7 @@ class ParamProcessor final {
|
|||
if (AstVar* const varp = VN_CAST(stmtp, Var)) {
|
||||
if (VN_IS(srcModpr, Class) && varp->isParam() && !varp->valuep()) {
|
||||
nodep->v3error("Class parameter without initial value is never given value"
|
||||
<< " (IEEE 1800-2017 6.20.1): " << varp->prettyNameQ());
|
||||
<< " (IEEE 1800-2023 6.20.1): " << varp->prettyNameQ());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1164,7 +1164,7 @@ class ParamVisitor final : public VNVisitor {
|
|||
if (nodep->isParam()) {
|
||||
if (!nodep->valuep() && !VN_IS(m_modp, Class)) {
|
||||
nodep->v3error("Parameter without initial value is never given value"
|
||||
<< " (IEEE 1800-2017 6.20.1): " << nodep->prettyNameQ());
|
||||
<< " (IEEE 1800-2023 6.20.1): " << nodep->prettyNameQ());
|
||||
} else {
|
||||
V3Const::constifyParamsEdit(nodep); // The variable, not just the var->init()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -636,7 +636,7 @@ void V3ParseImp::tokenPipelineSym() {
|
|||
if (!warned++) {
|
||||
yylval.fl->v3warn(PKGNODECL, "Package/class '" + *yylval.strp
|
||||
+ "' not found, and needs to be "
|
||||
"predeclared (IEEE 1800-2017 26.3)");
|
||||
"predeclared (IEEE 1800-2023 26.3)");
|
||||
}
|
||||
}
|
||||
} else if (token == yaID__LEX) {
|
||||
|
|
|
|||
|
|
@ -331,7 +331,7 @@ void V3PreProcImp::define(FileLine* fl, const string& name, const string& value,
|
|||
UINFO(4, "DEFINE '" << name << "' as '" << value << "' params '" << params << "'" << endl);
|
||||
if (!V3LanguageWords::isKeyword("`"s + name).empty()) {
|
||||
fl->v3error("Attempting to define built-in directive: '`" << name
|
||||
<< "' (IEEE 1800-2017 22.5.1)");
|
||||
<< "' (IEEE 1800-2023 22.5.1)");
|
||||
} else {
|
||||
if (defExists(name)) {
|
||||
if (!(defValue(name) == value
|
||||
|
|
|
|||
|
|
@ -401,7 +401,7 @@ class RandomizeVisitor final : public VNVisitor {
|
|||
ifsp = newifp;
|
||||
}
|
||||
AstDisplay* dispp = new AstDisplay{
|
||||
fl, VDisplayType::DT_ERROR, "All randcase items had 0 weights (IEEE 1800-2017 18.16)",
|
||||
fl, VDisplayType::DT_ERROR, "All randcase items had 0 weights (IEEE 1800-2023 18.16)",
|
||||
nullptr, nullptr};
|
||||
UASSERT_OBJ(m_modp, nodep, "randcase not under module");
|
||||
dispp->fmtp()->timeunit(m_modp->timeunit());
|
||||
|
|
|
|||
|
|
@ -503,13 +503,13 @@ private:
|
|||
}
|
||||
if (nodep->dpiImport()) {
|
||||
if (m_params) {
|
||||
nodep->v3error("Constant function may not be DPI import (IEEE 1800-2017 13.4.3)");
|
||||
nodep->v3error("Constant function may not be DPI import (IEEE 1800-2023 13.4.3)");
|
||||
}
|
||||
clearOptimizable(nodep, "DPI import functions aren't simulatable");
|
||||
}
|
||||
if (nodep->underGenerate()) {
|
||||
nodep->v3error(
|
||||
"Constant function may not be declared under generate (IEEE 1800-2017 13.4.3)");
|
||||
"Constant function may not be declared under generate (IEEE 1800-2023 13.4.3)");
|
||||
clearOptimizable(nodep, "Constant function called under generate");
|
||||
}
|
||||
checkNodeInfo(nodep);
|
||||
|
|
|
|||
|
|
@ -1144,7 +1144,7 @@ class TaskVisitor final : public VNVisitor {
|
|||
}
|
||||
if (bdtypep->isDpiLogicVec()) {
|
||||
portp->v3error("DPI function may not return a 4-state type "
|
||||
"other than a single 'logic' (IEEE 1800-2017 35.5.5)");
|
||||
"other than a single 'logic' (IEEE 1800-2023 35.5.5)");
|
||||
}
|
||||
}
|
||||
} else if (nodep->taskPublic()) {
|
||||
|
|
@ -1460,7 +1460,7 @@ class TaskVisitor final : public VNVisitor {
|
|||
if (nodep->taskp()->isFunction()) {
|
||||
nodep->v3warn(
|
||||
IGNOREDRETURN,
|
||||
"Ignoring return value of non-void function (IEEE 1800-2017 13.4.1)");
|
||||
"Ignoring return value of non-void function (IEEE 1800-2023 13.4.1)");
|
||||
}
|
||||
nodep->unlinkFrBack();
|
||||
VL_DO_DANGLING(nodep->deleteTree(), nodep);
|
||||
|
|
|
|||
|
|
@ -380,7 +380,7 @@ class UndrivenVisitor final : public VNVisitorConst {
|
|||
&& !nodep->varp()->isDeclTyped() //
|
||||
&& !nodep->varp()->isClassMember() && !nodep->varp()->isFuncLocal()) {
|
||||
nodep->v3warn(PROCASSWIRE, "Procedural assignment to wire, perhaps intended var"
|
||||
<< " (IEEE 1800-2017 6.5): "
|
||||
<< " (IEEE 1800-2023 6.5): "
|
||||
<< nodep->prettyNameQ());
|
||||
}
|
||||
if (m_inContAssign && !nodep->varp()->varType().isContAssignable()
|
||||
|
|
@ -412,7 +412,7 @@ class UndrivenVisitor final : public VNVisitorConst {
|
|||
nodep->v3warn(
|
||||
MULTIDRIVEN,
|
||||
"Variable written to in always_comb also written by other process"
|
||||
<< " (IEEE 1800-2017 9.2.2.2): " << nodep->prettyNameQ() << '\n'
|
||||
<< " (IEEE 1800-2023 9.2.2.2): " << nodep->prettyNameQ() << '\n'
|
||||
<< nodep->warnOther() << '\n'
|
||||
<< nodep->warnContextPrimary() << '\n'
|
||||
<< entryp->getNodep()->warnOther()
|
||||
|
|
@ -422,7 +422,7 @@ class UndrivenVisitor final : public VNVisitorConst {
|
|||
if (!m_alwaysCombp && entryp->isDrivenAlwaysCombWhole()) {
|
||||
nodep->v3warn(MULTIDRIVEN,
|
||||
"Variable also written to in always_comb"
|
||||
<< " (IEEE 1800-2017 9.2.2.2): " << nodep->prettyNameQ()
|
||||
<< " (IEEE 1800-2023 9.2.2.2): " << nodep->prettyNameQ()
|
||||
<< '\n'
|
||||
<< nodep->warnOther() << '\n'
|
||||
<< nodep->warnContextPrimary() << '\n'
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ class UnrollVisitor final : public VNVisitor {
|
|||
if (VN_IS(nodep, GenFor) && !m_forVarp->isGenVar()) {
|
||||
nodep->v3error("Non-genvar used in generate for: " << m_forVarp->prettyNameQ());
|
||||
} else if (!VN_IS(nodep, GenFor) && m_forVarp->isGenVar()) {
|
||||
nodep->v3error("Genvar not legal in non-generate for (IEEE 1800-2017 27.4): "
|
||||
nodep->v3error("Genvar not legal in non-generate for (IEEE 1800-2023 27.4): "
|
||||
<< m_forVarp->prettyNameQ() << '\n'
|
||||
<< nodep->warnMore()
|
||||
<< "... Suggest move for loop upwards to generate-level scope.");
|
||||
|
|
|
|||
|
|
@ -635,13 +635,13 @@ class WidthVisitor final : public VNVisitor {
|
|||
}
|
||||
void visit(AstDelay* nodep) override {
|
||||
if (VN_IS(m_procedurep, Final)) {
|
||||
nodep->v3error("Delays are not legal in final blocks (IEEE 1800-2017 9.2.3)");
|
||||
nodep->v3error("Delays are not legal in final blocks (IEEE 1800-2023 9.2.3)");
|
||||
VL_DO_DANGLING(pushDeletep(nodep->unlinkFrBack()), nodep);
|
||||
return;
|
||||
}
|
||||
if (VN_IS(m_ftaskp, Func)) {
|
||||
nodep->v3error("Delays are not legal in functions. Suggest use a task "
|
||||
"(IEEE 1800-2017 13.4.4)");
|
||||
"(IEEE 1800-2023 13.4.4)");
|
||||
VL_DO_DANGLING(pushDeletep(nodep->unlinkFrBack()), nodep);
|
||||
return;
|
||||
}
|
||||
|
|
@ -664,7 +664,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
void visit(AstFork* nodep) override {
|
||||
if (VN_IS(m_ftaskp, Func) && !nodep->joinType().joinNone()) {
|
||||
nodep->v3error("Only fork .. join_none is legal in functions. "
|
||||
"(IEEE 1800-2017 13.4.4)");
|
||||
"(IEEE 1800-2023 13.4.4)");
|
||||
VL_DO_DANGLING(pushDeletep(nodep->unlinkFrBack()), nodep);
|
||||
return;
|
||||
}
|
||||
|
|
@ -783,7 +783,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
&& !VN_IS(nodep->backp(), Concat)) { // Concat Visitor will clean it up.
|
||||
nodep->v3warn(ZEROREPL,
|
||||
"Replication value of 0 is only legal under a concatenation"
|
||||
" (IEEE 1800-2017 11.4.12.1)");
|
||||
" (IEEE 1800-2023 11.4.12.1)");
|
||||
times = 1; // Set to 1, so we can continue looking for errors
|
||||
}
|
||||
nodep->dtypeSetLogicUnsized((nodep->srcp()->width() * times),
|
||||
|
|
@ -1087,7 +1087,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
if (!basicp
|
||||
|| (basicp->keyword() != VBasicDTypeKwd::STRING
|
||||
&& !basicp->keyword().isIntNumeric())) {
|
||||
nodep->v3error("Wildcard index must be integral (IEEE 1800-2017 7.8.1)");
|
||||
nodep->v3error("Wildcard index must be integral (IEEE 1800-2023 7.8.1)");
|
||||
}
|
||||
iterateCheckTyped(nodep, "Wildcard associative select", nodep->bitp(),
|
||||
adtypep->findStringDType(), BOTH);
|
||||
|
|
@ -1243,10 +1243,10 @@ class WidthVisitor final : public VNVisitor {
|
|||
V3Const::constifyParamsEdit(nodep->ticksp()); // ticksp may change
|
||||
const AstConst* const constp = VN_CAST(nodep->ticksp(), Const);
|
||||
if (!constp) {
|
||||
nodep->v3error("$past tick value must be constant (IEEE 1800-2017 16.9.3)");
|
||||
nodep->v3error("$past tick value must be constant (IEEE 1800-2023 16.9.3)");
|
||||
nodep->ticksp()->unlinkFrBack()->deleteTree();
|
||||
} else if (constp->toSInt() < 1) {
|
||||
constp->v3error("$past tick value must be >= 1 (IEEE 1800-2017 16.9.3)");
|
||||
constp->v3error("$past tick value must be >= 1 (IEEE 1800-2023 16.9.3)");
|
||||
nodep->ticksp()->unlinkFrBack()->deleteTree();
|
||||
} else {
|
||||
if (constp->toSInt() > 10) {
|
||||
|
|
@ -1455,7 +1455,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
void visit(AstEventControl* nodep) override {
|
||||
if (VN_IS(m_ftaskp, Func)) {
|
||||
nodep->v3error("Event controls are not legal in functions. Suggest use a task "
|
||||
"(IEEE 1800-2017 13.4.4)");
|
||||
"(IEEE 1800-2023 13.4.4)");
|
||||
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
|
||||
return;
|
||||
}
|
||||
|
|
@ -2293,11 +2293,11 @@ class WidthVisitor final : public VNVisitor {
|
|||
}
|
||||
if (!itemp->valuep()) {
|
||||
if (num.isEqZero() && itemp != nodep->itemsp()) {
|
||||
itemp->v3error("Enum value illegally wrapped around (IEEE 1800-2017 6.19)");
|
||||
itemp->v3error("Enum value illegally wrapped around (IEEE 1800-2023 6.19)");
|
||||
}
|
||||
if (num.isFourState()) {
|
||||
itemp->v3error("Enum value that is unassigned cannot follow value with X/Zs "
|
||||
"(IEEE 1800-2017 6.19)");
|
||||
"(IEEE 1800-2023 6.19)");
|
||||
}
|
||||
if (!nodep->dtypep()->basicp()
|
||||
&& !nodep->dtypep()->basicp()->keyword().isIntNumeric()) {
|
||||
|
|
@ -2311,7 +2311,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
if (constp->num().isFourState() && nodep->dtypep()->basicp()
|
||||
&& !nodep->dtypep()->basicp()->isFourstate()) {
|
||||
itemp->v3error("Enum value with X/Zs cannot be assigned to non-fourstate type "
|
||||
"(IEEE 1800-2017 6.19)");
|
||||
"(IEEE 1800-2023 6.19)");
|
||||
}
|
||||
num.opAssign(constp->num());
|
||||
// Look for duplicates
|
||||
|
|
@ -2340,7 +2340,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
bool warnOn = true;
|
||||
if (const AstConst* const constp = VN_CAST(nodep->valuep(), Const)) {
|
||||
if (static_cast<int>(constp->num().mostSetBitP1()) > nodep->width()) {
|
||||
constp->v3error("Enum value exceeds width of enum type (IEEE 1800-2017 6.19)");
|
||||
constp->v3error("Enum value exceeds width of enum type (IEEE 1800-2023 6.19)");
|
||||
warnOn = false; // Prevent normal WIDTHTRUNC
|
||||
}
|
||||
}
|
||||
|
|
@ -2564,8 +2564,8 @@ class WidthVisitor final : public VNVisitor {
|
|||
inewp->dtypeSetBit();
|
||||
inewp->didWidth(true);
|
||||
} else if (VN_IS(itemDtp, AssocArrayDType)) {
|
||||
nodep->v3error("Inside operator not specified on associative arrays (IEEE "
|
||||
"1800-2017 11.4.13)");
|
||||
nodep->v3error("Inside operator not specified on associative arrays "
|
||||
"(IEEE 1800-2023 11.4.13)");
|
||||
continue;
|
||||
} else {
|
||||
inewp = AstEqWild::newTyped(itemp->fileline(), nodep->exprp()->cloneTreePure(true),
|
||||
|
|
@ -2615,10 +2615,10 @@ class WidthVisitor final : public VNVisitor {
|
|||
&& !v3Global.opt.structsPacked())
|
||||
itemp->v3error("Unpacked data type "
|
||||
<< dtp->prettyDTypeNameQ()
|
||||
<< " in packed struct/union (IEEE 1800-2017 7.2.1)");
|
||||
<< " in packed struct/union (IEEE 1800-2023 7.2.1)");
|
||||
if ((VN_IS(nodep, UnionDType) || nodep->packed()) && itemp->valuep()) {
|
||||
itemp->v3error("Initial values not allowed in packed struct/union"
|
||||
" (IEEE 1800-2017 7.2.1)");
|
||||
" (IEEE 1800-2023 7.2.1)");
|
||||
pushDeletep(itemp->valuep()->unlinkFrBack());
|
||||
} else if (itemp->valuep()) {
|
||||
itemp->valuep()->v3warn(E_UNSUPPORTED,
|
||||
|
|
@ -3877,7 +3877,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
if (classp->isVirtual() || classp->isInterfaceClass()) {
|
||||
nodep->v3error("Illegal to call 'new' using an abstract virtual class "
|
||||
+ AstNode::prettyNameQ(classp->origName())
|
||||
+ " (IEEE 1800-2017 8.21)");
|
||||
+ " (IEEE 1800-2023 8.21)");
|
||||
}
|
||||
} else { // super.new case
|
||||
// in this case class and taskp() should be properly linked in V3LinkDot.cpp during
|
||||
|
|
@ -4840,7 +4840,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
if (auto* const controlp = nodep->timingControlp()) {
|
||||
if (VN_IS(m_ftaskp, Func)) {
|
||||
controlp->v3error("Timing controls are not legal in functions. Suggest use a task "
|
||||
"(IEEE 1800-2017 13.4.4)");
|
||||
"(IEEE 1800-2023 13.4.4)");
|
||||
VL_DO_DANGLING(controlp->unlinkFrBackWithNext()->deleteTree(), controlp);
|
||||
} else if (nodep->fileline()->timingOn() && v3Global.opt.timing().isSetTrue()) {
|
||||
iterateNull(controlp);
|
||||
|
|
@ -5070,7 +5070,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
if (!m_paramsOnly) {
|
||||
V3Const::constifyParamsEdit(nodep->fmtp()); // fmtp may change
|
||||
string text = nodep->fmtp()->text();
|
||||
if (text.empty()) text = "Elaboration system task message (IEEE 1800-2017 20.11)";
|
||||
if (text.empty()) text = "Elaboration system task message (IEEE 1800-2023 20.11)";
|
||||
switch (nodep->displayType()) {
|
||||
case VDisplayType::DT_INFO: nodep->v3warn(USERINFO, text); break;
|
||||
case VDisplayType::DT_ERROR: nodep->v3warn(USERERROR, text); break;
|
||||
|
|
@ -5208,7 +5208,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
if (!adtypep->keyDTypep()->skipRefp()->basicp()
|
||||
|| !adtypep->keyDTypep()->skipRefp()->basicp()->keyword().isIntNumeric()) {
|
||||
nodep->memp()->v3error(nodep->verilogKwd()
|
||||
<< " address/key must be integral (IEEE 1800-2017 21.4.1)");
|
||||
<< " address/key must be integral (IEEE 1800-2023 21.4.1)");
|
||||
}
|
||||
} else if (const AstUnpackArrayDType* const adtypep
|
||||
= VN_CAST(nodep->memp()->dtypep()->skipRefp(), UnpackArrayDType)) {
|
||||
|
|
@ -5333,7 +5333,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
<< " requires " << modwidth << " or " << modwidth * numInsts
|
||||
<< " bits, but connection's "
|
||||
<< nodep->exprp()->prettyTypeName() << " generates " << conwidth
|
||||
<< " bits. (IEEE 1800-2017 23.3.3)");
|
||||
<< " bits. (IEEE 1800-2023 23.3.3)");
|
||||
subDTypep = conDTypep; // = same expr dtype
|
||||
}
|
||||
userIterateAndNext(nodep->exprp(), WidthVP{subDTypep, FINAL}.p());
|
||||
|
|
@ -5398,7 +5398,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
<< (modArrayp ? "" : " not") << " an array,"
|
||||
<< " and expression which is"
|
||||
<< (exprArrayp ? "" : " not")
|
||||
<< " an array. (IEEE 1800-2017 7.6)");
|
||||
<< " an array. (IEEE 1800-2023 7.6)");
|
||||
UINFO(1, " Related lo: " << modDTypep << endl);
|
||||
UINFO(1, " Related hi: " << conDTypep << endl);
|
||||
}
|
||||
|
|
@ -5460,10 +5460,10 @@ class WidthVisitor final : public VNVisitor {
|
|||
}
|
||||
if (nodep->classMethod() && nodep->name() == "rand_mode") {
|
||||
nodep->v3error("The 'rand_mode' method is built-in and cannot be overridden"
|
||||
" (IEEE 1800-2017 18.8)");
|
||||
" (IEEE 1800-2023 18.8)");
|
||||
} else if (nodep->classMethod() && nodep->name() == "constraint_mode") {
|
||||
nodep->v3error("The 'constraint_mode' method is built-in and cannot be overridden"
|
||||
" (IEEE 1800-2017 18.9)");
|
||||
" (IEEE 1800-2023 18.9)");
|
||||
}
|
||||
// Function hasn't been widthed, so make it so.
|
||||
// Would use user1 etc, but V3Width called from too many places to spend a user
|
||||
|
|
@ -5812,10 +5812,10 @@ class WidthVisitor final : public VNVisitor {
|
|||
AstNodeDType* const sensDtp = nodep->sensp()->dtypep()->skipRefp();
|
||||
if (sensDtp->isDouble()) {
|
||||
nodep->sensp()->v3error(
|
||||
"Edge event control not legal on real type (IEEE 1800-2017 6.12.1)");
|
||||
"Edge event control not legal on real type (IEEE 1800-2023 6.12.1)");
|
||||
} else if (sensDtp->basicp() && !sensDtp->basicp()->keyword().isIntNumeric()) {
|
||||
nodep->sensp()->v3error("Edge event control not legal on non-integral type "
|
||||
"(IEEE 1800-2017 9.4.2)");
|
||||
"(IEEE 1800-2023 9.4.2)");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5829,7 +5829,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
void visit(AstWait* nodep) override {
|
||||
if (VN_IS(m_ftaskp, Func)) {
|
||||
nodep->v3error("Wait statements are not legal in functions. Suggest use a task "
|
||||
"(IEEE 1800-2017 13.4.4)");
|
||||
"(IEEE 1800-2023 13.4.4)");
|
||||
VL_DO_DANGLING(nodep->unlinkFrBack()->deleteTree(), nodep);
|
||||
return;
|
||||
}
|
||||
|
|
@ -6631,7 +6631,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
// Check using assignment-like context rules
|
||||
// if (debug()) nodep->dumpTree("- checkass: ");
|
||||
UASSERT_OBJ(stage == FINAL, nodep, "Bad width call");
|
||||
// Create unpacked byte from string perl IEEE 1800-2017 5.9
|
||||
// Create unpacked byte from string perl IEEE 1800-2023 5.9
|
||||
if (AstConst* constp = VN_CAST(rhsp, Const)) {
|
||||
if (const AstUnpackArrayDType* const arrayp
|
||||
= VN_CAST(lhsDTypep->skipRefp(), UnpackArrayDType)) {
|
||||
|
|
@ -6776,7 +6776,7 @@ class WidthVisitor final : public VNVisitor {
|
|||
"Implicit conversion to enum "
|
||||
<< expDTypep->prettyDTypeNameQ() << " from "
|
||||
<< underp->dtypep()->prettyDTypeNameQ()
|
||||
<< " (IEEE 1800-2017 6.19.3)\n"
|
||||
<< " (IEEE 1800-2023 6.19.3)\n"
|
||||
<< nodep->warnMore()
|
||||
<< "... Suggest use enum's mnemonic, or static cast");
|
||||
if (debug()) nodep->backp()->dumpTree("- back: ");
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ private:
|
|||
UINFO(9, "defclass " << defClassp << endl);
|
||||
nodep->v3warn(ENCAPSULATED, nodep->prettyNameQ()
|
||||
<< " is hidden as " << how
|
||||
<< " within this context (IEEE 1800-2017 8.18)\n"
|
||||
<< " within this context (IEEE 1800-2023 8.18)\n"
|
||||
<< nodep->warnContextPrimary() << "\n"
|
||||
<< nodep->warnOther()
|
||||
<< "... Location of definition\n"
|
||||
|
|
@ -175,7 +175,7 @@ private:
|
|||
if (nodep->classMethod() && nodep->pureVirtual() && classp && !classp->isInterfaceClass()
|
||||
&& !classp->isVirtual()) {
|
||||
nodep->v3error(
|
||||
"Illegal to have 'pure virtual' in non-virtual class (IEEE 1800-2017 8.21)");
|
||||
"Illegal to have 'pure virtual' in non-virtual class (IEEE 1800-2023 8.21)");
|
||||
}
|
||||
}
|
||||
void visit(AstNodeVarRef* nodep) override {
|
||||
|
|
|
|||
|
|
@ -5876,7 +5876,7 @@ assertOrAssume<fl>:
|
|||
|
||||
final_zero: // IEEE: part of deferred_immediate_assertion_statement
|
||||
'#' yaINTNUM
|
||||
{ if ($2->isNeqZero()) { $<fl>2->v3error("Deferred assertions must use '#0' (IEEE 1800-2017 16.4)"); } }
|
||||
{ if ($2->isNeqZero()) { $<fl>2->v3error("Deferred assertions must use '#0' (IEEE 1800-2023 16.4)"); } }
|
||||
// // 1800-2012:
|
||||
| yFINAL { }
|
||||
;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
-Info: t/t_assert_comp_bad.v:10:7: Elaboration system task message (IEEE 1800-2017 20.11)
|
||||
-Info: t/t_assert_comp_bad.v:10:7: Elaboration system task message (IEEE 1800-2023 20.11)
|
||||
: ... note: In instance 't'
|
||||
10 | $info;
|
||||
| ^~~~~
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
: ... note: In instance 't'
|
||||
11 | $info("User elaboration-time info");
|
||||
| ^~~~~
|
||||
%Warning-USERWARN: t/t_assert_comp_bad.v:12:7: Elaboration system task message (IEEE 1800-2017 20.11)
|
||||
%Warning-USERWARN: t/t_assert_comp_bad.v:12:7: Elaboration system task message (IEEE 1800-2023 20.11)
|
||||
: ... note: In instance 't'
|
||||
12 | $warning;
|
||||
| ^~~~~~~~
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
: ... note: In instance 't'
|
||||
14 | $warning(1);
|
||||
| ^~~~~~~~
|
||||
%Warning-USERERROR: t/t_assert_comp_bad.v:15:7: Elaboration system task message (IEEE 1800-2017 20.11)
|
||||
%Warning-USERERROR: t/t_assert_comp_bad.v:15:7: Elaboration system task message (IEEE 1800-2023 20.11)
|
||||
: ... note: In instance 't'
|
||||
15 | $error;
|
||||
| ^~~~~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_assert_imm_nz_bad.v:13:26: Deferred assertions must use '#0' (IEEE 1800-2017 16.4)
|
||||
%Error: t/t_assert_imm_nz_bad.v:13:26: Deferred assertions must use '#0' (IEEE 1800-2023 16.4)
|
||||
13 | labeled_imas: assert #1 (clk);
|
||||
| ^
|
||||
%Error: Exiting due to
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
%Error: t/t_assert_procedural_clk_bad.v:21:13: Unsupported: Procedural concurrent assertion with clocking event inside always (IEEE 1800-2017 16.14.6)
|
||||
%Error: t/t_assert_procedural_clk_bad.v:21:13: Unsupported: Procedural concurrent assertion with clocking event inside always (IEEE 1800-2023 16.14.6)
|
||||
: ... note: In instance 't'
|
||||
21 | assume property (@(posedge clk) cyc == 9);
|
||||
| ^~~~~~
|
||||
%Error: t/t_assert_procedural_clk_bad.v:22:13: Unsupported: Procedural concurrent assertion with clocking event inside always (IEEE 1800-2017 16.14.6)
|
||||
%Error: t/t_assert_procedural_clk_bad.v:22:13: Unsupported: Procedural concurrent assertion with clocking event inside always (IEEE 1800-2023 16.14.6)
|
||||
: ... note: In instance 't'
|
||||
22 | assume property (@(negedge clk) cyc == 9);
|
||||
| ^~~~~~
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@
|
|||
: ... note: In instance 't'
|
||||
41 | a.find_last_index;
|
||||
| ^~~~~~~~~~~~~~~
|
||||
%Error: t/t_assoc_wildcard_bad.v:43:8: Wildcard index must be integral (IEEE 1800-2017 7.8.1)
|
||||
%Error: t/t_assoc_wildcard_bad.v:43:8: Wildcard index must be integral (IEEE 1800-2023 7.8.1)
|
||||
: ... note: In instance 't'
|
||||
43 | a[x] = "bad";
|
||||
| ^
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
%Error: t/t_class_builtin_bad.v:8:17: The 'rand_mode' method is built-in and cannot be overridden (IEEE 1800-2017 18.8)
|
||||
%Error: t/t_class_builtin_bad.v:8:17: The 'rand_mode' method is built-in and cannot be overridden (IEEE 1800-2023 18.8)
|
||||
: ... note: In instance 't'
|
||||
8 | function int rand_mode(bit onoff);
|
||||
| ^~~~~~~~~
|
||||
%Error: t/t_class_builtin_bad.v:11:17: The 'constraint_mode' method is built-in and cannot be overridden (IEEE 1800-2017 18.9)
|
||||
%Error: t/t_class_builtin_bad.v:11:17: The 'constraint_mode' method is built-in and cannot be overridden (IEEE 1800-2023 18.9)
|
||||
: ... note: In instance 't'
|
||||
11 | function int constraint_mode(bit onoff);
|
||||
| ^~~~~~~~~~~~~~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_class_extends_bad.v:13:26: Multiple inheritance illegal on non-interface classes (IEEE 1800-2017 8.13)
|
||||
%Error: t/t_class_extends_bad.v:13:26: Multiple inheritance illegal on non-interface classes (IEEE 1800-2023 8.13)
|
||||
13 | class Cls extends Base1, Base2;
|
||||
| ^~~~~
|
||||
%Error: Exiting due to
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error-ENCAPSULATED: t/t_class_local_bad.v:71:20: 'm_loc' is hidden as 'local' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:71:20: 'm_loc' is hidden as 'local' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
71 | bad(); if (c.m_loc != 2) $stop;
|
||||
| ^~~~~
|
||||
|
|
@ -6,98 +6,98 @@
|
|||
15 | local int m_loc = 2;
|
||||
| ^~~~~
|
||||
... For error description see https://verilator.org/warn/ENCAPSULATED?v=latest
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:72:20: 'm_prot' is hidden as 'protected' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:72:20: 'm_prot' is hidden as 'protected' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
72 | bad(); if (c.m_prot != 20) $stop;
|
||||
| ^~~~~~
|
||||
t/t_class_local_bad.v:72:20: ... Location of definition
|
||||
16 | protected int m_prot = 3;
|
||||
| ^~~~~~
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:74:20: 'm_loc' is hidden as 'local' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:74:20: 'm_loc' is hidden as 'local' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
74 | bad(); if (e.m_loc != 2) $stop;
|
||||
| ^~~~~
|
||||
t/t_class_local_bad.v:74:20: ... Location of definition
|
||||
15 | local int m_loc = 2;
|
||||
| ^~~~~
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:75:20: 'm_prot' is hidden as 'protected' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:75:20: 'm_prot' is hidden as 'protected' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
75 | bad(); if (e.m_prot != 20) $stop;
|
||||
| ^~~~~~
|
||||
t/t_class_local_bad.v:75:20: ... Location of definition
|
||||
16 | protected int m_prot = 3;
|
||||
| ^~~~~~
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:77:16: 'f_loc' is hidden as 'local' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:77:16: 'f_loc' is hidden as 'local' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
77 | bad(); c.f_loc();
|
||||
| ^~~~~
|
||||
t/t_class_local_bad.v:77:16: ... Location of definition
|
||||
18 | local task f_loc; endtask
|
||||
| ^~~~~
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:78:16: 'f_prot' is hidden as 'protected' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:78:16: 'f_prot' is hidden as 'protected' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
78 | bad(); c.f_prot();
|
||||
| ^~~~~~
|
||||
t/t_class_local_bad.v:78:16: ... Location of definition
|
||||
19 | protected task f_prot; endtask
|
||||
| ^~~~~~
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:80:16: 's_loc' is hidden as 'local' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:80:16: 's_loc' is hidden as 'local' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
80 | bad(); c.s_loc();
|
||||
| ^~~~~
|
||||
t/t_class_local_bad.v:80:16: ... Location of definition
|
||||
21 | static local task s_loc; endtask
|
||||
| ^~~~~
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:81:16: 's_prot' is hidden as 'protected' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:81:16: 's_prot' is hidden as 'protected' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
81 | bad(); c.s_prot();
|
||||
| ^~~~~~
|
||||
t/t_class_local_bad.v:81:16: ... Location of definition
|
||||
22 | static protected task s_prot; endtask
|
||||
| ^~~~~~
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:83:19: 's_loc' is hidden as 'local' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:83:19: 's_loc' is hidden as 'local' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
83 | bad(); Cls::s_loc();
|
||||
| ^~~~~
|
||||
t/t_class_local_bad.v:83:19: ... Location of definition
|
||||
21 | static local task s_loc; endtask
|
||||
| ^~~~~
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:84:19: 's_prot' is hidden as 'protected' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:84:19: 's_prot' is hidden as 'protected' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
84 | bad(); Cls::s_prot();
|
||||
| ^~~~~~
|
||||
t/t_class_local_bad.v:84:19: ... Location of definition
|
||||
22 | static protected task s_prot; endtask
|
||||
| ^~~~~~
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:47:18: 'm_loc' is hidden as 'local' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:47:18: 'm_loc' is hidden as 'local' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
47 | bad(); if (m_loc != 10) $stop;
|
||||
| ^~~~~
|
||||
t/t_class_local_bad.v:47:18: ... Location of definition
|
||||
15 | local int m_loc = 2;
|
||||
| ^~~~~
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:50:14: 'f_loc' is hidden as 'local' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:50:14: 'f_loc' is hidden as 'local' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
50 | bad(); f_loc();
|
||||
| ^~~~~
|
||||
t/t_class_local_bad.v:50:14: ... Location of definition
|
||||
18 | local task f_loc; endtask
|
||||
| ^~~~~
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:53:16: 'f_loc' is hidden as 'local' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:53:16: 'f_loc' is hidden as 'local' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
53 | bad(); o.f_loc();
|
||||
| ^~~~~
|
||||
t/t_class_local_bad.v:53:16: ... Location of definition
|
||||
18 | local task f_loc; endtask
|
||||
| ^~~~~
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:56:14: 's_loc' is hidden as 'local' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:56:14: 's_loc' is hidden as 'local' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
56 | bad(); s_loc();
|
||||
| ^~~~~
|
||||
t/t_class_local_bad.v:56:14: ... Location of definition
|
||||
21 | static local task s_loc; endtask
|
||||
| ^~~~~
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:59:19: 's_loc' is hidden as 'local' within this context (IEEE 1800-2017 8.18)
|
||||
%Error-ENCAPSULATED: t/t_class_local_bad.v:59:19: 's_loc' is hidden as 'local' within this context (IEEE 1800-2023 8.18)
|
||||
: ... note: In instance 't'
|
||||
59 | bad(); Cls::s_loc();
|
||||
| ^~~~~
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ class u_cache#(type KEY_T=int, type DATA_T=int) extends u_object;
|
|||
extern function new(string name="u_cache", size_t max_size = 256);
|
||||
endclass
|
||||
|
||||
// #() not required below, see IEEE 1800-2017 8.25.1
|
||||
// #() not required below, see IEEE 1800-2023 8.25.1
|
||||
function u_cache::new(string name="u_cache", u_cache::size_t max_size = 256);
|
||||
super.new(name);
|
||||
this.m_max_size = max_size;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_class_param_bad_paren.v:28:11: Reference to parameterized class without #() (IEEE 1800-2017 8.25.1)
|
||||
%Error: t/t_class_param_bad_paren.v:28:11: Reference to parameterized class without #() (IEEE 1800-2023 8.25.1)
|
||||
: ... Suggest use 'Cls#()'
|
||||
28 | if (Cls::OTHER != 12) $stop;
|
||||
| ^~~
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
: ... note: In instance 't'
|
||||
20 | Converter#(bit) conv2 = conv1;
|
||||
| ^~~~~
|
||||
%Error-ENUMVALUE: t/t_class_param_enum_bad.v:21:19: Implicit conversion to enum 'ENUMDTYPE '$unit::enum_t'' from 'logic[31:0]' (IEEE 1800-2017 6.19.3)
|
||||
%Error-ENUMVALUE: t/t_class_param_enum_bad.v:21:19: Implicit conversion to enum 'ENUMDTYPE '$unit::enum_t'' from 'logic[31:0]' (IEEE 1800-2023 6.19.3)
|
||||
: ... note: In instance 't'
|
||||
: ... Suggest use enum's mnemonic, or static cast
|
||||
21 | conv1.toInt(0);
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ endclass
|
|||
module t;
|
||||
initial begin
|
||||
Converter#(enum_t) conv1 = new;
|
||||
// enum types does not match with other types (IEEE 1800-2017 6.22.1 and 6.22.4)
|
||||
// enum types does not match with other types (IEEE 1800-2023 6.22.1 and 6.22.4)
|
||||
// The assignment and the function call should throw an error.
|
||||
Converter#(bit) conv2 = conv1;
|
||||
conv1.toInt(0);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_class_param_noinit_bad.v:13:7: Class parameter without initial value is never given value (IEEE 1800-2017 6.20.1): 'B'
|
||||
%Error: t/t_class_param_noinit_bad.v:13:7: Class parameter without initial value is never given value (IEEE 1800-2023 6.20.1): 'B'
|
||||
: ... note: In instance 't'
|
||||
13 | Cls #(1) c;
|
||||
| ^~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_class_param_subtype.v:32:5: Reference to parameterized class without #() (IEEE 1800-2017 8.25.1)
|
||||
%Error: t/t_class_param_subtype.v:32:5: Reference to parameterized class without #() (IEEE 1800-2023 8.25.1)
|
||||
: ... Suggest use 'CParam#()'
|
||||
32 | CParam::type_t val_0 = 100;
|
||||
| ^~~~~~
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
%Error: t/t_class_param_virtual_bad.v:13:11: Illegal to call 'new' using an abstract virtual class 'VBase' (IEEE 1800-2017 8.21)
|
||||
%Error: t/t_class_param_virtual_bad.v:13:11: Illegal to call 'new' using an abstract virtual class 'VBase' (IEEE 1800-2023 8.21)
|
||||
: ... note: In instance 't'
|
||||
13 | t = new;
|
||||
| ^~~
|
||||
%Error: t/t_class_param_virtual_bad.v:23:28: Illegal to call 'new' using an abstract virtual class 'ClsVirt' (IEEE 1800-2017 8.21)
|
||||
%Error: t/t_class_param_virtual_bad.v:23:28: Illegal to call 'new' using an abstract virtual class 'ClsVirt' (IEEE 1800-2023 8.21)
|
||||
: ... note: In instance 't'
|
||||
23 | ClsVirt#(VBase) cv = new;
|
||||
| ^~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_class_super_bad.v:15:12: 'super' used outside class (IEEE 1800-2017 8.15)
|
||||
%Error: t/t_class_super_bad.v:15:12: 'super' used outside class (IEEE 1800-2023 8.15)
|
||||
15 | super.addr = 2;
|
||||
| ^
|
||||
%Error: Exiting due to
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_class_super_bad2.v:10:12: 'super' used on non-extended class (IEEE 1800-2017 8.15)
|
||||
%Error: t/t_class_super_bad2.v:10:12: 'super' used on non-extended class (IEEE 1800-2023 8.15)
|
||||
10 | super.i = 1;
|
||||
| ^
|
||||
%Error: Exiting due to
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_class_super_new_bad_nfirst.v:18:13: 'super.new' not first statement in new function (IEEE 1800-2017 8.15)
|
||||
%Error: t/t_class_super_new_bad_nfirst.v:18:13: 'super.new' not first statement in new function (IEEE 1800-2023 8.15)
|
||||
18 | super.new(imemberc);
|
||||
| ^~~
|
||||
t/t_class_super_new_bad_nfirst.v:17:16: ... Location of earlier statement
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_class_uses_this_bad.v:15:12: 'this' used outside class (IEEE 1800-2017 8.11)
|
||||
%Error: t/t_class_uses_this_bad.v:15:12: 'this' used outside class (IEEE 1800-2023 8.11)
|
||||
15 | this.addr = 2;
|
||||
| ^
|
||||
%Error: Exiting due to
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_class_virtual_bad.v:12:17: Illegal to call 'new' using an abstract virtual class 'VBase' (IEEE 1800-2017 8.21)
|
||||
%Error: t/t_class_virtual_bad.v:12:17: Illegal to call 'new' using an abstract virtual class 'VBase' (IEEE 1800-2023 8.21)
|
||||
: ... note: In instance 't'
|
||||
12 | VBase b = new;
|
||||
| ^~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_class_virtual_pure_bad.v:8:22: Illegal to have 'pure virtual' in non-virtual class (IEEE 1800-2017 8.21)
|
||||
%Error: t/t_class_virtual_pure_bad.v:8:22: Illegal to have 'pure virtual' in non-virtual class (IEEE 1800-2023 8.21)
|
||||
8 | pure virtual task pure_task;
|
||||
| ^~~~~~~~~
|
||||
%Error: Exiting due to
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_clocking_bad1.v:16:12: Only one default clocking block allowed per module (IEEE 1800-2017 14.12)
|
||||
%Error: t/t_clocking_bad1.v:16:12: Only one default clocking block allowed per module (IEEE 1800-2023 14.12)
|
||||
: ... note: In instance 't'
|
||||
16 | default clocking @(posedge clk);
|
||||
| ^~~~~~~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_clocking_bad4.v:23:15: Skew must be constant (IEEE 1800-2017 14.4)
|
||||
%Error: t/t_clocking_bad4.v:23:15: Skew must be constant (IEEE 1800-2023 14.4)
|
||||
: ... note: In instance 't'
|
||||
23 | input #cyc in;
|
||||
| ^~~
|
||||
|
|
@ -6,39 +6,39 @@
|
|||
: ... note: In instance 't'
|
||||
24 | input #(-1) out;
|
||||
| ^
|
||||
%Error: t/t_clocking_bad4.v:31:11: Usage of cycle delays requires default clocking (IEEE 1800-2017 14.11)
|
||||
%Error: t/t_clocking_bad4.v:31:11: Usage of cycle delays requires default clocking (IEEE 1800-2023 14.11)
|
||||
: ... note: In instance 't'
|
||||
31 | always ##1;
|
||||
| ^~
|
||||
%Error: t/t_clocking_bad4.v:32:15: Only non-blocking assignments can write to clockvars (IEEE 1800-2017 14.16)
|
||||
%Error: t/t_clocking_bad4.v:32:15: Only non-blocking assignments can write to clockvars (IEEE 1800-2023 14.16)
|
||||
: ... note: In instance 't'
|
||||
32 | always cb1.out = clk;
|
||||
| ^~~
|
||||
%Error: t/t_clocking_bad4.v:33:15: Only non-blocking assignments can write to clockvars (IEEE 1800-2017 14.16)
|
||||
%Error: t/t_clocking_bad4.v:33:15: Only non-blocking assignments can write to clockvars (IEEE 1800-2023 14.16)
|
||||
: ... note: In instance 't'
|
||||
33 | assign cb1.out = clk;
|
||||
| ^~~
|
||||
%Error: t/t_clocking_bad4.v:34:21: Only non-blocking assignments can write to clockvars (IEEE 1800-2017 14.16)
|
||||
%Error: t/t_clocking_bad4.v:34:21: Only non-blocking assignments can write to clockvars (IEEE 1800-2023 14.16)
|
||||
: ... note: In instance 't'
|
||||
34 | always write(cb1.out);
|
||||
| ^~~
|
||||
%Error: t/t_clocking_bad4.v:35:22: Event controls cannot be used in synchronous drives (IEEE 1800-2017 14.16)
|
||||
%Error: t/t_clocking_bad4.v:35:22: Event controls cannot be used in synchronous drives (IEEE 1800-2023 14.16)
|
||||
: ... note: In instance 't'
|
||||
35 | always cb1.out <= @(posedge clk) 1;
|
||||
| ^
|
||||
%Error: t/t_clocking_bad4.v:36:22: Only cycle delays can be used in synchronous drives (IEEE 1800-2017 14.16)
|
||||
%Error: t/t_clocking_bad4.v:36:22: Only cycle delays can be used in synchronous drives (IEEE 1800-2023 14.16)
|
||||
: ... note: In instance 't'
|
||||
36 | always cb1.out <= #1 1;
|
||||
| ^
|
||||
%Error: t/t_clocking_bad4.v:37:18: Cycle delays not allowed as intra-assignment delays (IEEE 1800-2017 14.11)
|
||||
%Error: t/t_clocking_bad4.v:37:18: Cycle delays not allowed as intra-assignment delays (IEEE 1800-2023 14.11)
|
||||
: ... note: In instance 't'
|
||||
37 | always out <= ##1 1;
|
||||
| ^~
|
||||
%Error: t/t_clocking_bad4.v:40:12: Cannot write to input clockvar (IEEE 1800-2017 14.3)
|
||||
%Error: t/t_clocking_bad4.v:40:12: Cannot write to input clockvar (IEEE 1800-2023 14.3)
|
||||
: ... note: In instance 't'
|
||||
40 | cb1.in = 1;
|
||||
| ^~
|
||||
%Error: t/t_clocking_bad4.v:41:21: Cannot read from output clockvar (IEEE 1800-2017 14.3)
|
||||
%Error: t/t_clocking_bad4.v:41:21: Cannot read from output clockvar (IEEE 1800-2023 14.3)
|
||||
: ... note: In instance 't'
|
||||
41 | $display(cb1.out);
|
||||
| ^~~
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ void set_bvals(svLogicVecVal* v, unsigned n) {
|
|||
for (unsigned i = 0; i < n; i++) v[i].bval = 0;
|
||||
}
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
void i_byte(char* x) {
|
||||
static int n = 0;
|
||||
if (*x != 10 - n++) stop();
|
||||
|
|
@ -893,7 +893,7 @@ void check_exports() {
|
|||
set_bvals(x_union_4_state_65, 3);
|
||||
set_bvals(x_union_4_state_128, 4);
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
x_byte = 10 + n;
|
||||
e_byte(&x_byte);
|
||||
if (x_byte != 110 + n) stop();
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ module t (/*AUTOARG*/
|
|||
// Type definitions
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
typedef byte byte_t;
|
||||
typedef byte unsigned byte_unsigned_t;
|
||||
typedef shortint shortint_t;
|
||||
|
|
@ -102,7 +102,7 @@ module t (/*AUTOARG*/
|
|||
// Imports
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
import "DPI-C" function void i_byte (inout byte x);
|
||||
import "DPI-C" function void i_byte_unsigned (inout byte unsigned x);
|
||||
import "DPI-C" function void i_shortint (inout shortint x);
|
||||
|
|
@ -202,7 +202,7 @@ module t (/*AUTOARG*/
|
|||
// Exports
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
export "DPI-C" function e_byte;
|
||||
export "DPI-C" function e_byte_unsigned;
|
||||
export "DPI-C" function e_shortint;
|
||||
|
|
@ -302,7 +302,7 @@ module t (/*AUTOARG*/
|
|||
// Definitions of exported functions
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
byte n_byte = 0;
|
||||
function void e_byte(inout byte x);
|
||||
if (x !== 8'd10 + n_byte) $stop;
|
||||
|
|
@ -958,7 +958,7 @@ module t (/*AUTOARG*/
|
|||
union_4_state_65 x_union_4_state_65;
|
||||
union_4_state_128 x_union_4_state_128;
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
x_byte = 8'd10 - 8'(i); i_byte(x_byte); if (x_byte !== 8'd110 - 8'(i)) $stop;
|
||||
x_byte_unsigned = 8'd20 - 8'(i); i_byte_unsigned(x_byte_unsigned); if (x_byte_unsigned !== 8'd220 - 8'(i)) $stop;
|
||||
x_shortint = 16'd30 - 16'(i); i_shortint(x_shortint); if (x_shortint !== 16'd330 - 16'(i)) $stop;
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ void check_bvals(CONSTARG svLogicVecVal* v, unsigned n) {
|
|||
}
|
||||
}
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
void i_byte(char i) {
|
||||
static int n = 0;
|
||||
if (i != 10 - n++) stop();
|
||||
|
|
@ -596,7 +596,7 @@ void check_exports() {
|
|||
set_bvals(x_integer_t, 1);
|
||||
#endif
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
e_byte(10 + n);
|
||||
e_byte_unsigned(20 + n);
|
||||
e_shortint(30 + n);
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ module t (/*AUTOARG*/
|
|||
// Type definitions
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
typedef byte byte_t;
|
||||
typedef byte unsigned byte_unsigned_t;
|
||||
typedef shortint shortint_t;
|
||||
|
|
@ -102,7 +102,7 @@ module t (/*AUTOARG*/
|
|||
// Imports
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
import "DPI-C" function void i_byte (input byte i);
|
||||
import "DPI-C" function void i_byte_unsigned (input byte unsigned i);
|
||||
import "DPI-C" function void i_shortint (input shortint i);
|
||||
|
|
@ -202,7 +202,7 @@ module t (/*AUTOARG*/
|
|||
// Exports
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
export "DPI-C" function e_byte;
|
||||
export "DPI-C" function e_byte_unsigned;
|
||||
export "DPI-C" function e_shortint;
|
||||
|
|
@ -302,7 +302,7 @@ module t (/*AUTOARG*/
|
|||
// Definitions of exported functions
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
byte n_byte = 0;
|
||||
function void e_byte(input byte i);
|
||||
if (i !== 8'd10 + n_byte) $stop;
|
||||
|
|
@ -800,7 +800,7 @@ module t (/*AUTOARG*/
|
|||
for (int i = 0 ; i < 3; i++) begin
|
||||
// Check the imports
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
i_byte( 8'd10 - 8'(i));
|
||||
i_byte_unsigned( 8'd20 - 8'(i));
|
||||
i_shortint( 16'd30 - 16'(i));
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ void set_bvals(svLogicVecVal* v, unsigned n) {
|
|||
for (unsigned i = 0; i < n; i++) v[i].bval = 0;
|
||||
}
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
void i_byte(char* o) {
|
||||
static int n = 0;
|
||||
*o = 10 - n++;
|
||||
|
|
@ -661,7 +661,7 @@ void check_exports() {
|
|||
svLogicVecVal x_union_4_state_65[3];
|
||||
svLogicVecVal x_union_4_state_128[4];
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
e_byte(&x_byte);
|
||||
if (x_byte != 10 + n) stop();
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ module t (/*AUTOARG*/
|
|||
// Type definitions
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
typedef byte byte_t;
|
||||
typedef byte unsigned byte_unsigned_t;
|
||||
typedef shortint shortint_t;
|
||||
|
|
@ -102,7 +102,7 @@ module t (/*AUTOARG*/
|
|||
// Imports
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
import "DPI-C" function void i_byte (output byte o);
|
||||
import "DPI-C" function void i_byte_unsigned (output byte unsigned o);
|
||||
import "DPI-C" function void i_shortint (output shortint o);
|
||||
|
|
@ -202,7 +202,7 @@ module t (/*AUTOARG*/
|
|||
// Exports
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
export "DPI-C" function e_byte;
|
||||
export "DPI-C" function e_byte_unsigned;
|
||||
export "DPI-C" function e_shortint;
|
||||
|
|
@ -302,7 +302,7 @@ module t (/*AUTOARG*/
|
|||
// Definitions of exported functions
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
byte n_byte = 0;
|
||||
function void e_byte(output byte o);
|
||||
o = 8'd10 + n_byte;
|
||||
|
|
@ -872,7 +872,7 @@ module t (/*AUTOARG*/
|
|||
union_4_state_65 x_union_4_state_65;
|
||||
union_4_state_128 x_union_4_state_128;
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.6
|
||||
// Basic types as per IEEE 1800-2023 35.5.6
|
||||
i_byte(x_byte); if (x_byte !== 8'd10 - 8'(i)) $stop;
|
||||
i_byte_unsigned(x_byte_unsigned); if (x_byte_unsigned !== 8'd20 - 8'(i)) $stop;
|
||||
i_shortint(x_shortint); if (x_shortint !== 16'd30 - 16'(i)) $stop;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Warning: DPI C Function called by Verilog DPI import with missing 'context' keyword.
|
||||
%Warning: DPI C Function called by Verilog DPI import with missing 'context' keyword.
|
||||
%Error: unknown:0: Testbench C called 'dpix_task' but scope wasn't set, perhaps due to dpi import call without 'context', or missing svSetScope. See IEEE 1800-2017 35.5.3.
|
||||
%Error: unknown:0: Testbench C called 'dpix_task' but scope wasn't set, perhaps due to dpi import call without 'context', or missing svSetScope. See IEEE 1800-2023 35.5.3.
|
||||
Aborting...
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
%Error: unknown:0: Testbench C called 'dpix_task' but scope wasn't set, perhaps due to dpi import call without 'context', or missing svSetScope. See IEEE 1800-2017 35.5.3.
|
||||
%Error: unknown:0: Testbench C called 'dpix_task' but scope wasn't set, perhaps due to dpi import call without 'context', or missing svSetScope. See IEEE 1800-2023 35.5.3.
|
||||
Aborting...
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_dpi_logic_bad.v:12:54: DPI function may not return type BASICDTYPE 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_logic_bad.v:12:54: DPI function may not return type BASICDTYPE 'logic' (IEEE 1800-2023 35.5.5)
|
||||
12 | import "DPI-C" dpii_fa_bit = function logic [2:0] oth_f_int1(input time i);
|
||||
| ^~~~~~~~~~
|
||||
%Error: Exiting due to
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
//======================================================================
|
||||
|
||||
// These are simple wrappers for the array querying functions themselves,
|
||||
// see IEEE 1800-2017 H.12.2. Sadly on the SV side these have different
|
||||
// see IEEE 1800-2023 H.12.2. Sadly on the SV side these have different
|
||||
// signatures, and hence need to have different names here as well.
|
||||
|
||||
// 1 open dimension
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ typedef uint64_t sv_longint_unsigned_t;
|
|||
// Implementations of imported functions
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.5
|
||||
// Basic types as per IEEE 1800-2023 35.5.5
|
||||
void i_void() {
|
||||
static int n = 0;
|
||||
printf("i_void %d\n", n);
|
||||
|
|
@ -286,7 +286,7 @@ void check_exports() {
|
|||
|
||||
e_void();
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.5
|
||||
// Basic types as per IEEE 1800-2023 35.5.5
|
||||
if (e_byte() != 10 + n) stop();
|
||||
if (e_byte_unsigned() != 20 + n) stop();
|
||||
if (e_shortint() != 30 + n) stop();
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ module t (/*AUTOARG*/
|
|||
// Type definitions
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.5
|
||||
// Basic types as per IEEE 1800-2023 35.5.5
|
||||
typedef byte byte_t;
|
||||
typedef byte unsigned byte_unsigned_t;
|
||||
typedef shortint shortint_t;
|
||||
|
|
@ -73,7 +73,7 @@ module t (/*AUTOARG*/
|
|||
// Imports
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.5
|
||||
// Basic types as per IEEE 1800-2023 35.5.5
|
||||
import "DPI-C" function void i_void ();
|
||||
import "DPI-C" function byte i_byte ();
|
||||
import "DPI-C" function byte unsigned i_byte_unsigned ();
|
||||
|
|
@ -130,7 +130,7 @@ module t (/*AUTOARG*/
|
|||
// Exports
|
||||
//======================================================================
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.5
|
||||
// Basic types as per IEEE 1800-2023 35.5.5
|
||||
export "DPI-C" function e_void;
|
||||
export "DPI-C" function e_byte;
|
||||
export "DPI-C" function e_byte_unsigned;
|
||||
|
|
@ -193,9 +193,9 @@ module t (/*AUTOARG*/
|
|||
|
||||
// Static variables (Note: Verilator strangely assumes everything inside
|
||||
// a function is automatic, which is exactly the opposite of the standard
|
||||
// see IEEE 1800-2017 13.3.1 and 13.4.2
|
||||
// see IEEE 1800-2023 13.3.1 and 13.4.2
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.5
|
||||
// Basic types as per IEEE 1800-2023 35.5.5
|
||||
int n_void = 0;
|
||||
function void e_void();
|
||||
$display("e_void %1d", n_void);
|
||||
|
|
@ -446,7 +446,7 @@ module t (/*AUTOARG*/
|
|||
for (int i = 0 ; i < 3; i++) begin
|
||||
// Check the imports
|
||||
|
||||
// Basic types as per IEEE 1800-2017 35.5.5
|
||||
// Basic types as per IEEE 1800-2023 35.5.5
|
||||
i_void();
|
||||
if (i_byte() !== 8'd10 - 8'(i)) $stop;
|
||||
if (i_byte_unsigned() !== 8'd20 - 8'(i)) $stop;
|
||||
|
|
|
|||
|
|
@ -62,139 +62,139 @@
|
|||
: ... Suggest make it an output argument instead?
|
||||
100 | import "DPI-C" function union_2_state_128 i_union_2_state_128();
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:103:36: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:103:36: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
103 | import "DPI-C" function integer i_integer();
|
||||
| ^~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:106:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:106:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
106 | import "DPI-C" function logic [ 0:0] i_array_4_state_1();
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:107:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:107:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
107 | import "DPI-C" function logic [ 1:0] i_array_4_state_2();
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:108:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:108:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
108 | import "DPI-C" function logic [ 7:0] i_array_4_state_8();
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:109:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:109:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
109 | import "DPI-C" function logic [ 8:0] i_array_4_state_9();
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:110:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:110:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
110 | import "DPI-C" function logic [ 15:0] i_array_4_state_16();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:111:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:111:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
111 | import "DPI-C" function logic [ 16:0] i_array_4_state_17();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:112:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:112:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
112 | import "DPI-C" function logic [ 31:0] i_array_4_state_32();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:113:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:113:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
113 | import "DPI-C" function logic [ 32:0] i_array_4_state_33();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:114:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:114:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
114 | import "DPI-C" function logic [ 63:0] i_array_4_state_64();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:115:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:115:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
115 | import "DPI-C" function logic [ 64:0] i_array_4_state_65();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:116:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:116:42: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
116 | import "DPI-C" function logic [127:0] i_array_4_state_128();
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:119:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:119:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
119 | import "DPI-C" function array_4_state_1_t i_array_4_state_1_t();
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:120:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:120:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
120 | import "DPI-C" function array_4_state_2_t i_array_4_state_2_t();
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:121:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:121:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
121 | import "DPI-C" function array_4_state_8_t i_array_4_state_8_t();
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:122:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:122:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
122 | import "DPI-C" function array_4_state_9_t i_array_4_state_9_t();
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:123:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:123:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
123 | import "DPI-C" function array_4_state_16_t i_array_4_state_16_t();
|
||||
| ^~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:124:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:124:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
124 | import "DPI-C" function array_4_state_17_t i_array_4_state_17_t();
|
||||
| ^~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:125:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:125:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
125 | import "DPI-C" function array_4_state_32_t i_array_4_state_32_t();
|
||||
| ^~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:126:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:126:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
126 | import "DPI-C" function array_4_state_33_t i_array_4_state_33_t();
|
||||
| ^~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:127:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:127:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
127 | import "DPI-C" function array_4_state_64_t i_array_4_state_64_t();
|
||||
| ^~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:128:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:128:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
128 | import "DPI-C" function array_4_state_65_t i_array_4_state_65_t();
|
||||
| ^~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:129:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:129:48: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
129 | import "DPI-C" function array_4_state_128_t i_array_4_state_128_t();
|
||||
| ^~~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:132:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:132:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
132 | import "DPI-C" function struct_4_state_1 i_struct_4_state_1();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:133:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:133:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
133 | import "DPI-C" function struct_4_state_2 i_struct_4_state_2();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:134:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:134:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
134 | import "DPI-C" function struct_4_state_8 i_struct_4_state_8();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:135:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:135:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
135 | import "DPI-C" function struct_4_state_9 i_struct_4_state_9();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:136:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:136:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
136 | import "DPI-C" function struct_4_state_16 i_struct_4_state_16();
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:137:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:137:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
137 | import "DPI-C" function struct_4_state_17 i_struct_4_state_17();
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:138:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:138:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
138 | import "DPI-C" function struct_4_state_32 i_struct_4_state_32();
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:139:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:139:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
139 | import "DPI-C" function struct_4_state_33 i_struct_4_state_33();
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:140:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:140:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
140 | import "DPI-C" function struct_4_state_64 i_struct_4_state_64();
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:141:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:141:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
141 | import "DPI-C" function struct_4_state_65 i_struct_4_state_65();
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:142:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:142:47: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
142 | import "DPI-C" function struct_4_state_128 i_struct_4_state_128();
|
||||
| ^~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:145:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:145:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
145 | import "DPI-C" function union_4_state_1 i_union_4_state_1();
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:146:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:146:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
146 | import "DPI-C" function union_4_state_2 i_union_4_state_2();
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:147:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:147:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
147 | import "DPI-C" function union_4_state_8 i_union_4_state_8();
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:148:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:148:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
148 | import "DPI-C" function union_4_state_9 i_union_4_state_9();
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:149:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:149:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
149 | import "DPI-C" function union_4_state_16 i_union_4_state_16();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:150:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:150:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
150 | import "DPI-C" function union_4_state_17 i_union_4_state_17();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:151:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:151:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
151 | import "DPI-C" function union_4_state_32 i_union_4_state_32();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:152:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:152:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
152 | import "DPI-C" function union_4_state_33 i_union_4_state_33();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:153:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:153:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
153 | import "DPI-C" function union_4_state_64 i_union_4_state_64();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:154:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:154:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
154 | import "DPI-C" function union_4_state_65 i_union_4_state_65();
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:155:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:155:46: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
155 | import "DPI-C" function union_4_state_128 i_union_4_state_128();
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:245:25: DPI function may not return a > 32 bits wide type other than basic types.
|
||||
|
|
@ -261,139 +261,139 @@
|
|||
: ... Suggest make it an output argument instead?
|
||||
266 | function union_2_state_128 e_union_2_state_128(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:269:21: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:269:21: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
269 | function integer e_integer(); return 0; endfunction
|
||||
| ^~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:272:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:272:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
272 | function logic [ 0:0] e_array_4_state_1(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:273:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:273:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
273 | function logic [ 1:0] e_array_4_state_2(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:274:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:274:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
274 | function logic [ 7:0] e_array_4_state_8(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:275:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:275:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
275 | function logic [ 8:0] e_array_4_state_9(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:276:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:276:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
276 | function logic [ 15:0] e_array_4_state_16(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:277:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:277:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
277 | function logic [ 16:0] e_array_4_state_17(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:278:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:278:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
278 | function logic [ 31:0] e_array_4_state_32(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:279:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:279:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
279 | function logic [ 32:0] e_array_4_state_33(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:280:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:280:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
280 | function logic [ 63:0] e_array_4_state_64(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:281:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:281:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
281 | function logic [ 64:0] e_array_4_state_65(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:282:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:282:27: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
282 | function logic [127:0] e_array_4_state_128(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:285:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:285:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
285 | function array_4_state_1_t e_array_4_state_1_t(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:286:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:286:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
286 | function array_4_state_2_t e_array_4_state_2_t(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:287:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:287:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
287 | function array_4_state_8_t e_array_4_state_8_t(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:288:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:288:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
288 | function array_4_state_9_t e_array_4_state_9_t(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:289:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:289:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
289 | function array_4_state_16_t e_array_4_state_16_t(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:290:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:290:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
290 | function array_4_state_17_t e_array_4_state_17_t(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:291:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:291:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
291 | function array_4_state_32_t e_array_4_state_32_t(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:292:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:292:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
292 | function array_4_state_33_t e_array_4_state_33_t(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:293:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:293:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
293 | function array_4_state_64_t e_array_4_state_64_t(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:294:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:294:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
294 | function array_4_state_65_t e_array_4_state_65_t(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:295:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:295:33: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
295 | function array_4_state_128_t e_array_4_state_128_t(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:298:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:298:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
298 | function struct_4_state_1 e_struct_4_state_1(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:299:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:299:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
299 | function struct_4_state_2 e_struct_4_state_2(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:300:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:300:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
300 | function struct_4_state_8 e_struct_4_state_8(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:301:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:301:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
301 | function struct_4_state_9 e_struct_4_state_9(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:302:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:302:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
302 | function struct_4_state_16 e_struct_4_state_16(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:303:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:303:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
303 | function struct_4_state_17 e_struct_4_state_17(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:304:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:304:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
304 | function struct_4_state_32 e_struct_4_state_32(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:305:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:305:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
305 | function struct_4_state_33 e_struct_4_state_33(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:306:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:306:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
306 | function struct_4_state_64 e_struct_4_state_64(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:307:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:307:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
307 | function struct_4_state_65 e_struct_4_state_65(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:308:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:308:32: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
308 | function struct_4_state_128 e_struct_4_state_128(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:311:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:311:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
311 | function union_4_state_1 e_union_4_state_1(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:312:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:312:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
312 | function union_4_state_2 e_union_4_state_2(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:313:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:313:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
313 | function union_4_state_8 e_union_4_state_8(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:314:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:314:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
314 | function union_4_state_9 e_union_4_state_9(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:315:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:315:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
315 | function union_4_state_16 e_union_4_state_16(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:316:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:316:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
316 | function union_4_state_17 e_union_4_state_17(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:317:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:317:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
317 | function union_4_state_32 e_union_4_state_32(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:318:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:318:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
318 | function union_4_state_33 e_union_4_state_33(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:319:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:319:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
319 | function union_4_state_64 e_union_4_state_64(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:320:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:320:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
320 | function union_4_state_65 e_union_4_state_65(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_dpi_result_type_bad.v:321:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2017 35.5.5)
|
||||
%Error: t/t_dpi_result_type_bad.v:321:31: DPI function may not return a 4-state type other than a single 'logic' (IEEE 1800-2023 35.5.5)
|
||||
321 | function union_4_state_128 e_union_4_state_128(); return 0; endfunction
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: Exiting due to
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_enum_bad_value.v:10:19: Enum value exceeds width of enum type (IEEE 1800-2017 6.19)
|
||||
%Error: t/t_enum_bad_value.v:10:19: Enum value exceeds width of enum type (IEEE 1800-2023 6.19)
|
||||
: ... note: In instance 't'
|
||||
10 | VALUE_BAD = 8
|
||||
| ^
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_enum_bad_wrap.v:11:19: Enum value illegally wrapped around (IEEE 1800-2017 6.19)
|
||||
%Error: t/t_enum_bad_wrap.v:11:19: Enum value illegally wrapped around (IEEE 1800-2023 6.19)
|
||||
: ... note: In instance 't'
|
||||
11 | WRAPPED
|
||||
| ^~~~~~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error-ENUMVALUE: t/t_enum_enumvalue_struct_bad.v:21:33: Implicit conversion to enum 'MEMBERDTYPE 'a'' from 'logic[31:0]' (IEEE 1800-2017 6.19.3)
|
||||
%Error-ENUMVALUE: t/t_enum_enumvalue_struct_bad.v:21:33: Implicit conversion to enum 'MEMBERDTYPE 'a'' from 'logic[31:0]' (IEEE 1800-2023 6.19.3)
|
||||
: ... note: In instance 't'
|
||||
: ... Suggest use enum's mnemonic, or static cast
|
||||
21 | localparam foo_t FOO0 = '{a: 0, b: 1'b1, u: 1'b1};
|
||||
|
|
|
|||
|
|
@ -1,15 +1,15 @@
|
|||
%Error-ENUMVALUE: t/t_enum_type_bad.v:28:11: Implicit conversion to enum 't.e_t' from 'logic[31:0]' (IEEE 1800-2017 6.19.3)
|
||||
%Error-ENUMVALUE: t/t_enum_type_bad.v:28:11: Implicit conversion to enum 't.e_t' from 'logic[31:0]' (IEEE 1800-2023 6.19.3)
|
||||
: ... note: In instance 't'
|
||||
: ... Suggest use enum's mnemonic, or static cast
|
||||
28 | e = 1;
|
||||
| ^
|
||||
... For error description see https://verilator.org/warn/ENUMVALUE?v=latest
|
||||
%Error-ENUMVALUE: t/t_enum_type_bad.v:29:11: Implicit conversion to enum 't.o_t' from 't.e_t' (IEEE 1800-2017 6.19.3)
|
||||
%Error-ENUMVALUE: t/t_enum_type_bad.v:29:11: Implicit conversion to enum 't.o_t' from 't.e_t' (IEEE 1800-2023 6.19.3)
|
||||
: ... note: In instance 't'
|
||||
: ... Suggest use enum's mnemonic, or static cast
|
||||
29 | o = e;
|
||||
| ^
|
||||
%Error-ENUMVALUE: t/t_enum_type_bad.v:35:15: Implicit conversion to enum 't.o_t' from 'ENUMDTYPE 't.e_t'' (IEEE 1800-2017 6.19.3)
|
||||
%Error-ENUMVALUE: t/t_enum_type_bad.v:35:15: Implicit conversion to enum 't.o_t' from 'ENUMDTYPE 't.e_t'' (IEEE 1800-2023 6.19.3)
|
||||
: ... note: In instance 't'
|
||||
: ... Suggest use enum's mnemonic, or static cast
|
||||
35 | o = str.m_e;
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
%Error: t/t_enum_x_bad.v:9:21: Enum value with X/Zs cannot be assigned to non-fourstate type (IEEE 1800-2017 6.19)
|
||||
%Error: t/t_enum_x_bad.v:9:21: Enum value with X/Zs cannot be assigned to non-fourstate type (IEEE 1800-2023 6.19)
|
||||
: ... note: In instance 't'
|
||||
9 | enum bit [1:0] { BADX = 2'b1x } BAD1;
|
||||
| ^~~~
|
||||
%Error: t/t_enum_x_bad.v:12:23: Enum value that is unassigned cannot follow value with X/Zs (IEEE 1800-2017 6.19)
|
||||
%Error: t/t_enum_x_bad.v:12:23: Enum value that is unassigned cannot follow value with X/Zs (IEEE 1800-2023 6.19)
|
||||
: ... note: In instance 't'
|
||||
12 | e1
|
||||
| ^~
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ module t(/*AUTOARG*/
|
|||
// are ever pointed to by an EVENTREF.
|
||||
e4 = e3; // Old handle to e4
|
||||
e3 = e2; // Same event, also triggers e2
|
||||
// IEEE 1800-2017 15.5.5.1 says that this causes a merge, and the below
|
||||
// IEEE 1800-2023 15.5.5.1 says that this causes a merge, and the below
|
||||
// should also activate the "old e3". However we could not find any
|
||||
// simulator that actually does this. Instead the "old e3" becomes
|
||||
// unreachable (via old handle), but is reachable by "e4" as assigned
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_flag_structs_packed.v:14:19: Unpacked data type 'STRUCTDTYPE 'x.notpacked_t'' in packed struct/union (IEEE 1800-2017 7.2.1)
|
||||
%Error: t/t_flag_structs_packed.v:14:19: Unpacked data type 'STRUCTDTYPE 'x.notpacked_t'' in packed struct/union (IEEE 1800-2023 7.2.1)
|
||||
: ... note: In instance 'x'
|
||||
14 | notpacked_t b;
|
||||
| ^
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_foreach_bad.v:14:7: Syntax error; foreach missing bracketed loop variable (IEEE 1800-2017 12.7.3)
|
||||
%Error: t/t_foreach_bad.v:14:7: Syntax error; foreach missing bracketed loop variable (IEEE 1800-2023 12.7.3)
|
||||
14 | foreach (array);
|
||||
| ^~~~~~~
|
||||
%Error: t/t_foreach_bad.v:18:23: 'foreach' loop variable expects simple variable name
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_fork_func2_bad.v:10:7: Only fork .. join_none is legal in functions. (IEEE 1800-2017 13.4.4)
|
||||
%Error: t/t_fork_func2_bad.v:10:7: Only fork .. join_none is legal in functions. (IEEE 1800-2023 13.4.4)
|
||||
: ... note: In instance 't'
|
||||
10 | fork
|
||||
| ^~~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_fork_func_bad.v:11:10: Return isn't legal under fork (IEEE 1800-2017 9.2.3)
|
||||
%Error: t/t_fork_func_bad.v:11:10: Return isn't legal under fork (IEEE 1800-2023 9.2.3)
|
||||
11 | return 0;
|
||||
| ^~~~~~
|
||||
%Error: Exiting due to
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Warning-IGNOREDRETURN: t/t_func_void_bad.v:26:7: Ignoring return value of non-void function (IEEE 1800-2017 13.4.1)
|
||||
%Warning-IGNOREDRETURN: t/t_func_void_bad.v:26:7: Ignoring return value of non-void function (IEEE 1800-2023 13.4.1)
|
||||
26 | f1(20);
|
||||
| ^~
|
||||
... For warning description see https://verilator.org/warn/IGNOREDRETURN?v=latest
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_fuzz_genintf_bad.v:24:11: Mixing positional and .*/named instantiation connection (IEEE 1800-2017 23.3.2)
|
||||
%Error: t/t_fuzz_genintf_bad.v:24:11: Mixing positional and .*/named instantiation connection (IEEE 1800-2023 23.3.2)
|
||||
24 | j.e(0),
|
||||
| ^
|
||||
%Error: Exiting due to
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
%Error: t/t_fuzz_negwidth_bad.v:9:9: Unsupported: Width of number exceeds implementation limit: 1231232312312312'd1 (IEEE 1800-2017 6.9.1)
|
||||
%Error: t/t_fuzz_negwidth_bad.v:9:9: Unsupported: Width of number exceeds implementation limit: 1231232312312312'd1 (IEEE 1800-2023 6.9.1)
|
||||
9 | int c = 1231232312312312'd1;
|
||||
| ^~~~~~~~~~~~~~~~~~~
|
||||
%Error: t/t_fuzz_negwidth_bad.v:10:9: Syntax error: size cannot be provided with '0/'1/'x/'z: 12'1 (IEEE 1800-2017 5.7.1)
|
||||
%Error: t/t_fuzz_negwidth_bad.v:10:9: Syntax error: size cannot be provided with '0/'1/'x/'z: 12'1 (IEEE 1800-2023 5.7.1)
|
||||
10 | int e = 12'1;
|
||||
| ^~~~
|
||||
%Error: t/t_fuzz_negwidth_bad.v:11:9: Syntax error: size cannot be provided with '0/'1/'x/'z: 12'0 (IEEE 1800-2017 5.7.1)
|
||||
%Error: t/t_fuzz_negwidth_bad.v:11:9: Syntax error: size cannot be provided with '0/'1/'x/'z: 12'0 (IEEE 1800-2023 5.7.1)
|
||||
11 | int f = 12'0;
|
||||
| ^~~~
|
||||
%Error: t/t_fuzz_negwidth_bad.v:12:9: Syntax error: size cannot be provided with '0/'1/'x/'z: 12'z (IEEE 1800-2017 5.7.1)
|
||||
%Error: t/t_fuzz_negwidth_bad.v:12:9: Syntax error: size cannot be provided with '0/'1/'x/'z: 12'z (IEEE 1800-2023 5.7.1)
|
||||
12 | int g = 12'z;
|
||||
| ^~~~
|
||||
%Error: t/t_fuzz_negwidth_bad.v:13:9: Syntax error: size cannot be provided with '0/'1/'x/'z: 12'x (IEEE 1800-2017 5.7.1)
|
||||
%Error: t/t_fuzz_negwidth_bad.v:13:9: Syntax error: size cannot be provided with '0/'1/'x/'z: 12'x (IEEE 1800-2023 5.7.1)
|
||||
13 | int h = 12'x;
|
||||
| ^~~~
|
||||
%Error: Exiting due to
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_genvar_for_bad.v:23:10: Genvar not legal in non-generate for (IEEE 1800-2017 27.4): 't.i'
|
||||
%Error: t/t_genvar_for_bad.v:23:10: Genvar not legal in non-generate for (IEEE 1800-2023 27.4): 't.i'
|
||||
: ... Suggest move for loop upwards to generate-level scope.
|
||||
23 | for (i=0; i<N; i=i+1) begin
|
||||
| ^~~
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
%Error: t/t_implements_collision_bad.v:15:11: Class 'IclsBoth' implements 'Icls2' but missing inheritance conflict resolution for 'icfboth' (IEEE 1800-2017 8.26.6.2)
|
||||
%Error: t/t_implements_collision_bad.v:15:11: Class 'IclsBoth' implements 'Icls2' but missing inheritance conflict resolution for 'icfboth' (IEEE 1800-2023 8.26.6.2)
|
||||
15 | interface class IclsBoth extends Icls1, Icls2;
|
||||
| ^~~~~
|
||||
t/t_implements_collision_bad.v:12:30: ... Location of interface class's function
|
||||
12 | pure virtual function int icfboth;
|
||||
| ^~~~~~~
|
||||
%Error: t/t_implements_collision_bad.v:19:1: Class 'Cls' implements 'IclsBoth' but is missing implementation for 'icfboth' (IEEE 1800-2017 8.26)
|
||||
%Error: t/t_implements_collision_bad.v:19:1: Class 'Cls' implements 'IclsBoth' but is missing implementation for 'icfboth' (IEEE 1800-2023 8.26)
|
||||
19 | class Cls implements IclsBoth;
|
||||
| ^~~~~
|
||||
t/t_implements_collision_bad.v:8:30: ... Location of interface class's function
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
%Error: t/t_implements_contents_bad.v:8:8: Interface class cannot contain non-parameter members (IEEE 1800-2017 8.26): 'badi'
|
||||
%Error: t/t_implements_contents_bad.v:8:8: Interface class cannot contain non-parameter members (IEEE 1800-2023 8.26): 'badi'
|
||||
8 | int badi;
|
||||
| ^~~~
|
||||
%Error: t/t_implements_contents_bad.v:9:9: Interface class functions must be pure virtual (IEEE 1800-2017 8.26): 'badtask'
|
||||
%Error: t/t_implements_contents_bad.v:9:9: Interface class functions must be pure virtual (IEEE 1800-2023 8.26): 'badtask'
|
||||
9 | task badtask;
|
||||
| ^~~~~~~
|
||||
%Error: Exiting due to
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_implements_missing_bad.v:12:1: Class 'Cls' implements 'Icls1' but is missing implementation for 'icf2' (IEEE 1800-2017 8.26)
|
||||
%Error: t/t_implements_missing_bad.v:12:1: Class 'Cls' implements 'Icls1' but is missing implementation for 'icf2' (IEEE 1800-2023 8.26)
|
||||
12 | class Cls implements Icls1;
|
||||
| ^~~~~
|
||||
t/t_implements_missing_bad.v:9:30: ... Location of interface class's function
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_implements_new_bad.v:13:11: Illegal to call 'new' using an abstract virtual class 'Icls' (IEEE 1800-2017 8.21)
|
||||
%Error: t/t_implements_new_bad.v:13:11: Illegal to call 'new' using an abstract virtual class 'Icls' (IEEE 1800-2023 8.21)
|
||||
: ... note: In instance 't'
|
||||
13 | c = new;
|
||||
| ^~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_inside_assoc_unsup.v:12:15: Inside operator not specified on associative arrays (IEEE 1800-2017 11.4.13)
|
||||
%Error: t/t_inside_assoc_unsup.v:12:15: Inside operator not specified on associative arrays (IEEE 1800-2023 11.4.13)
|
||||
: ... note: In instance 't'
|
||||
12 | m = (10 inside {assoc});
|
||||
| ^~~~~~
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
%Error: t/t_inst_2star_bad.v:12:17: Duplicate .* in an instance (IEEE 1800-2017 23.3.2)
|
||||
%Error: t/t_inst_2star_bad.v:12:17: Duplicate .* in an instance (IEEE 1800-2023 23.3.2)
|
||||
12 | sub sub (.*, .*);
|
||||
| ^~
|
||||
%Error: t/t_inst_2star_bad.v:14:13: Mixing positional and .*/named instantiation connection (IEEE 1800-2017 23.3.2)
|
||||
%Error: t/t_inst_2star_bad.v:14:13: Mixing positional and .*/named instantiation connection (IEEE 1800-2023 23.3.2)
|
||||
14 | sub sub (foo, .*);
|
||||
| ^~~
|
||||
%Error: t/t_inst_2star_bad.v:16:13: Mixing positional and .*/named instantiation connection (IEEE 1800-2017 23.3.2)
|
||||
%Error: t/t_inst_2star_bad.v:16:13: Mixing positional and .*/named instantiation connection (IEEE 1800-2023 23.3.2)
|
||||
16 | sub sub (foo, .bar);
|
||||
| ^~~
|
||||
%Error: Exiting due to
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_inst_array_bad.v:19:28: Input port connection 'onebit' as part of a module instance array requires 1 or 8 bits, but connection's VARREF 'onebitbad' generates 9 bits. (IEEE 1800-2017 23.3.3)
|
||||
%Error: t/t_inst_array_bad.v:19:28: Input port connection 'onebit' as part of a module instance array requires 1 or 8 bits, but connection's VARREF 'onebitbad' generates 9 bits. (IEEE 1800-2023 23.3.3)
|
||||
: ... note: In instance 't'
|
||||
19 | sub sub [7:0] (allbits, onebitbad, bitout);
|
||||
| ^~~~~~~~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_inst_misarray2_bad.v:10:17: Illegal input port connection 'i_data', mismatch between port which is not an array, and expression which is an array. (IEEE 1800-2017 7.6)
|
||||
%Error: t/t_inst_misarray2_bad.v:10:17: Illegal input port connection 'i_data', mismatch between port which is not an array, and expression which is an array. (IEEE 1800-2023 7.6)
|
||||
: ... note: In instance 't'
|
||||
10 | .i_data(fft_oQ[6:0])
|
||||
| ^~~~~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_inst_misarray_bad.v:17:23: Illegal input port connection 'foo', mismatch between port which is an array, and expression which is not an array. (IEEE 1800-2017 7.6)
|
||||
%Error: t/t_inst_misarray_bad.v:17:23: Illegal input port connection 'foo', mismatch between port which is an array, and expression which is not an array. (IEEE 1800-2023 7.6)
|
||||
: ... note: In instance 't'
|
||||
17 | .foo(foo));
|
||||
| ^~~
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
// DESCRIPTION: Verilator: Verilog Test module
|
||||
//
|
||||
// A test that a package import declaration can preceed a parameter port list
|
||||
// in an interface declaration. See IEEE 1800-2017 25.3.
|
||||
// in an interface declaration. See IEEE 1800-2023 25.3.
|
||||
//
|
||||
// This file ONLY is placed into the Public Domain, for any use,
|
||||
// without warranty, 2013 by Jeremy Bennett.
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
module t(/*AUTOARG*/);
|
||||
|
||||
let RECURSE(a) = (a == 1) ? 1 : RECURSE(a - 1); // BAD no recursion per IEEE 1800-2017 11.12
|
||||
let RECURSE(a) = (a == 1) ? 1 : RECURSE(a - 1); // BAD no recursion per IEEE 1800-2023 11.12
|
||||
|
||||
initial begin
|
||||
if (RECURSE(1) != 1) $stop;
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
%Error-PROCASSWIRE: t/t_lint_always_comb_bad.v:29:9: Procedural assignment to wire, perhaps intended var (IEEE 1800-2017 6.5): 'temp1'
|
||||
%Error-PROCASSWIRE: t/t_lint_always_comb_bad.v:29:9: Procedural assignment to wire, perhaps intended var (IEEE 1800-2023 6.5): 'temp1'
|
||||
: ... note: In instance 't'
|
||||
29 | temp1 = 'h0;
|
||||
| ^~~~~
|
||||
... For error description see https://verilator.org/warn/PROCASSWIRE?v=latest
|
||||
%Error-PROCASSWIRE: t/t_lint_always_comb_bad.v:31:9: Procedural assignment to wire, perhaps intended var (IEEE 1800-2017 6.5): 'temp1'
|
||||
%Error-PROCASSWIRE: t/t_lint_always_comb_bad.v:31:9: Procedural assignment to wire, perhaps intended var (IEEE 1800-2023 6.5): 'temp1'
|
||||
: ... note: In instance 't'
|
||||
31 | temp1 = (temp1_d1r - 'h1);
|
||||
| ^~~~~
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
32 | mid = (temp1_d1r == 'h0);
|
||||
| ^~~
|
||||
... Use "/* verilator lint_off ALWCOMBORDER */" and lint_on around source to disable this message.
|
||||
%Error-PROCASSWIRE: t/t_lint_always_comb_bad.v:46:7: Procedural assignment to wire, perhaps intended var (IEEE 1800-2017 6.5): 'temp1_d1r'
|
||||
%Error-PROCASSWIRE: t/t_lint_always_comb_bad.v:46:7: Procedural assignment to wire, perhaps intended var (IEEE 1800-2023 6.5): 'temp1_d1r'
|
||||
: ... note: In instance 't'
|
||||
46 | temp1_d1r <= temp1;
|
||||
| ^~~~~~~~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Warning-MULTIDRIVEN: t/t_lint_always_comb_multidriven_bad.v:26:16: Variable written to in always_comb also written by other process (IEEE 1800-2017 9.2.2.2): 'out1'
|
||||
%Warning-MULTIDRIVEN: t/t_lint_always_comb_multidriven_bad.v:26:16: Variable written to in always_comb also written by other process (IEEE 1800-2023 9.2.2.2): 'out1'
|
||||
: ... note: In instance 't'
|
||||
t/t_lint_always_comb_multidriven_bad.v:26:16:
|
||||
26 | always_comb out1 = d;
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
| ^~~~
|
||||
... For warning description see https://verilator.org/warn/MULTIDRIVEN?v=latest
|
||||
... Use "/* verilator lint_off MULTIDRIVEN */" and lint_on around source to disable this message.
|
||||
%Warning-MULTIDRIVEN: t/t_lint_always_comb_multidriven_bad.v:29:16: Variable written to in always_comb also written by other process (IEEE 1800-2017 9.2.2.2): 'out2'
|
||||
%Warning-MULTIDRIVEN: t/t_lint_always_comb_multidriven_bad.v:29:16: Variable written to in always_comb also written by other process (IEEE 1800-2023 9.2.2.2): 'out2'
|
||||
: ... note: In instance 't'
|
||||
t/t_lint_always_comb_multidriven_bad.v:29:16:
|
||||
29 | always_comb out2 = 1'b0;
|
||||
|
|
@ -16,7 +16,7 @@
|
|||
t/t_lint_always_comb_multidriven_bad.v:28:11: ... Location of other write
|
||||
28 | assign out2 = d;
|
||||
| ^~~~
|
||||
%Warning-MULTIDRIVEN: t/t_lint_always_comb_multidriven_bad.v:32:11: Variable also written to in always_comb (IEEE 1800-2017 9.2.2.2): 'out3'
|
||||
%Warning-MULTIDRIVEN: t/t_lint_always_comb_multidriven_bad.v:32:11: Variable also written to in always_comb (IEEE 1800-2023 9.2.2.2): 'out3'
|
||||
: ... note: In instance 't'
|
||||
t/t_lint_always_comb_multidriven_bad.v:32:11:
|
||||
32 | assign out3 = 1'b0;
|
||||
|
|
@ -24,7 +24,7 @@
|
|||
t/t_lint_always_comb_multidriven_bad.v:31:16: ... Location of always_comb write
|
||||
31 | always_comb out3 = d;
|
||||
| ^~~~
|
||||
%Warning-MULTIDRIVEN: t/t_lint_always_comb_multidriven_bad.v:35:11: Variable also written to in always_comb (IEEE 1800-2017 9.2.2.2): 'out4'
|
||||
%Warning-MULTIDRIVEN: t/t_lint_always_comb_multidriven_bad.v:35:11: Variable also written to in always_comb (IEEE 1800-2023 9.2.2.2): 'out4'
|
||||
: ... note: In instance 't'
|
||||
t/t_lint_always_comb_multidriven_bad.v:35:11:
|
||||
35 | assign out4 = d;
|
||||
|
|
@ -32,7 +32,7 @@
|
|||
t/t_lint_always_comb_multidriven_bad.v:34:16: ... Location of always_comb write
|
||||
34 | always_comb out4 = 1'b0;
|
||||
| ^~~~
|
||||
%Warning-MULTIDRIVEN: t/t_lint_always_comb_multidriven_bad.v:38:16: Variable written to in always_comb also written by other process (IEEE 1800-2017 9.2.2.2): 'out5'
|
||||
%Warning-MULTIDRIVEN: t/t_lint_always_comb_multidriven_bad.v:38:16: Variable written to in always_comb also written by other process (IEEE 1800-2023 9.2.2.2): 'out5'
|
||||
: ... note: In instance 't'
|
||||
t/t_lint_always_comb_multidriven_bad.v:38:16:
|
||||
38 | always_comb out5 = d;
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
t/t_lint_always_comb_multidriven_bad.v:37:16: ... Location of other write
|
||||
37 | always_comb out5 = 1'b0;
|
||||
| ^~~~
|
||||
%Warning-MULTIDRIVEN: t/t_lint_always_comb_multidriven_bad.v:41:16: Variable written to in always_comb also written by other process (IEEE 1800-2017 9.2.2.2): 'out6'
|
||||
%Warning-MULTIDRIVEN: t/t_lint_always_comb_multidriven_bad.v:41:16: Variable written to in always_comb also written by other process (IEEE 1800-2023 9.2.2.2): 'out6'
|
||||
: ... note: In instance 't'
|
||||
t/t_lint_always_comb_multidriven_bad.v:41:16:
|
||||
41 | always_comb out6 = 1'b0;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_lint_comb_bad.v:14:4: Event control statements not legal under always_comb (IEEE 1800-2017 9.2.2.2.2)
|
||||
%Error: t/t_lint_comb_bad.v:14:4: Event control statements not legal under always_comb (IEEE 1800-2023 9.2.2.2.2)
|
||||
: ... Suggest use a normal 'always'
|
||||
14 | always_comb @(*) begin
|
||||
| ^~~~~~~~~~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_lint_const_func_dpi_bad.v:8:32: Constant function may not be DPI import (IEEE 1800-2017 13.4.3)
|
||||
%Error: t/t_lint_const_func_dpi_bad.v:8:32: Constant function may not be DPI import (IEEE 1800-2023 13.4.3)
|
||||
: ... note: In instance 't'
|
||||
8 | import "DPI-C" function int dpiFunc();
|
||||
| ^~~~~~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_lint_const_func_gen_bad.v:11:30: Constant function may not be declared under generate (IEEE 1800-2017 13.4.3)
|
||||
%Error: t/t_lint_const_func_gen_bad.v:11:30: Constant function may not be declared under generate (IEEE 1800-2023 13.4.3)
|
||||
: ... note: In instance 't'
|
||||
11 | function automatic bit constFunc();
|
||||
| ^~~~~~~~~
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
module t ();
|
||||
if (1) begin: GenConstFunc
|
||||
// IEEE 1800-2017 13.4.3, constant functions shall not be declared inside a
|
||||
// IEEE 1800-2023 13.4.3, constant functions shall not be declared inside a
|
||||
//generate block
|
||||
function automatic bit constFunc();
|
||||
constFunc = 1'b1;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Warning-DEFPARAM: t/t_lint_defparam.v:10:19: defparam is deprecated (IEEE 1800-2017 C.4.1)
|
||||
%Warning-DEFPARAM: t/t_lint_defparam.v:10:19: defparam is deprecated (IEEE 1800-2023 C.4.1)
|
||||
: ... Suggest use instantiation with #(.P(...etc...))
|
||||
10 | defparam sub.P = 2;
|
||||
| ^
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
%Error: t/t_lint_edge_real_bad.v:19:22: Edge event control not legal on real type (IEEE 1800-2017 6.12.1)
|
||||
%Error: t/t_lint_edge_real_bad.v:19:22: Edge event control not legal on real type (IEEE 1800-2023 6.12.1)
|
||||
: ... note: In instance 't'
|
||||
19 | always @ (posedge rbad) $stop;
|
||||
| ^~~~
|
||||
%Error: t/t_lint_edge_real_bad.v:20:22: Edge event control not legal on non-integral type (IEEE 1800-2017 9.4.2)
|
||||
%Error: t/t_lint_edge_real_bad.v:20:22: Edge event control not legal on non-integral type (IEEE 1800-2023 9.4.2)
|
||||
: ... note: In instance 't'
|
||||
20 | always @ (posedge ebad) $stop;
|
||||
| ^~~~
|
||||
|
|
|
|||
|
|
@ -1,26 +1,26 @@
|
|||
%Warning-GENUNNAMED: t/t_lint_genunnamed_bad.v:14:6: Unnamed generate block 'genblk2' (IEEE 1800-2017 27.6)
|
||||
%Warning-GENUNNAMED: t/t_lint_genunnamed_bad.v:14:6: Unnamed generate block 'genblk2' (IEEE 1800-2023 27.6)
|
||||
: ... Suggest assign a label with 'begin : gen_<label_name>'
|
||||
14 | begin
|
||||
| ^~~~~
|
||||
... For warning description see https://verilator.org/warn/GENUNNAMED?v=latest
|
||||
... Use "/* verilator lint_off GENUNNAMED */" and lint_on around source to disable this message.
|
||||
%Warning-GENUNNAMED: t/t_lint_genunnamed_bad.v:18:6: Unnamed generate block 'genblk2' (IEEE 1800-2017 27.6)
|
||||
%Warning-GENUNNAMED: t/t_lint_genunnamed_bad.v:18:6: Unnamed generate block 'genblk2' (IEEE 1800-2023 27.6)
|
||||
: ... Suggest assign a label with 'begin : gen_<label_name>'
|
||||
18 | begin
|
||||
| ^~~~~
|
||||
%Warning-GENUNNAMED: t/t_lint_genunnamed_bad.v:22:4: Unnamed generate block 'genblk3' (IEEE 1800-2017 27.6)
|
||||
%Warning-GENUNNAMED: t/t_lint_genunnamed_bad.v:22:4: Unnamed generate block 'genblk3' (IEEE 1800-2023 27.6)
|
||||
: ... Suggest assign a label with 'begin : gen_<label_name>'
|
||||
22 | for (genvar v = 0; v < P; ++v) ;
|
||||
| ^~~
|
||||
%Warning-GENUNNAMED: t/t_lint_genunnamed_bad.v:24:4: Unnamed generate block 'genblk4' (IEEE 1800-2017 27.6)
|
||||
%Warning-GENUNNAMED: t/t_lint_genunnamed_bad.v:24:4: Unnamed generate block 'genblk4' (IEEE 1800-2023 27.6)
|
||||
: ... Suggest assign a label with 'begin : gen_<label_name>'
|
||||
24 | for (genvar v = 0; v < P; ++v)
|
||||
| ^~~
|
||||
%Warning-GENUNNAMED: t/t_lint_genunnamed_bad.v:30:9: Unnamed generate block 'genblk5' (IEEE 1800-2017 27.6)
|
||||
%Warning-GENUNNAMED: t/t_lint_genunnamed_bad.v:30:9: Unnamed generate block 'genblk5' (IEEE 1800-2023 27.6)
|
||||
: ... Suggest assign a label with 'begin : gen_<label_name>'
|
||||
30 | 1: initial begin end
|
||||
| ^~~~~~~
|
||||
%Warning-GENUNNAMED: t/t_lint_genunnamed_bad.v:31:9: Unnamed generate block 'genblk5' (IEEE 1800-2017 27.6)
|
||||
%Warning-GENUNNAMED: t/t_lint_genunnamed_bad.v:31:9: Unnamed generate block 'genblk5' (IEEE 1800-2023 27.6)
|
||||
: ... Suggest assign a label with 'begin : gen_<label_name>'
|
||||
31 | 2: begin
|
||||
| ^~~~~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_lint_iface_array_topmodule_bad.v:8:24: Parameter without initial value is never given value (IEEE 1800-2017 6.20.1): 'DW'
|
||||
%Error: t/t_lint_iface_array_topmodule_bad.v:8:24: Parameter without initial value is never given value (IEEE 1800-2023 6.20.1): 'DW'
|
||||
: ... note: In instance 't'
|
||||
8 | parameter integer DW
|
||||
| ^~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error: t/t_lint_iface_topmodule_bad.v:8:23: Parameter without initial value is never given value (IEEE 1800-2017 6.20.1): 'DW'
|
||||
%Error: t/t_lint_iface_topmodule_bad.v:8:23: Parameter without initial value is never given value (IEEE 1800-2023 6.20.1): 'DW'
|
||||
: ... note: In instance 't'
|
||||
8 | parameter integer DW
|
||||
| ^~
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error-PKGNODECL: t/t_lint_import_name2_bad.v:7:8: Package/class 'missing' not found, and needs to be predeclared (IEEE 1800-2017 26.3)
|
||||
%Error-PKGNODECL: t/t_lint_import_name2_bad.v:7:8: Package/class 'missing' not found, and needs to be predeclared (IEEE 1800-2023 26.3)
|
||||
7 | import missing::sigs;
|
||||
| ^~~~~~~
|
||||
... For error description see https://verilator.org/warn/PKGNODECL?v=latest
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%Error-PKGNODECL: t/t_lint_pkg_colon_bad.v:7:17: Package/class 'mispkg' not found, and needs to be predeclared (IEEE 1800-2017 26.3)
|
||||
%Error-PKGNODECL: t/t_lint_pkg_colon_bad.v:7:17: Package/class 'mispkg' not found, and needs to be predeclared (IEEE 1800-2023 26.3)
|
||||
7 | module t (input mispkg::foo_t a);
|
||||
| ^~~~~~
|
||||
... For error description see https://verilator.org/warn/PKGNODECL?v=latest
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue