diff --git a/ivtest/ivltests/sv_type_identifier_modport_named_port.v b/ivtest/ivltests/sv_type_identifier_modport_named_port.v new file mode 100644 index 000000000..53e6adbfd --- /dev/null +++ b/ivtest/ivltests/sv_type_identifier_modport_named_port.v @@ -0,0 +1,18 @@ +// Check that a modport simple port selector can shadow a visible typedef name. + +interface I; + typedef int T; + logic value; + + modport m(input .T(value)); +endinterface + +module test; + + I i(); + + initial begin + $display("PASSED"); + end + +endmodule diff --git a/ivtest/ivltests/sv_type_identifier_named_constructor_argument.v b/ivtest/ivltests/sv_type_identifier_named_constructor_argument.v new file mode 100644 index 000000000..8bbc0f298 --- /dev/null +++ b/ivtest/ivltests/sv_type_identifier_named_constructor_argument.v @@ -0,0 +1,36 @@ +// Check that a named constructor argument selector can match a visible typedef name. + +module test; + + class C; + integer value; + + function new(input integer T, input integer B); + value = T + B; + endfunction + endclass + + typedef int T; + + reg failed; + + `define check(val, exp) \ + if (val !== exp) begin \ + $display("FAILED(%0d). '%s' expected %0d, got %0d", `__LINE__, \ + `"val`", exp, val); \ + failed = 1'b1; \ + end + + initial begin + C c; + + failed = 1'b0; + c = new(.T(40), .B(2)); + `check(c.value, 42); + + if (!failed) begin + $display("PASSED"); + end + end + +endmodule diff --git a/ivtest/ivltests/sv_type_identifier_named_function_argument.v b/ivtest/ivltests/sv_type_identifier_named_function_argument.v new file mode 100644 index 000000000..d193a241f --- /dev/null +++ b/ivtest/ivltests/sv_type_identifier_named_function_argument.v @@ -0,0 +1,31 @@ +// Check that a named function argument selector can match a visible typedef name. + +module test; + + function integer f(input integer T, input integer B); + f = T + B; + endfunction + + typedef int T; + + reg failed; + integer value; + + `define check(val, exp) \ + if (val !== exp) begin \ + $display("FAILED(%0d). '%s' expected %0d, got %0d", `__LINE__, \ + `"val`", exp, val); \ + failed = 1'b1; \ + end + + initial begin + failed = 1'b0; + value = f(.T(40), .B(2)); + `check(value, 42); + + if (!failed) begin + $display("PASSED"); + end + end + +endmodule diff --git a/ivtest/ivltests/sv_type_identifier_named_parameter_value.v b/ivtest/ivltests/sv_type_identifier_named_parameter_value.v new file mode 100644 index 000000000..d448253de --- /dev/null +++ b/ivtest/ivltests/sv_type_identifier_named_parameter_value.v @@ -0,0 +1,33 @@ +// Check that a named parameter override selector can match a visible typedef name. + +module M #(parameter integer T = 0) (output [31:0] Y); + assign Y = T; +endmodule + +module test; + + typedef int T; + + reg failed; + wire [31:0] y; + + M #(.T(32'd42)) i_m(.Y(y)); + + `define check(val, exp) \ + if (val !== exp) begin \ + $display("FAILED(%0d). '%s' expected %0d, got %0d", `__LINE__, \ + `"val`", exp, val); \ + failed = 1'b1; \ + end + + initial begin + failed = 1'b0; + #1; + `check(y, 32'd42); + + if (!failed) begin + $display("PASSED"); + end + end + +endmodule diff --git a/ivtest/ivltests/sv_type_identifier_named_port_connection.v b/ivtest/ivltests/sv_type_identifier_named_port_connection.v new file mode 100644 index 000000000..be9ed82ff --- /dev/null +++ b/ivtest/ivltests/sv_type_identifier_named_port_connection.v @@ -0,0 +1,35 @@ +// Check that a named port connection selector can match a visible typedef name. + +module M(input [3:0] T, output [3:0] Y); + assign Y = T; +endmodule + +module test; + + typedef int T; + + reg failed; + reg [3:0] value; + wire [3:0] y; + + M i_m(.T(value), .Y(y)); + + `define check(val, exp) \ + if (val !== exp) begin \ + $display("FAILED(%0d). '%s' expected %0h, got %0h", `__LINE__, \ + `"val`", exp, val); \ + failed = 1'b1; \ + end + + initial begin + failed = 1'b0; + value = 4'ha; + #1; + `check(y, 4'ha); + + if (!failed) begin + $display("PASSED"); + end + end + +endmodule diff --git a/ivtest/ivltests/sv_type_identifier_named_task_argument.v b/ivtest/ivltests/sv_type_identifier_named_task_argument.v new file mode 100644 index 000000000..0ee84ae4f --- /dev/null +++ b/ivtest/ivltests/sv_type_identifier_named_task_argument.v @@ -0,0 +1,31 @@ +// Check that a named task argument selector can match a visible typedef name. + +module test; + + task t(input integer T, output integer result); + result = T; + endtask + + typedef int T; + + reg failed; + integer value; + + `define check(val, exp) \ + if (val !== exp) begin \ + $display("FAILED(%0d). '%s' expected %0d, got %0d", `__LINE__, \ + `"val`", exp, val); \ + failed = 1'b1; \ + end + + initial begin + failed = 1'b0; + t(.T(42), .result(value)); + `check(value, 42); + + if (!failed) begin + $display("PASSED"); + end + end + +endmodule diff --git a/ivtest/regress-vvp.list b/ivtest/regress-vvp.list index e8d021038..10359abca 100644 --- a/ivtest/regress-vvp.list +++ b/ivtest/regress-vvp.list @@ -396,7 +396,13 @@ sv_type_identifier_function_name vvp_tests/sv_type_identifier_function_name.json sv_type_identifier_generate_label_name vvp_tests/sv_type_identifier_generate_label_name.json sv_type_identifier_genvar_name vvp_tests/sv_type_identifier_genvar_name.json sv_type_identifier_modport_name vvp_tests/sv_type_identifier_modport_name.json +sv_type_identifier_modport_named_port vvp_tests/sv_type_identifier_modport_named_port.json sv_type_identifier_module_name vvp_tests/sv_type_identifier_module_name.json +sv_type_identifier_named_constructor_argument vvp_tests/sv_type_identifier_named_constructor_argument.json +sv_type_identifier_named_function_argument vvp_tests/sv_type_identifier_named_function_argument.json +sv_type_identifier_named_parameter_value vvp_tests/sv_type_identifier_named_parameter_value.json +sv_type_identifier_named_port_connection vvp_tests/sv_type_identifier_named_port_connection.json +sv_type_identifier_named_task_argument vvp_tests/sv_type_identifier_named_task_argument.json sv_type_identifier_net_name vvp_tests/sv_type_identifier_net_name.json sv_type_identifier_package_item vvp_tests/sv_type_identifier_package_item.json sv_type_identifier_package_name vvp_tests/sv_type_identifier_package_name.json diff --git a/ivtest/vvp_tests/sv_type_identifier_modport_named_port.json b/ivtest/vvp_tests/sv_type_identifier_modport_named_port.json new file mode 100644 index 000000000..b3138f57d --- /dev/null +++ b/ivtest/vvp_tests/sv_type_identifier_modport_named_port.json @@ -0,0 +1,5 @@ +{ + "type" : "normal", + "source" : "sv_type_identifier_modport_named_port.v", + "iverilog-args" : [ "-g2005-sv" ] +} diff --git a/ivtest/vvp_tests/sv_type_identifier_named_constructor_argument.json b/ivtest/vvp_tests/sv_type_identifier_named_constructor_argument.json new file mode 100644 index 000000000..e50d8a5c7 --- /dev/null +++ b/ivtest/vvp_tests/sv_type_identifier_named_constructor_argument.json @@ -0,0 +1,9 @@ +{ + "type" : "normal", + "source" : "sv_type_identifier_named_constructor_argument.v", + "iverilog-args" : [ "-g2005-sv" ], + "vlog95" : { + "__comment" : "Class scopes and new operators are not translated", + "type" : "CE" + } +} diff --git a/ivtest/vvp_tests/sv_type_identifier_named_function_argument.json b/ivtest/vvp_tests/sv_type_identifier_named_function_argument.json new file mode 100644 index 000000000..7186b6525 --- /dev/null +++ b/ivtest/vvp_tests/sv_type_identifier_named_function_argument.json @@ -0,0 +1,5 @@ +{ + "type" : "normal", + "source" : "sv_type_identifier_named_function_argument.v", + "iverilog-args" : [ "-g2005-sv" ] +} diff --git a/ivtest/vvp_tests/sv_type_identifier_named_parameter_value.json b/ivtest/vvp_tests/sv_type_identifier_named_parameter_value.json new file mode 100644 index 000000000..b3bf35a92 --- /dev/null +++ b/ivtest/vvp_tests/sv_type_identifier_named_parameter_value.json @@ -0,0 +1,5 @@ +{ + "type" : "normal", + "source" : "sv_type_identifier_named_parameter_value.v", + "iverilog-args" : [ "-g2005-sv" ] +} diff --git a/ivtest/vvp_tests/sv_type_identifier_named_port_connection.json b/ivtest/vvp_tests/sv_type_identifier_named_port_connection.json new file mode 100644 index 000000000..48e05b779 --- /dev/null +++ b/ivtest/vvp_tests/sv_type_identifier_named_port_connection.json @@ -0,0 +1,5 @@ +{ + "type" : "normal", + "source" : "sv_type_identifier_named_port_connection.v", + "iverilog-args" : [ "-g2005-sv" ] +} diff --git a/ivtest/vvp_tests/sv_type_identifier_named_task_argument.json b/ivtest/vvp_tests/sv_type_identifier_named_task_argument.json new file mode 100644 index 000000000..0f0d45766 --- /dev/null +++ b/ivtest/vvp_tests/sv_type_identifier_named_task_argument.json @@ -0,0 +1,5 @@ +{ + "type" : "normal", + "source" : "sv_type_identifier_named_task_argument.v", + "iverilog-args" : [ "-g2005-sv" ] +}