diff --git a/ivtest/ivltests/sv_interface_identifier_block_name.v b/ivtest/ivltests/sv_interface_identifier_block_name.v new file mode 100644 index 000000000..95a561947 --- /dev/null +++ b/ivtest/ivltests/sv_interface_identifier_block_name.v @@ -0,0 +1,12 @@ +// Check that a procedural block can match a visible interface name. + +interface I; +endinterface + +module test; + + initial begin : I + $display("PASSED"); + end + +endmodule diff --git a/ivtest/ivltests/sv_interface_identifier_instance_name.v b/ivtest/ivltests/sv_interface_identifier_instance_name.v new file mode 100644 index 000000000..5489ddb27 --- /dev/null +++ b/ivtest/ivltests/sv_interface_identifier_instance_name.v @@ -0,0 +1,23 @@ +// Check that an interface instance can match its interface type name. + +interface I; + logic value; +endinterface + +module test; + + I I(); + + initial begin + I.value = 1'b1; + #1; + + if (I.value !== 1'b1) begin + $display("FAILED"); + $finish; + end + + $display("PASSED"); + end + +endmodule diff --git a/ivtest/ivltests/sv_interface_identifier_interface_port_name.v b/ivtest/ivltests/sv_interface_identifier_interface_port_name.v new file mode 100644 index 000000000..0b4c8e838 --- /dev/null +++ b/ivtest/ivltests/sv_interface_identifier_interface_port_name.v @@ -0,0 +1,30 @@ +// Check that an interface port can match its interface type name. + +interface I; + logic value; +endinterface + +module dut(I I); + + assign I.value = 1'b1; + +endmodule + +module test; + + I bus(); + + dut i_dut(bus); + + initial begin + #1; + + if (bus.value !== 1'b1) begin + $display("FAILED"); + $finish; + end + + $display("PASSED"); + end + +endmodule diff --git a/ivtest/ivltests/sv_interface_identifier_member_name.v b/ivtest/ivltests/sv_interface_identifier_member_name.v new file mode 100644 index 000000000..d8089c534 --- /dev/null +++ b/ivtest/ivltests/sv_interface_identifier_member_name.v @@ -0,0 +1,23 @@ +// Check that an interface member can match the interface name. + +interface I; + logic I; +endinterface + +module test; + + I bus(); + + initial begin + bus.I = 1'b1; + #1; + + if (bus.I !== 1'b1) begin + $display("FAILED"); + $finish; + end + + $display("PASSED"); + end + +endmodule diff --git a/ivtest/ivltests/sv_interface_identifier_modport_name.v b/ivtest/ivltests/sv_interface_identifier_modport_name.v new file mode 100644 index 000000000..051151da9 --- /dev/null +++ b/ivtest/ivltests/sv_interface_identifier_modport_name.v @@ -0,0 +1,31 @@ +// Check that a modport can match the interface name. + +interface I; + logic value; + modport I(output value); +endinterface + +module dut(I.I bus); + + assign bus.value = 1'b1; + +endmodule + +module test; + + I bus(); + + dut i_dut(bus); + + initial begin + #1; + + if (bus.value !== 1'b1) begin + $display("FAILED"); + $finish; + end + + $display("PASSED"); + end + +endmodule diff --git a/ivtest/ivltests/sv_interface_identifier_port_name.v b/ivtest/ivltests/sv_interface_identifier_port_name.v new file mode 100644 index 000000000..f5c55a2c5 --- /dev/null +++ b/ivtest/ivltests/sv_interface_identifier_port_name.v @@ -0,0 +1,32 @@ +// Check that an ordinary port can match a visible interface name. + +interface I; +endinterface + +module dut( + input wire I, + output wire value +); + + assign value = I; + +endmodule + +module test; + + wire value; + + dut i_dut(.I(1'b1), .value(value)); + + initial begin + #1; + + if (value !== 1'b1) begin + $display("FAILED"); + $finish; + end + + $display("PASSED"); + end + +endmodule diff --git a/ivtest/ivltests/sv_interface_port_forward_type_after_port.v b/ivtest/ivltests/sv_interface_port_forward_type_after_port.v new file mode 100644 index 000000000..24d0f0543 --- /dev/null +++ b/ivtest/ivltests/sv_interface_port_forward_type_after_port.v @@ -0,0 +1,41 @@ +// Check that an attribute does not prevent recognizing a forward interface +// port type after another ANSI port declaration. + +module dut( + input wire enable, + (* keep = 1 *) bus_if.producer bus, + bus_if mirror +); + + assign bus.value = enable; + assign mirror.value = bus.value; + +endmodule + +interface bus_if; + logic value; + + modport producer(output value); +endinterface + +module test; + + reg enable; + bus_if bus(); + bus_if mirror(); + + dut i_dut(enable, bus, mirror); + + initial begin + enable = 1'b1; + #1; + + if (bus.value !== 1'b1 || mirror.value !== 1'b1) begin + $display("FAILED"); + $finish; + end + + $display("PASSED"); + end + +endmodule diff --git a/ivtest/regress-vvp.list b/ivtest/regress-vvp.list index 4aa6061ea..c0263f055 100644 --- a/ivtest/regress-vvp.list +++ b/ivtest/regress-vvp.list @@ -315,7 +315,14 @@ sv_default_port_value3 vvp_tests/sv_default_port_value3.json sv_foreach9 vvp_tests/sv_foreach9.json sv_foreach10 vvp_tests/sv_foreach10.json sv_interface vvp_tests/sv_interface.json +sv_interface_identifier_block_name vvp_tests/sv_interface_identifier_block_name.json +sv_interface_identifier_instance_name vvp_tests/sv_interface_identifier_instance_name.json +sv_interface_identifier_interface_port_name vvp_tests/sv_interface_identifier_interface_port_name.json +sv_interface_identifier_member_name vvp_tests/sv_interface_identifier_member_name.json +sv_interface_identifier_modport_name vvp_tests/sv_interface_identifier_modport_name.json +sv_interface_identifier_port_name vvp_tests/sv_interface_identifier_port_name.json sv_interface_port_basic vvp_tests/sv_interface_port_basic.json +sv_interface_port_forward_type_after_port vvp_tests/sv_interface_port_forward_type_after_port.json sv_interface_port_missing_type_fail vvp_tests/sv_interface_port_missing_type_fail.json sv_interface_port_missing_modport_fail vvp_tests/sv_interface_port_missing_modport_fail.json sv_interface_port_non_interface_actual_fail vvp_tests/sv_interface_port_non_interface_actual_fail.json diff --git a/ivtest/vvp_tests/sv_interface_identifier_block_name.json b/ivtest/vvp_tests/sv_interface_identifier_block_name.json new file mode 100644 index 000000000..2f00dfaa9 --- /dev/null +++ b/ivtest/vvp_tests/sv_interface_identifier_block_name.json @@ -0,0 +1,5 @@ +{ + "type" : "normal", + "source" : "sv_interface_identifier_block_name.v", + "iverilog-args" : [ "-g2005-sv" ] +} diff --git a/ivtest/vvp_tests/sv_interface_identifier_instance_name.json b/ivtest/vvp_tests/sv_interface_identifier_instance_name.json new file mode 100644 index 000000000..17ebe5791 --- /dev/null +++ b/ivtest/vvp_tests/sv_interface_identifier_instance_name.json @@ -0,0 +1,5 @@ +{ + "type" : "normal", + "source" : "sv_interface_identifier_instance_name.v", + "iverilog-args" : [ "-g2005-sv" ] +} diff --git a/ivtest/vvp_tests/sv_interface_identifier_interface_port_name.json b/ivtest/vvp_tests/sv_interface_identifier_interface_port_name.json new file mode 100644 index 000000000..ae611f884 --- /dev/null +++ b/ivtest/vvp_tests/sv_interface_identifier_interface_port_name.json @@ -0,0 +1,9 @@ +{ + "type" : "normal", + "source" : "sv_interface_identifier_interface_port_name.v", + "iverilog-args" : [ "-g2005-sv" ], + "vlog95" : { + "__comment" : "vlog95 redeclares connected interface instances as nets", + "type" : "TE" + } +} diff --git a/ivtest/vvp_tests/sv_interface_identifier_member_name.json b/ivtest/vvp_tests/sv_interface_identifier_member_name.json new file mode 100644 index 000000000..a6eb467a6 --- /dev/null +++ b/ivtest/vvp_tests/sv_interface_identifier_member_name.json @@ -0,0 +1,5 @@ +{ + "type" : "normal", + "source" : "sv_interface_identifier_member_name.v", + "iverilog-args" : [ "-g2005-sv" ] +} diff --git a/ivtest/vvp_tests/sv_interface_identifier_modport_name.json b/ivtest/vvp_tests/sv_interface_identifier_modport_name.json new file mode 100644 index 000000000..f3a8d8a26 --- /dev/null +++ b/ivtest/vvp_tests/sv_interface_identifier_modport_name.json @@ -0,0 +1,9 @@ +{ + "type" : "normal", + "source" : "sv_interface_identifier_modport_name.v", + "iverilog-args" : [ "-g2005-sv" ], + "vlog95" : { + "__comment" : "vlog95 redeclares connected interface instances as nets", + "type" : "TE" + } +} diff --git a/ivtest/vvp_tests/sv_interface_identifier_port_name.json b/ivtest/vvp_tests/sv_interface_identifier_port_name.json new file mode 100644 index 000000000..ab09d36c9 --- /dev/null +++ b/ivtest/vvp_tests/sv_interface_identifier_port_name.json @@ -0,0 +1,5 @@ +{ + "type" : "normal", + "source" : "sv_interface_identifier_port_name.v", + "iverilog-args" : [ "-g2005-sv" ] +} diff --git a/ivtest/vvp_tests/sv_interface_port_forward_type_after_port.json b/ivtest/vvp_tests/sv_interface_port_forward_type_after_port.json new file mode 100644 index 000000000..ac681ab4f --- /dev/null +++ b/ivtest/vvp_tests/sv_interface_port_forward_type_after_port.json @@ -0,0 +1,9 @@ +{ + "type" : "normal", + "source" : "sv_interface_port_forward_type_after_port.v", + "iverilog-args" : [ "-g2005-sv" ], + "vlog95" : { + "__comment" : "vlog95 redeclares connected interface instances as nets", + "type" : "TE" + } +}