@@ -43,6 +43,105 @@ TEST(ForbidImplicitDeclarationsRule, FunctionFailures) {
43
43
{" module m;\n wire a1;\n begin\n end\n assign a1 = 1'b0;\n endmodule" },
44
44
{" module m;\n wire a1;\n begin\n assign " , {kToken , " a1" }, " = 1'b0;\n end\n assign a1 = 1'b0;\n endmodule" },
45
45
{" module m;\n wire a1;\n begin\n wire a1; assign a1 = 1'b0;\n end\n assign a1 = 1'b0;\n endmodule" },
46
+
47
+ // multiple declarations
48
+ {" module m;\n wire a0, a1;\n assign a0 = 1'b0;\n assign a1 = 1'b1;\n endmodule" },
49
+ {" module m;\n wire a0, a2;\n assign a0 = 1'b0;\n assign " , {kToken , " a1" }, " = 1'b1;\n endmodule" },
50
+
51
+ // multiple net assignments
52
+ {" module m;\n assign " , {kToken , " a" }, " = b, " , {kToken , " c" }, " = d;\n endmodule" },
53
+ {" module m;\n assign " , {kToken , " a1" }, " = 1'b0;wire a1;\n endmodule" },
54
+
55
+ // out-of-order
56
+ {" module m;\n assign " , {kToken , " a1" }, " = 1'b0;\n wire a1;\n assign a1 = 1'b1;\n endmodule" },
57
+
58
+ // concatenated
59
+ {" module m;\n assign {" , {kToken , " a" }, " } = 1'b0;\n endmodule" },
60
+ {" module m;\n assign {" , {kToken , " a" }, " ," , {kToken , " b" }, " } = 2'b01;\n endmodule" },
61
+ {" module m;\n assign {" , {kToken , " a" }, " ," , {kToken , " b" }, " ," , {kToken , " c" }, " } = 3'b010;\n endmodule" },
62
+ {" module m;\n wire b;assign {" , {kToken , " a" }, " , b," , {kToken , " c" }, " } = 3'b010;\n endmodule" },
63
+
64
+ // around scope
65
+ {" module m;assign " , {kToken , " a1" }, " = 1'b1;\n begin\n end\n endmodule" },
66
+ {" module m;begin\n end\n assign " , {kToken , " a1" }, " = 1'b1;endmodule" },
67
+
68
+ // declaration and assignement separated by begin-end block
69
+ {" module m;\n wire a1;\n begin\n end\n assign a1 = 1'b1;\n endmodule" },
70
+
71
+ // out-of-scope
72
+ {" module m;\n begin wire a1;\n end\n assign " , {kToken , " a1" }, " = 1'b1;\n endmodule" },
73
+ {" module m;\n begin wire a1;\n assign a1 = 1'b0;\n end\n assign " , {kToken , " a1" }, " = 1'b1;\n endmodule" },
74
+ {" module m;\n wire a1;begin assign " , {kToken , " a1" }, " = 1'b0;\n end\n assign a1 = 1'b1;\n endmodule" },
75
+
76
+ // multi-level begin-end blocks
77
+ {" module m;\n "
78
+ " wire x1;\n "
79
+ " begin\n "
80
+ " wire x2;\n "
81
+ " begin\n "
82
+ " wire x3;\n "
83
+ " begin\n "
84
+ " wire x4;\n "
85
+ " assign x4 = 1'b0;\n "
86
+ " assign " , {kToken , " x3" }, " = 1'b0;\n "
87
+ " assign " , {kToken , " x2" }, " = 1'b0;\n "
88
+ " assign " , {kToken , " x1" }, " = 1'b0;\n "
89
+ " end\n "
90
+ " assign " , {kToken , " x4" }, " = 1'b0;\n "
91
+ " assign x3 = 1'b1;\n "
92
+ " assign " , {kToken , " x2" }, " = 1'b0;\n "
93
+ " assign " , {kToken , " x1" }, " = 1'b0;\n "
94
+ " end\n "
95
+ " assign " , {kToken , " x4" }, " = 1'b0;\n "
96
+ " assign " , {kToken , " x3" }, " = 1'b0;\n "
97
+ " assign x2 = 1'b0;\n "
98
+ " assign " , {kToken , " x1" }, " = 1'b0;\n "
99
+ " end\n "
100
+ " assign " , {kToken , " x4" }, " = 1'b0;\n "
101
+ " assign " , {kToken , " x3" }, " = 1'b0;\n "
102
+ " assign " , {kToken , " x2" }, " = 1'b0;\n "
103
+ " assign x1 = 1'b1;\n "
104
+ " endmodule" },
105
+
106
+ // generate block, TODO: multi-level
107
+ {" module m;\n generate\n endgenerate\n endmodule" },
108
+ {" module m;\n "
109
+ " wire a1;\n "
110
+ " assign a1 = 1'b1;\n "
111
+ " generate\n "
112
+ " endgenerate\n "
113
+ " assign a1 = 1'b0;\n "
114
+ " endmodule" },
115
+ {" module m;\n "
116
+ " generate\n "
117
+ " wire a1;\n "
118
+ " assign a1 = 1'b1;\n "
119
+ " endgenerate\n "
120
+ " endmodule" },
121
+ {" module m;\n "
122
+ " generate\n "
123
+ " assign " , {kToken , " a1" }, " = 1'b1;\n "
124
+ " endgenerate\n "
125
+ " endmodule" },
126
+ {" module m;\n "
127
+ " generate\n "
128
+ " wire a1;\n "
129
+ " assign a1 = 1'b1;\n "
130
+ " endgenerate\n "
131
+ " assign " , {kToken , " a1" }, " = 1'b1;\n "
132
+ " endmodule" },
133
+ {" module m;\n "
134
+ " wire a1;\n "
135
+ " assign a1 = 1'b1;\n "
136
+ " generate\n "
137
+ " assign " , {kToken , " a1" }, " = 1'b1;\n "
138
+ " endgenerate\n "
139
+ " assign a1 = 1'b0;\n "
140
+ " endmodule" },
141
+
142
+ // TODO: module scope
143
+
144
+ // TODO: nets declared inside terminal/port connection list
46
145
};
47
146
48
147
RunLintTestCases<VerilogAnalyzer, ForbidImplicitDeclarationsRule>(
0 commit comments