From 880f4927bf80d06a6a36c8a43966433a4122cafb Mon Sep 17 00:00:00 2001 From: Lars-Peter Clausen Date: Sun, 23 Jan 2022 21:11:19 +0100 Subject: [PATCH] Add regression test for invalid parameter overrides Check that invalid parameter overrides generate an error. There are some cases that are not handled correctly today. The test will be updated once they are addressed. Signed-off-by: Lars-Peter Clausen --- ivtest/gold/parameter_invalid_override.gold | 21 +++++++ ivtest/ivltests/parameter_invalid_override.v | 63 ++++++++++++++++++++ ivtest/regress-sv.list | 1 + 3 files changed, 85 insertions(+) create mode 100644 ivtest/gold/parameter_invalid_override.gold create mode 100644 ivtest/ivltests/parameter_invalid_override.v diff --git a/ivtest/gold/parameter_invalid_override.gold b/ivtest/gold/parameter_invalid_override.gold new file mode 100644 index 000000000..029fc3262 --- /dev/null +++ b/ivtest/gold/parameter_invalid_override.gold @@ -0,0 +1,21 @@ +./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. diff --git a/ivtest/ivltests/parameter_invalid_override.v b/ivtest/ivltests/parameter_invalid_override.v new file mode 100644 index 000000000..32843690c --- /dev/null +++ b/ivtest/ivltests/parameter_invalid_override.v @@ -0,0 +1,63 @@ +// 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 diff --git a/ivtest/regress-sv.list b/ivtest/regress-sv.list index a0bfc15e6..f11026406 100644 --- a/ivtest/regress-sv.list +++ b/ivtest/regress-sv.list @@ -311,6 +311,7 @@ named_fork normal,-g2009 ivltests named_fork_fail CE,-g2009 ivltests packeda normal,-g2009 ivltests packeda2 normal,-g2009 ivltests +parameter_invalid_override CE,-g2005-sv ivltests gold=parameter_invalid_override.gold parameter_type2 normal,-g2009 ivltests parpkg_test normal,-g2009 ivltests parpkg_test2 normal,-g2009 ivltests