Add PINCONNECTEMPTY warning.
This commit is contained in:
parent
c70540a825
commit
a3813f94fc
2
Changes
2
Changes
|
@ -11,6 +11,8 @@ indicates the contributor was also the author of the fix; Thanks!
|
||||||
|
|
||||||
*** Add assertions on 'unique if', bug725. [Jeff Bush]
|
*** Add assertions on 'unique if', bug725. [Jeff Bush]
|
||||||
|
|
||||||
|
*** Add PINCONNECTEMPTY warning. [Holger Waechtler]
|
||||||
|
|
||||||
**** Documentation fixes, bug723. [Glen Gibb]
|
**** Documentation fixes, bug723. [Glen Gibb]
|
||||||
|
|
||||||
**** Fix tracing of package variables and real arrays.
|
**** Fix tracing of package variables and real arrays.
|
||||||
|
|
|
@ -1095,8 +1095,9 @@ Disable the specified warning message.
|
||||||
Disable all lint related warning messages, and all style warnings. This is
|
Disable all lint related warning messages, and all style warnings. This is
|
||||||
equivalent to "-Wno-ALWCOMBORDER -Wno-CASEINCOMPLETE -Wno-CASEOVERLAP
|
equivalent to "-Wno-ALWCOMBORDER -Wno-CASEINCOMPLETE -Wno-CASEOVERLAP
|
||||||
-Wno-CASEX -Wno-CASEWITHX -Wno-CMPCONST -Wno-ENDLABEL -Wno-IMPLICIT
|
-Wno-CASEX -Wno-CASEWITHX -Wno-CMPCONST -Wno-ENDLABEL -Wno-IMPLICIT
|
||||||
-Wno-LITENDIAN -Wno-PINMISSING -Wno-SYNCASYNCNET -Wno-UNDRIVEN
|
-Wno-LITENDIAN -Wno-PINCONNECTEMPTY -Wno-PINMISSING -Wno-SYNCASYNCNET
|
||||||
-Wno-UNSIGNED -Wno-UNUSED -Wno-WIDTH" plus the list shown for Wno-style.
|
-Wno-UNDRIVEN -Wno-UNSIGNED -Wno-UNUSED -Wno-WIDTH" plus the list shown for
|
||||||
|
Wno-style.
|
||||||
|
|
||||||
It is strongly recommended you cleanup your code rather than using this
|
It is strongly recommended you cleanup your code rather than using this
|
||||||
option, it is only intended to be use when running test-cases of code
|
option, it is only intended to be use when running test-cases of code
|
||||||
|
@ -1106,8 +1107,8 @@ received from third parties.
|
||||||
|
|
||||||
Disable all code style related warning messages (note by default they are
|
Disable all code style related warning messages (note by default they are
|
||||||
already disabled). This is equivalent to "-Wno-DECLFILENAME -Wno-DEFPARAM
|
already disabled). This is equivalent to "-Wno-DECLFILENAME -Wno-DEFPARAM
|
||||||
-Wno-INCABSPATH -Wno-PINNOCONNECT -Wno-SYNCASYNCNET -Wno-UNDRIVEN
|
-Wno-INCABSPATH -Wno-PINCONNECTEMPTY -Wno-PINNOCONNECT -Wno-SYNCASYNCNET
|
||||||
-Wno-UNUSED -Wno-VARHIDDEN".
|
-Wno-UNDRIVEN -Wno-UNUSED -Wno-VARHIDDEN".
|
||||||
|
|
||||||
=item -Wno-fatal
|
=item -Wno-fatal
|
||||||
|
|
||||||
|
@ -3009,11 +3010,21 @@ not really needed. The best solution is to insure that each module is in a
|
||||||
unique file by the same name. Otherwise, make sure all library files are
|
unique file by the same name. Otherwise, make sure all library files are
|
||||||
read in as libraries with -v, instead of automatically with -y.
|
read in as libraries with -v, instead of automatically with -y.
|
||||||
|
|
||||||
|
=item PINCONNECTEMPTY
|
||||||
|
|
||||||
|
Warns that a cell instantiation has a pin which is connected to
|
||||||
|
.pin_name(), e.g. not another signal, but with an explicit mention of the
|
||||||
|
pin. It may be desirable to disable PINCONNECTEMPTY, as this indicates
|
||||||
|
intention to have a no-connect.
|
||||||
|
|
||||||
|
Disabled by default as this is a code style warning; it will simulate
|
||||||
|
correctly.
|
||||||
|
|
||||||
=item PINMISSING
|
=item PINMISSING
|
||||||
|
|
||||||
Warns that a module has a pin which is not mentioned in a cell
|
Warns that a module has a pin which is not mentioned in a cell
|
||||||
instantiation. If a pin is not missing it should still be specified on the
|
instantiation. If a pin is not missing it should still be specified on the
|
||||||
cell declaration with a empty connection,using "(.pin_name())".
|
cell declaration with a empty connection, using "(.pin_name())".
|
||||||
|
|
||||||
Ignoring this warning will only suppress the lint check, it will simulate
|
Ignoring this warning will only suppress the lint check, it will simulate
|
||||||
correctly.
|
correctly.
|
||||||
|
|
|
@ -84,6 +84,7 @@ public:
|
||||||
MULTIDRIVEN, // Driven from multiple blocks
|
MULTIDRIVEN, // Driven from multiple blocks
|
||||||
PINMISSING, // Cell pin not specified
|
PINMISSING, // Cell pin not specified
|
||||||
PINNOCONNECT, // Cell pin not connected
|
PINNOCONNECT, // Cell pin not connected
|
||||||
|
PINCONNECTEMPTY,// Cell pin connected by name with empty reference: ".name()" (can be used to mark unused pins)
|
||||||
REALCVT, // Real conversion
|
REALCVT, // Real conversion
|
||||||
REDEFMACRO, // Redefining existing define macro
|
REDEFMACRO, // Redefining existing define macro
|
||||||
SELRANGE, // Selection index out of range
|
SELRANGE, // Selection index out of range
|
||||||
|
@ -127,7 +128,7 @@ public:
|
||||||
"INCABSPATH", "INITIALDLY",
|
"INCABSPATH", "INITIALDLY",
|
||||||
"LITENDIAN", "MODDUP",
|
"LITENDIAN", "MODDUP",
|
||||||
"MULTIDRIVEN",
|
"MULTIDRIVEN",
|
||||||
"PINMISSING", "PINNOCONNECT",
|
"PINMISSING", "PINNOCONNECT", "PINCONNECTEMPTY",
|
||||||
"REALCVT", "REDEFMACRO",
|
"REALCVT", "REDEFMACRO",
|
||||||
"SELRANGE", "STMTDLY", "SYMRSVDWORD", "SYNCASYNCNET",
|
"SELRANGE", "STMTDLY", "SYMRSVDWORD", "SYNCASYNCNET",
|
||||||
"UNDRIVEN", "UNOPT", "UNOPTFLAT", "UNPACKED", "UNSIGNED", "UNUSED",
|
"UNDRIVEN", "UNOPT", "UNOPTFLAT", "UNPACKED", "UNSIGNED", "UNUSED",
|
||||||
|
@ -165,6 +166,7 @@ public:
|
||||||
|| m_e==DEFPARAM
|
|| m_e==DEFPARAM
|
||||||
|| m_e==DECLFILENAME
|
|| m_e==DECLFILENAME
|
||||||
|| m_e==INCABSPATH
|
|| m_e==INCABSPATH
|
||||||
|
|| m_e==PINCONNECTEMPTY
|
||||||
|| m_e==PINNOCONNECT
|
|| m_e==PINNOCONNECT
|
||||||
|| m_e==SYNCASYNCNET
|
|| m_e==SYNCASYNCNET
|
||||||
|| m_e==UNDRIVEN
|
|| m_e==UNDRIVEN
|
||||||
|
|
|
@ -308,7 +308,13 @@ private:
|
||||||
set<string> ports; // Symbol table of all connected port names
|
set<string> ports; // Symbol table of all connected port names
|
||||||
for (AstPin* pinp = nodep->pinsp(); pinp; pinp=pinp->nextp()->castPin()) {
|
for (AstPin* pinp = nodep->pinsp(); pinp; pinp=pinp->nextp()->castPin()) {
|
||||||
if (pinp->name()=="") pinp->v3error("Connect by position is illegal in .* connected cells");
|
if (pinp->name()=="") pinp->v3error("Connect by position is illegal in .* connected cells");
|
||||||
if (!pinp->exprp()) pinp->v3warn(PINNOCONNECT,"Cell pin is not connected: "<<pinp->prettyName());
|
if (!pinp->exprp()) {
|
||||||
|
if (pinp->name().substr(0, 11) == "__pinNumber") {
|
||||||
|
pinp->v3warn(PINNOCONNECT,"Cell pin is not connected: "<<pinp->prettyName());
|
||||||
|
} else {
|
||||||
|
pinp->v3warn(PINCONNECTEMPTY,"Cell pin connected by name with empty reference: "<<pinp->prettyName());
|
||||||
|
}
|
||||||
|
}
|
||||||
if (ports.find(pinp->name()) == ports.end()) {
|
if (ports.find(pinp->name()) == ports.end()) {
|
||||||
ports.insert(pinp->name());
|
ports.insert(pinp->name());
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,10 +6,12 @@
|
||||||
module t (/*AUTOARG*/);
|
module t (/*AUTOARG*/);
|
||||||
wire ok = 1'b0;
|
wire ok = 1'b0;
|
||||||
// verilator lint_off PINNOCONNECT
|
// verilator lint_off PINNOCONNECT
|
||||||
sub sub (.ok(ok), .nc());
|
// verilator lint_off PINCONNECTEMPTY
|
||||||
|
sub sub (.ok(ok), , .nc());
|
||||||
|
// verilator lint_on PINCONNECTEMPTY
|
||||||
// verilator lint_on PINNOCONNECT
|
// verilator lint_on PINNOCONNECT
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
module sub (input ok, input nc);
|
module sub (input ok, input none, input nc);
|
||||||
initial if (ok&&nc) begin end // No unused warning
|
initial if (ok && none && nc) begin end // No unused warning
|
||||||
endmodule
|
endmodule
|
||||||
|
|
|
@ -11,9 +11,10 @@ compile (
|
||||||
v_flags2 => ["--lint-only --Wall -Wno-DECLFILENAME"],
|
v_flags2 => ["--lint-only --Wall -Wno-DECLFILENAME"],
|
||||||
fails=>1,
|
fails=>1,
|
||||||
expect=>
|
expect=>
|
||||||
q{%Warning-PINNOCONNECT: t/t_inst_missing_bad.v:\d+: Cell pin is not connected: nc
|
q{%Warning-PINNOCONNECT: t/t_inst_missing_bad.v:8: Cell pin is not connected: __pinNumber2
|
||||||
%Warning-PINNOCONNECT: Use .*
|
%Warning-PINNOCONNECT: Use .*
|
||||||
%Warning-PINMISSING: t/t_inst_missing_bad.v:\d+: Cell has missing pin: missing
|
%Warning-PINCONNECTEMPTY: t/t_inst_missing_bad.v:8: Cell pin connected by name with empty reference: nc
|
||||||
|
%Warning-PINMISSING: t/t_inst_missing_bad.v:8: Cell has missing pin: missing
|
||||||
%Error: Exiting due to.*},
|
%Error: Exiting due to.*},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,9 @@
|
||||||
|
|
||||||
module t (/*AUTOARG*/);
|
module t (/*AUTOARG*/);
|
||||||
wire ok = 1'b0;
|
wire ok = 1'b0;
|
||||||
sub sub (.ok(ok), .nc());
|
sub sub (.ok(ok), , .nc());
|
||||||
endmodule
|
endmodule
|
||||||
|
|
||||||
module sub (input ok, input nc, input missing);
|
module sub (input ok, input none, input nc, input missing);
|
||||||
initial if (ok&&nc&&missing) begin end // No unused warning
|
initial if (ok && none && nc && missing) begin end // No unused warning
|
||||||
endmodule
|
endmodule
|
||||||
|
|
Loading…
Reference in New Issue