Refactor test for invalid parameter overrides

Split the test into multiple tests that each check one type of invalid
override rather than having one big tests that checks for everything.

This allow to check whether the test passes or fails by seeing if it
compiles or not. The one big test on the other hand relies on seeing the
exact error messages as recorded in the gold file.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
This commit is contained in:
Lars-Peter Clausen 2022-02-15 09:53:45 +01:00
parent 673b40b78c
commit bb74c6412d
12 changed files with 161 additions and 85 deletions

View File

@ -1,21 +0,0 @@
./ivltests/parameter_invalid_override.v:28: error: Cannot override localparam `C` in `test.i_a`.
./ivltests/parameter_invalid_override.v:29: error: Cannot override localparam `D` in `test.i_a`.
./ivltests/parameter_invalid_override.v:31: error: Cannot override localparam `F` in `test.i_a`.
./ivltests/parameter_invalid_override.v:32: error: Cannot override localparam `G` in `test.i_a`.
./ivltests/parameter_invalid_override.v:33: error: Cannot override localparam `H` in `test.i_a`.
./ivltests/parameter_invalid_override.v:34: error: Cannot override localparam `I` in `test.i_a`.
./ivltests/parameter_invalid_override.v:35: error: parameter `Z` not found in `test.i_a`.
./ivltests/parameter_invalid_override.v:52: error: Cannot override localparam `C` in `test.i_b`.
./ivltests/parameter_invalid_override.v:53: error: Cannot override localparam `D` in `test.i_b`.
./ivltests/parameter_invalid_override.v:54: error: parameter `Z` not found in `test.i_b`.
./ivltests/parameter_invalid_override.v:40: error: Cannot override localparam `C` in `test.i_a`.
./ivltests/parameter_invalid_override.v:41: error: Cannot override localparam `D` in `test.i_a`.
./ivltests/parameter_invalid_override.v:43: error: Cannot override localparam `F` in `test.i_a`.
./ivltests/parameter_invalid_override.v:44: error: Cannot override localparam `G` in `test.i_a`.
./ivltests/parameter_invalid_override.v:45: error: Cannot override localparam `H` in `test.i_a`.
./ivltests/parameter_invalid_override.v:46: error: Cannot override localparam `I` in `test.i_a`.
./ivltests/parameter_invalid_override.v:47: error: parameter `Z` not found in `test.i_a`.
./ivltests/parameter_invalid_override.v:59: error: Cannot override localparam `C` in `test.i_b`.
./ivltests/parameter_invalid_override.v:60: error: Cannot override localparam `D` in `test.i_b`.
./ivltests/parameter_invalid_override.v:61: error: parameter `Z` not found in `test.i_b`.
21 error(s) during elaboration.

View File

@ -1,63 +0,0 @@
// Check that invalid parameter overrides generate an error
module a #(
parameter A = 1, B = 2,
localparam C = 3, localparam D = 4, // TODO: D should be localparam even when the keyword omitted
parameter E = 5
);
// TODO: parameter here should be treated as a localparam since the module has a
// parameter port list
/*parameter*/ localparam F = 6, G = 7;
localparam H = 8, I = 9;
endmodule
module b;
parameter A = 1, B = 2;
localparam C = 3, D = 4;
endmodule
module test;
a #(
.A(10),
.B(20),
.C(30),
.D(40),
.E(50),
.F(60),
.G(70),
.H(80),
.I(90),
.Z(99)
) i_a();
defparam i_a.A = 100;
defparam i_a.B = 200;
defparam i_a.C = 300;
defparam i_a.D = 400;
defparam i_a.E = 500;
defparam i_a.F = 600;
defparam i_a.G = 700;
defparam i_a.H = 800;
defparam i_a.I = 900;
defparam i_a.Z = 999;
b #(
.A(10),
.B(20),
.C(30),
.D(40),
.Z(99)
) i_b();
defparam i_b.A = 100;
defparam i_b.B = 200;
defparam i_b.C = 300;
defparam i_b.D = 400;
defparam i_b.Z = 999;
endmodule

View File

@ -0,0 +1,19 @@
// Check that trying to override a parameter that does not exist results in an
// error
module a #(
parameter A = 1
);
initial begin
$display("FAILED");
end
endmodule
module test;
a #(
.Z(10) // Error
) i_a();
endmodule

View File

@ -0,0 +1,21 @@
// Check that trying to override a parameter that does not exist results in an
// error
module a #(
parameter A = 1
);
initial begin
$display("FAILED");
end
endmodule
module test;
a #(
.A(10)
) i_a();
defparam i_a.Z = 10; // Error
endmodule

View File

@ -0,0 +1,17 @@
// Check that localparam can not be overridden
module a;
localparam A = 1;
initial begin
$display("FAILED");
end
endmodule
module test;
a #(
.A(10) // Error
) i_a();
endmodule

View File

@ -0,0 +1,17 @@
// Check that localparam can not be overridden by defparam
module a;
localparam A = 1;
initial begin
$display("FAILED");
end
endmodule
module test;
a i_a();
defparam i_a.A = 10; // Error
endmodule

View File

@ -0,0 +1,22 @@
// Check that parameter declared in the module body can not be overridden if the
// module has a parameter port list.
module a #(
parameter A = 1
);
// This behaves like a localparam
parameter B = 1;
initial begin
$display("FAILED");
end
endmodule
module test;
a #(
.A(10),
.B(20) // Error
) i_a();
endmodule

View File

@ -0,0 +1,20 @@
// Check that parameter declared in the module body can not be overridden by a
// defparam if the module has a parameter port list.
module a #(parameter A = 1);
// This behaves like a localparam
parameter B = 2;
initial begin
$display("FAILED");
end
endmodule
module test;
a i_a();
defparam i_a.A = 10;
defparam i_a.B = 20; // Error
endmodule

View File

@ -0,0 +1,18 @@
// Check that localparam declared in parameter port list can not be overridden
module a #(
localparam B = 2
);
initial begin
$display("FAILED");
end
endmodule
module test;
a #(
.A(10) // Error
) i_a();
endmodule

View File

@ -0,0 +1,19 @@
// Check that localparam declared in parameter port list can not be overridden
// by defparam
module a #(
localparam A = 1
);
initial begin
$display("FAILED");
end
endmodule
module test;
a i_a();
defparam i_a.A = 10; // Error
endmodule

View File

@ -317,11 +317,12 @@ named_fork_fail CE,-g2009 ivltests
packeda normal,-g2009 ivltests
packeda2 normal,-g2009 ivltests
parameter_in_generate2 CE,-g2005-sv ivltests
parameter_invalid_override CE,-g2005-sv ivltests gold=parameter_invalid_override.gold
parameter_no_default CE,-g2005-sv ivltests
parameter_no_default_fail1 CE ivltests
parameter_no_default_fail2 CE ivltests
parameter_no_default_toplvl normal,-g2005-sv ivltests
parameter_override_invalid7 CE,-g2005-sv ivltests
parameter_override_invalid8 CE,-g2005-sv ivltests
parameter_type2 normal,-g2009 ivltests
parpkg_test normal,-g2009 ivltests
parpkg_test2 normal,-g2009 ivltests

View File

@ -703,6 +703,12 @@ parameter_omit3 CE ivltests
parameter_omit_invalid1 CE ivltests
parameter_omit_invalid2 CE ivltests
parameter_omit_invalid3 CE ivltests
parameter_override_invalid1 CE ivltests
parameter_override_invalid2 CE ivltests
parameter_override_invalid3 CE ivltests
parameter_override_invalid4 CE ivltests
parameter_override_invalid5 CE ivltests
parameter_override_invalid6 CE ivltests
patch1268 normal ivltests
pca1 normal ivltests # Procedural Continuous Assignment in a mux
pic normal contrib pictest gold=pic.gold